diff --git a/aftman.toml b/aftman.toml index 56cddbd..6810bcc 100644 --- a/aftman.toml +++ b/aftman.toml @@ -4,3 +4,4 @@ rojo = "rojo-rbx/rojo@7.4.1" stylua = "johnnymorganz/stylua@0.19.1" selene = "kampfkarren/selene@0.26.1" wally-patch-package = "Barocena/wally-patch-package@1.2.1" +Blink = "1Axen/Blink@0.14.1" diff --git a/demo.project.json b/demo.project.json index e02ae7c..80e9432 100644 --- a/demo.project.json +++ b/demo.project.json @@ -7,11 +7,17 @@ "$path": "demo/src/ReplicatedStorage", "ecs": { "$path": "src" + }, + "net": { + "$path": "demo/net/client.luau" } }, "ServerScriptService": { "$className": "ServerScriptService", - "$path": "demo/src/ServerScriptService" + "$path": "demo/src/ServerScriptService", + "net": { + "$path": "demo/net/server.luau" + } }, "Workspace": { "$properties": { @@ -57,6 +63,11 @@ "$properties": { "RespectFilteringEnabled": true } + }, + "StarterPlayer": { + "StarterPlayerScripts": { + "$path": "demo/src/StarterPlayer/StarterPlayerScripts" + } } } } diff --git a/demo/src/ReplicatedStorage/std/handle.luau b/demo/src/ReplicatedStorage/std/handle.luau index ec108d8..785ae3a 100644 --- a/demo/src/ReplicatedStorage/std/handle.luau +++ b/demo/src/ReplicatedStorage/std/handle.luau @@ -5,7 +5,8 @@ type Handle = { has: (self: Handle, id: jecs.Entity) -> boolean, get: (self: Handle, id: jecs.Entity) -> T?, add: (self: Handle, id: jecs.Entity) -> Handle, - set: (self: Handle, id: jecs.Entity, value: T) -> Handle + set: (self: Handle, id: jecs.Entity, value: T) -> Handle, + id: (self: Handle?) -> jecs.Entity } local handle: (e: jecs.Entity) -> Handle diff --git a/demo/src/ReplicatedStorage/std/world.luau b/demo/src/ReplicatedStorage/std/world.luau index d7b6da6..84b90b3 100644 --- a/demo/src/ReplicatedStorage/std/world.luau +++ b/demo/src/ReplicatedStorage/std/world.luau @@ -1,4 +1,5 @@ local jecs = require(game:GetService("ReplicatedStorage").ecs) export type World = jecs.WorldShim +-- I like the idea of only having the world be a singleton. return jecs.World.new() diff --git a/demo/src/ServerScriptService/systems/mobsMove.luau b/demo/src/ServerScriptService/systems/mobsMove.luau index ffc178a..f47139a 100644 --- a/demo/src/ServerScriptService/systems/mobsMove.luau +++ b/demo/src/ServerScriptService/systems/mobsMove.luau @@ -1,5 +1,5 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage") - +local blink = require(game:GetService("ServerScriptService").net) local jecs = require(ReplicatedStorage.ecs) local pair = jecs.pair local __ = jecs.Wildcard @@ -10,19 +10,16 @@ local world = std.world local cts = std.components local Mob = cts.Mob -local Model = cts.Model local Transform = cts.Transform local Velocity = cts.Velocity -local Target = cts.Target local Player = cts.Player local Character = cts.Character +print("client Model", cts.Model) local function mobsMove(dt: number) local players = world:query(Character):with(Player) - for mob, cf, v in world:query(Transform, Velocity) - :with(Mob, Model) - do + for mob, cf, v in world:query(Transform, Velocity):with(Mob) do local p = cf.Position local target @@ -45,6 +42,7 @@ local function mobsMove(dt: number) local moving = CFrame.new(p + (target - p).Unit * dt * v) world:set(mob, Transform, moving) + blink.UpdateTransform.FireAll(mob, moving) end end diff --git a/demo/src/ServerScriptService/systems/move.luau b/demo/src/ServerScriptService/systems/move.luau deleted file mode 100644 index a3270b9..0000000 --- a/demo/src/ServerScriptService/systems/move.luau +++ /dev/null @@ -1,17 +0,0 @@ -local ReplicatedStorage = game:GetService("ReplicatedStorage") - -local std = require(ReplicatedStorage.std) -local world = std.world - -local cts = std.components - -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 - end -end - -return move diff --git a/demo/src/ServerScriptService/systems/spawnMobs.luau b/demo/src/ServerScriptService/systems/spawnMobs.luau index 73e201e..748a03d 100644 --- a/demo/src/ServerScriptService/systems/spawnMobs.luau +++ b/demo/src/ServerScriptService/systems/spawnMobs.luau @@ -1,36 +1,29 @@ local std = require(game:GetService("ReplicatedStorage").std) +local blink = require(game:GetService("ServerScriptService").net) local ref = std.ref local interval = std.interval local cts = std.components local Mob = cts.Mob -local Model = cts.Model local Transform = cts.Transform local Velocity = cts.Velocity local throttle = interval(5) -local function spawnMobs(world: std.World) +local function spawnMobs() if throttle() then local p = Vector3.new(0, 5, 0) local cf = CFrame.new(p) local v = 5 - local part = Instance.new("Part") - part.Anchored = true - part.CanCollide = false - part.BrickColor = BrickColor.Blue() - part.Size = Vector3.one * 5 - local model = Instance.new("Model") - part.Parent = model - model.PrimaryPart = part - model.Parent = workspace - ref() + local id = ref() :set(Velocity, v) :set(Transform, cf) - :set(Model, model) :add(Mob) + .id() + + blink.SpawnMob.FireAll(id, cf, v) end end