Advertisement
AlewAlow

frames

Sep 8th, 2023
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.24 KB | None | 0 0
  1. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  2.  
  3. local Matter = require(ReplicatedStorage.Shared.Libs.Matter)
  4. local Components = require(ReplicatedStorage.Shared.Components)
  5. local Constants = require(ReplicatedStorage.Shared.Constants)
  6.  
  7. local RemoveMissingFrames = require(script.Parent.RemoveMissingFrames)
  8.  
  9. local function resizeVector2(vector2, virtualSize, absoltuteSize)
  10.     local ratio = vector2 / virtualSize
  11.     return ratio * absoltuteSize
  12. end
  13.  
  14.  
  15. local function updateInstanceParents(world, cameraContainer, canvasContainer)
  16.     for id, canvasRecord in world:queryChanged(Components.Canvas) do
  17.         if not world:contains(id) then
  18.             continue
  19.         end
  20.        
  21.         local frame = world:get(id, Components.Frame)
  22.         if not frame or not frame.Instance then
  23.             continue
  24.         end
  25.  
  26.         frame.Instance.Parent = nil
  27.     end
  28.    
  29.     for id, transform, frame in world:query(Components.Transform, Components.Frame) do
  30.         if not frame.Instance or frame.Instance.Parent then
  31.             continue
  32.         end
  33.        
  34.         frame.Instance.Parent = if world:get(id, Components.Canvas)
  35.             then canvasContainer
  36.             else cameraContainer
  37.     end
  38. end
  39.  
  40. local function updateFrameUsingTransform(frame, transform, cameraContainer)
  41.     local absolutePosition = resizeVector2(transform.Position, Constants.VirtualSize, cameraContainer.AbsoluteSize)
  42.     local absoluteSize = resizeVector2(frame.Size, Constants.VirtualSize, cameraContainer.AbsoluteSize) * transform.Scale
  43.    
  44.     frame.Instance.Size = UDim2.fromScale(absoluteSize.X / cameraContainer.AbsoluteSize.X, absoluteSize.Y / cameraContainer.AbsoluteSize.Y)
  45.     frame.Instance.Position = UDim2.fromScale(absolutePosition.X / cameraContainer.AbsoluteSize.X, absolutePosition.Y / cameraContainer.AbsoluteSize.Y)
  46.     frame.Instance.Rotation = transform.Rotation
  47.    
  48.    
  49.     frame.Instance.Visible = frame.Visible
  50.     frame.Instance.ZIndex = frame.ZIndex
  51.     frame.Instance.BackgroundColor3 = frame.BackgroundColor
  52.     frame.Instance.BackgroundTransparency = frame.BackgroundTransparency
  53. end
  54.  
  55. local function reconcileInstances(world, cameraContainer)
  56.     for id, frameRecord in world:queryChanged(Components.Frame) do
  57.         if not frameRecord.new or not frameRecord.new.Instance or not world:contains(id) then
  58.             continue
  59.         end
  60.        
  61.         local transform = world:get(id, Components.Transform)
  62.         if transform then
  63.             updateFrameUsingTransform(frameRecord.new, transform, cameraContainer)
  64.         end
  65.     end
  66.    
  67.     for id, transformRecord in world:queryChanged(Components.Transform) do
  68.         if not transformRecord.new or not world:contains(id) then
  69.             continue
  70.         end
  71.        
  72.         local frame = world:get(id, Components.Frame)
  73.         if frame and frame.Instance then
  74.             updateFrameUsingTransform(frame, transformRecord.new, cameraContainer)
  75.         end
  76.     end
  77. end
  78.  
  79. local function UpdateFrames(world, state, cameraContainer, canvasContainer)
  80.     local absoluteCameraPosition = resizeVector2(-state.Camera.Position, Constants.VirtualSize, cameraContainer.AbsoluteSize)
  81.     cameraContainer.Position = UDim2.fromOffset(absoluteCameraPosition.X, absoluteCameraPosition.Y)
  82.     cameraContainer.Size = UDim2.fromScale(state.Camera.Scale.X, state.Camera.Scale.Y)
  83.    
  84.     updateInstanceParents(world, cameraContainer, canvasContainer)
  85.     reconcileInstances(world, cameraContainer)
  86. end
  87.  
  88. return {
  89.     system = UpdateFrames,
  90.     after = {RemoveMissingFrames},
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement