Advertisement
AlewAlow

sprites

Sep 14th, 2023
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.10 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 function updateInstanceUsingFrame(frame, sprite)
  8.     local tileSizeScale = sprite.TileSize / frame.Size
  9.     local tileSize = UDim2.fromScale(tileSizeScale.X, tileSizeScale.Y)
  10.    
  11.     frame.Instance.ScaleType = sprite.ScaleType
  12.     frame.Instance.SliceCenter = sprite.SliceCenter
  13.     frame.Instance.TileSize = tileSize
  14.    
  15.     frame.Instance.Image = sprite.Image
  16.     frame.Instance.ImageColor3 = sprite.ImageColor
  17.     frame.Instance.ImageRectOffset = sprite.ImageRectOffset
  18.     frame.Instance.ImageRectSize = sprite.ImageRectSize
  19.     frame.Instance.ImageTransparency = sprite.ImageTransparency
  20. end
  21.  
  22. local function UpdateSprites(world, state) 
  23.     for id, frame in world:query(Components.Frame, Components.Sprite) do
  24.         if frame.Instance then
  25.             continue
  26.         end
  27.  
  28.         local instance = Instance.new("ImageLabel")
  29.         instance.ResampleMode = Enum.ResamplerMode.Pixelated
  30.         instance.AnchorPoint = Vector2.one / 2
  31.         instance.BackgroundTransparency = 1
  32.  
  33.         world:insert(id, frame:patch({
  34.             Instance = instance,
  35.         }))
  36.     end
  37.    
  38.     for id, frameRecord in world:queryChanged(Components.Frame) do
  39.         if not frameRecord.new or not frameRecord.new.Instance then
  40.             continue
  41.         end
  42.  
  43.         local sprite = world:get(id, Components.Sprite)
  44.         if sprite then
  45.             updateInstanceUsingFrame(frameRecord.new, sprite)
  46.         end
  47.     end
  48.  
  49.     for id, spriteRecord in world:queryChanged(Components.Sprite) do
  50.         if not spriteRecord.new then
  51.             continue
  52.         end
  53.  
  54.         local frame = world:get(id, Components.Frame)
  55.         if frame and frame.Instance then
  56.             updateInstanceUsingFrame(frame, spriteRecord.new)
  57.         end
  58.     end
  59.    
  60.     for id, frame, sprite in world:query(Components.Frame, Components.Sprite) do
  61.         if not frame.Instance then
  62.             continue
  63.         end
  64.        
  65.         local ratio = sprite.SliceScale / Constants.VirtualSize.Magnitude
  66.         frame.Instance.SliceScale = ratio * state.CameraContainer.AbsoluteSize.Magnitude
  67.     end
  68. end
  69.  
  70. return UpdateSprites
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement