From f302fad3b6f67f0b13ed295096e4c296723d5878 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sun, 18 Aug 2024 16:46:52 +0200 Subject: [PATCH] Fix types in export --- demo/src/ReplicatedStorage/std/components.luau | 15 ++++++++++++--- demo/src/ReplicatedStorage/std/init.luau | 6 +++--- demo/src/ReplicatedStorage/std/world.luau | 3 +-- .../ServerScriptService/systems/mobsMove.luau | 15 ++++++++------- .../ServerScriptService/systems/players.luau | 6 ++++-- aftman.toml => rokit.toml | 1 - src/init.luau | 18 +++++++++++------- 7 files changed, 39 insertions(+), 25 deletions(-) rename aftman.toml => rokit.toml (74%) diff --git a/demo/src/ReplicatedStorage/std/components.luau b/demo/src/ReplicatedStorage/std/components.luau index 70b7425..d44a986 100644 --- a/demo/src/ReplicatedStorage/std/components.luau +++ b/demo/src/ReplicatedStorage/std/components.luau @@ -1,13 +1,22 @@ local jecs = require(game:GetService("ReplicatedStorage").ecs) local world = require(script.Parent.world) -local components = { +type Entity = jecs.Entity +local components: { + Character: Entity, + Mob: Entity, + Model: Entity, + Player: Entity, + Target: Entity, + Transform: Entity, + Velocity: Entity, +} = { Character = world:component(), Mob = world:component(), - Model = world:component() :: jecs.Entity, + Model = world:component(), Player = world:component(), Target = world:component(), - Transform = world:component() :: jecs.Entity, + Transform = world:component(), Velocity = world:component(), } diff --git a/demo/src/ReplicatedStorage/std/init.luau b/demo/src/ReplicatedStorage/std/init.luau index 6014b4e..0538efa 100644 --- a/demo/src/ReplicatedStorage/std/init.luau +++ b/demo/src/ReplicatedStorage/std/init.luau @@ -1,6 +1,6 @@ local jecs = require(game:GetService("ReplicatedStorage").ecs) -local world = require(script.world) - +local world = require(script.world) :: jecs.World +export type World = jecs.World local std = { ChangeTracker = require(script.changetracker), Scheduler = require(script.scheduler), @@ -11,7 +11,7 @@ local std = { handle = require(script.handle), interval = require(script.interval), ref = require(script.ref), - world = world, + world = world :: World, pair = jecs.pair, __ = jecs.w, } diff --git a/demo/src/ReplicatedStorage/std/world.luau b/demo/src/ReplicatedStorage/std/world.luau index 67a1a56..553370b 100644 --- a/demo/src/ReplicatedStorage/std/world.luau +++ b/demo/src/ReplicatedStorage/std/world.luau @@ -1,5 +1,4 @@ local jecs = require(game:GetService("ReplicatedStorage").ecs) -export type World = jecs.t_world -- I like the idea of only having the world be a singleton. -return jecs.World.new() +return jecs.World.new() :: jecs.World diff --git a/demo/src/ServerScriptService/systems/mobsMove.luau b/demo/src/ServerScriptService/systems/mobsMove.luau index 6cf10f0..89c1935 100644 --- a/demo/src/ServerScriptService/systems/mobsMove.luau +++ b/demo/src/ServerScriptService/systems/mobsMove.luau @@ -1,12 +1,11 @@ +--!strict local ReplicatedStorage = game:GetService("ReplicatedStorage") local blink = require(game:GetService("ServerScriptService").net) local jecs = require(ReplicatedStorage.ecs) -local pair = jecs.pair local __ = jecs.Wildcard local std = require(ReplicatedStorage.std) -local world = std.world - +local world: std.World = std.world local cts = std.components local Mob = cts.Mob @@ -14,7 +13,6 @@ local Transform = cts.Transform local Velocity = cts.Velocity 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) @@ -23,15 +21,18 @@ local function mobsMove(dt: number) local p = cf.Position local target - for playerId, character in players do - local pos = character.PrimaryPart.Position + + for playerId, character in players:iter() do + local pos = (character.PrimaryPart::Part).Position if true then target = pos break end if not target then target = pos - elseif (p - pos).Magnitude < (p - target) then + elseif (p - pos).Magnitude + < (p - target).Magnitude + then target = pos end end diff --git a/demo/src/ServerScriptService/systems/players.luau b/demo/src/ServerScriptService/systems/players.luau index 8a68573..beacce9 100644 --- a/demo/src/ServerScriptService/systems/players.luau +++ b/demo/src/ServerScriptService/systems/players.luau @@ -11,14 +11,16 @@ local Character = cts.Character local playersAdded = collect(Players.PlayerAdded) local playersRemoved = collect(Players.PlayerRemoving) +local world: std.World = std.world local conn = {} local function players() for _, player in playersAdded do - std.world:set( + world:set( std.world:entity(), - std.world:entity()) + cts.Transform + ) local e = ref(player.UserId):set(Player, player) local characterAdd = player.CharacterAdded diff --git a/aftman.toml b/rokit.toml similarity index 74% rename from aftman.toml rename to rokit.toml index 6810bcc..ea906bf 100644 --- a/aftman.toml +++ b/rokit.toml @@ -3,5 +3,4 @@ wally = "upliftgames/wally@0.3.2" 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/src/init.luau b/src/init.luau index 51d7fe2..c6fa663 100644 --- a/src/init.luau +++ b/src/init.luau @@ -1442,9 +1442,9 @@ end export type Pair = number -type Item = () -> (number, ...any) +type Item = (self: Query) -> (Entity, T...) -export type Entity = number & {__DO_NOT_USE_OR_YOU_WILL_BE_FIRED: T } +export type Entity = number & {__T: T } type Iter = (query: Query) -> () -> (Entity, T...) @@ -1452,14 +1452,14 @@ type Query = typeof(setmetatable({}, { __iter = (nil :: any) :: Iter })) & { iter: Iter, - next: Item, - with: (Query) -> Query, - without: (Query, ...i53) -> Query, - replace: (Query, (T...) -> (U...)) -> (), + next: Item, + with: (self: Query, ...i53) -> Query, + without: (self: Query, ...i53) -> Query, + replace: (self: Query, (T...) -> (U...)) -> (), archetypes: () -> { Archetype }, } -type World = { +export type World = { archetypeIndex: { [string]: Archetype }, archetypes: Archetypes, componentIndex: ComponentIndex, @@ -1496,6 +1496,10 @@ type World = { & ((self: World, id: Entity, Entity, Entity, Entity) -> (A, B, C)) & (self: World, id: Entity, Entity, Entity, Entity, Entity) -> (A, B, C, D), + has: (self: World, ...Entity) -> boolean, + + parent: (self: World, entity: Entity) -> Entity, + --- Searches the world for entities that match a given query query: ((self: World, Entity) -> Query) & ((self: World, Entity, Entity) -> Query)