Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local Matter = require(ReplicatedStorage.Shared.Libs.Matter)
- local Components = require(ReplicatedStorage.Shared.Components)
- local Constants = require(ReplicatedStorage.Shared.Constants)
- local RemoveMissingFrames = require(script.Parent.RemoveMissingFrames)
- local function resizeVector2(vector2, virtualSize, absoltuteSize)
- local ratio = vector2 / virtualSize
- return ratio * absoltuteSize
- end
- local function updateFrameUsingTransform(frame, transform, cameraContainer)
- local absolutePosition = resizeVector2(transform.Position, Constants.VirtualSize, cameraContainer.AbsoluteSize)
- local absoluteSize = resizeVector2(frame.Size, Constants.VirtualSize, cameraContainer.AbsoluteSize) * transform.Scale
- frame.Instance.Size = UDim2.fromScale(absoluteSize.X / cameraContainer.AbsoluteSize.X, absoluteSize.Y / cameraContainer.AbsoluteSize.Y)
- frame.Instance.Position = UDim2.fromScale(absolutePosition.X / cameraContainer.AbsoluteSize.X, absolutePosition.Y / cameraContainer.AbsoluteSize.Y)
- frame.Instance.Rotation = transform.Rotation
- frame.Instance.Visible = frame.Visible
- frame.Instance.ZIndex = frame.ZIndex
- frame.Instance.BackgroundColor3 = frame.BackgroundColor
- frame.Instance.BackgroundTransparency = frame.BackgroundTransparency
- end
- local function UpdateFrames(world, state)
- local absoluteCameraPosition = resizeVector2(-state.Camera.Position, Constants.VirtualSize, state.CameraContainer.AbsoluteSize)
- state.CameraContainer.Position = UDim2.fromOffset(absoluteCameraPosition.X, absoluteCameraPosition.Y)
- state.CameraContainer.Size = UDim2.fromScale(state.Camera.Scale.X, state.Camera.Scale.Y)
- for id, canvasRecord in world:queryChanged(Components.Canvas) do
- if not world:contains(id) then
- continue
- end
- local frame = world:get(id, Components.Frame)
- if not frame or not frame.Instance then
- continue
- end
- frame.Instance.Parent = nil
- end
- for id, transform, frame in world:query(Components.Transform, Components.Frame) do
- if not frame.Instance or frame.Instance.Parent then
- continue
- end
- frame.Instance.Parent = if world:get(id, Components.Canvas)
- then state.CanvasContainer
- else state.CameraContainer
- end
- for id, frameRecord in world:queryChanged(Components.Frame) do
- if not frameRecord.new or not frameRecord.new.Instance or not world:contains(id) then
- continue
- end
- local transform = world:get(id, Components.Transform)
- if transform then
- updateFrameUsingTransform(frameRecord.new, transform, state.CameraContainer)
- end
- end
- for id, transformRecord in world:queryChanged(Components.Transform) do
- if not transformRecord.new or not world:contains(id) then
- continue
- end
- local frame = world:get(id, Components.Frame)
- if frame and frame.Instance then
- updateFrameUsingTransform(frame, transformRecord.new, state.CameraContainer)
- end
- end
- end
- return {
- system = UpdateFrames,
- after = {RemoveMissingFrames},
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement