diff --git a/demo/src/ReplicatedStorage/std/components.luau b/demo/src/ReplicatedStorage/std/components.luau index d44a986..5dccc1b 100644 --- a/demo/src/ReplicatedStorage/std/components.luau +++ b/demo/src/ReplicatedStorage/std/components.luau @@ -8,7 +8,7 @@ local components: { Model: Entity, Player: Entity, Target: Entity, - Transform: Entity, + Transform: Entity<{ old: CFrame, new: CFrame }>, Velocity: Entity, } = { Character = world:component(), diff --git a/demo/src/ServerScriptService/systems/mobsMove.luau b/demo/src/ServerScriptService/systems/mobsMove.luau index 45b44dd..8ea1127 100644 --- a/demo/src/ServerScriptService/systems/mobsMove.luau +++ b/demo/src/ServerScriptService/systems/mobsMove.luau @@ -23,7 +23,8 @@ local function mobsMove(dt: number) table.insert(targets, (character.PrimaryPart :: Part).Position) end - for mob, cf, v in world:query(Transform, Velocity):with(Mob):iter() do + for mob, transform, v in world:query(Transform, Velocity):with(Mob):iter() do + local cf = transform.new local p = cf.Position local target @@ -42,7 +43,7 @@ local function mobsMove(dt: number) end local moving = CFrame.new(p + (target - p).Unit * dt * v) - world:set(mob, Transform, moving) + transform.new = moving blink.UpdateTransform.FireAll(mob, moving) end end diff --git a/demo/src/ServerScriptService/systems/spawnMobs.luau b/demo/src/ServerScriptService/systems/spawnMobs.luau index 9bbbb90..cbb79a7 100644 --- a/demo/src/ServerScriptService/systems/spawnMobs.luau +++ b/demo/src/ServerScriptService/systems/spawnMobs.luau @@ -19,7 +19,7 @@ local function spawnMobs() local id = ref() :set(Velocity, v) - :set(Transform, cf) + :set(Transform, { new = cf }) :add(Mob) .id() diff --git a/demo/src/StarterPlayer/StarterPlayerScripts/systems/move.luau b/demo/src/StarterPlayer/StarterPlayerScripts/systems/move.luau index 84f9287..f520a3d 100644 --- a/demo/src/StarterPlayer/StarterPlayerScripts/systems/move.luau +++ b/demo/src/StarterPlayer/StarterPlayerScripts/systems/move.luau @@ -9,8 +9,12 @@ local Model = cts.Model local Transform = cts.Transform local function move(dt: number) - for _, cf, model in world:query(Transform, Model) do - model.PrimaryPart.CFrame = cf + for _, transform, model in world:query(Transform, Model):iter() do + local cf = transform.new + if cf ~= transform.old then + model.PrimaryPart.CFrame = cf + transform.old = cf + end end end diff --git a/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncMobs.luau b/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncMobs.luau index bf73e00..36d51df 100644 --- a/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncMobs.luau +++ b/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncMobs.luau @@ -17,7 +17,7 @@ local function syncMobs() model.Parent = workspace ref("server-"..id) - :set(cts.Transform, cf) + :set(cts.Transform, { new = cf, old = cf }) :set(cts.Velocity, vel) :set(cts.Model, model) :add(cts.Mob) diff --git a/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncTransforms.luau b/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncTransforms.luau index 01ba86e..6d68280 100644 --- a/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncTransforms.luau +++ b/demo/src/StarterPlayer/StarterPlayerScripts/systems/syncTransforms.luau @@ -8,8 +8,12 @@ local cts = std.components local function syncTransforms() for _, id, cf in blink.UpdateTransform.Iter() do - ref("server-"..id) - :set(cts.Transform, cf) + local e = ref("server-"..id) + local transform = e:get(cts.Transform) + if not transform then + continue + end + transform.new = cf end end