Advertisement
AlewAlow

frames

Sep 14th, 2023
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.98 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. local function updateFrameUsingTransform(frame, transform, cameraContainer)
  15.     local absolutePosition = resizeVector2(transform.Position, Constants.VirtualSize, cameraContainer.AbsoluteSize)
  16.     local absoluteSize = resizeVector2(frame.Size, Constants.VirtualSize, cameraContainer.AbsoluteSize) * transform.Scale
  17.    
  18.     frame.Instance.Size = UDim2.fromScale(absoluteSize.X / cameraContainer.AbsoluteSize.X, absoluteSize.Y / cameraContainer.AbsoluteSize.Y)
  19.     frame.Instance.Position = UDim2.fromScale(absolutePosition.X / cameraContainer.AbsoluteSize.X, absolutePosition.Y / cameraContainer.AbsoluteSize.Y)
  20.     frame.Instance.Rotation = transform.Rotation
  21.    
  22.     frame.Instance.Visible = frame.Visible
  23.     frame.Instance.ZIndex = frame.ZIndex
  24.     frame.Instance.BackgroundColor3 = frame.BackgroundColor
  25.     frame.Instance.BackgroundTransparency = frame.BackgroundTransparency
  26. end
  27.  
  28. local function UpdateFrames(world, state)
  29.     local absoluteCameraPosition = resizeVector2(-state.Camera.Position, Constants.VirtualSize, state.CameraContainer.AbsoluteSize)
  30.     state.CameraContainer.Position = UDim2.fromOffset(absoluteCameraPosition.X, absoluteCameraPosition.Y)
  31.     state.CameraContainer.Size = UDim2.fromScale(state.Camera.Scale.X, state.Camera.Scale.Y)
  32.    
  33.     for id, canvasRecord in world:queryChanged(Components.Canvas) do
  34.         if not world:contains(id) then
  35.             continue
  36.         end
  37.  
  38.         local frame = world:get(id, Components.Frame)
  39.         if not frame or not frame.Instance then
  40.             continue
  41.         end
  42.  
  43.         frame.Instance.Parent = nil
  44.     end
  45.  
  46.     for id, transform, frame in world:query(Components.Transform, Components.Frame) do
  47.         if not frame.Instance or frame.Instance.Parent then
  48.             continue
  49.         end
  50.  
  51.         frame.Instance.Parent = if world:get(id, Components.Canvas)
  52.             then state.CanvasContainer
  53.             else state.CameraContainer
  54.     end
  55.    
  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, state.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, state.CameraContainer)
  75.         end
  76.     end
  77. end
  78.  
  79. return {
  80.     system = UpdateFrames,
  81.     after = {RemoveMissingFrames},
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement