diff --git a/jecs.luau b/jecs.luau index e5faf96..dc60a9a 100644 --- a/jecs.luau +++ b/jecs.luau @@ -2525,8 +2525,8 @@ end World.new = world_new -export type Entity = { __T: T } -export type Id = { __T: T } +export type Entity = number | { __T: T } +export type Id = number | { __T: T } export type Pair = Id

type ecs_id_t = Id | Pair | Pair<"Tag", T> export type Item = (self: Query) -> (Entity, T...) @@ -2601,10 +2601,10 @@ export type World = { & ((World, Entity, Id, Id, Id, Id) -> (a?, b?, c?, d?)), --- Returns whether the entity has the ID. - has: ((World, Entity, Id) -> boolean) - & ((World, Entity, Id, Id) -> boolean) - & ((World, Entity, Id, Id, Id) -> boolean) - & (World, Entity, Id, Id, Id, Id) -> boolean, + has: ((World, Entity, Id) -> boolean) + & ((World, Entity, Id, Id) -> boolean) + & ((World, Entity, Id, Id, Id) -> boolean) + & (World, Entity, Id, Id, Id, Id) -> boolean, --- Get parent (target of ChildOf relationship) for entity. If there is no ChildOf relationship pair, it will return nil. parent: (self: World, entity: Entity) -> Entity, diff --git a/test/addons/observers.luau b/test/addons/observers.luau index 0a363cc..182a3ea 100644 --- a/test/addons/observers.luau +++ b/test/addons/observers.luau @@ -7,6 +7,17 @@ local observers_add = require("@addons/observers") TEST("addons/observers", function() local world = observers_add(jecs.world()) + local Test = world:component() :: jecs.Id + type Q = () -> (jecs.Entity, T...) + local query: + ((jecs.World, jecs.Id) -> Q) + & ((jecs.World, jecs.Id, jecs.Id) -> Q) + & ((jecs.World, jecs.Id, jecs.Id, jecs.Id) -> Q) + = 1 :: never + for e, a in query(world, Test) do + + end + do CASE "Should work even if set after the component has been used" local A = world:component() diff --git a/test/tests.luau b/test/tests.luau index 9ce5023..d5e578f 100644 --- a/test/tests.luau +++ b/test/tests.luau @@ -661,7 +661,7 @@ TEST("world:range()", function() do CASE "under range start" local world = jecs.world() world:range(400, 1000) - local id = world:entity() + local id = world:entity() :: number local e = world:entity(id + 5) CHECK(e == id + 5) CHECK(world:contains(e)) @@ -669,7 +669,7 @@ TEST("world:range()", function() CHECK(world:contains(e2)) world:delete(e2) CHECK(not world:contains(e2)) - local e2v1 = world:entity(399) + local e2v1 = world:entity(399) :: number CHECK(world:contains(e2v1)) CHECK(ECS_ID(e2v1) == 399) CHECK(ECS_GENERATION(e2v1) == 0) @@ -682,13 +682,13 @@ TEST("world:range()", function() CHECK(world:contains(e2)) world:delete(e2) CHECK(not world:contains(e2)) - local e2v1 = world:entity(405) + local e2v1 = world:entity(405) :: number CHECK(world:contains(e2v1)) CHECK(ECS_ID(e2v1) == 405) CHECK(ECS_GENERATION(e2v1) == 0) world:delete(e2v1) - local e2v2 = world:entity(e2v1) + local e2v2 = world:entity(e2v1) :: number CHECK(ECS_ID(e2v2) == 405) CHECK(ECS_GENERATION(e2v2) == 0) end @@ -697,7 +697,7 @@ end) TEST("world:entity()", function() do CASE "desired id" local world = jecs.world() - local id = world:entity() + local id = world:entity() :: number local e = world:entity(id + 5) CHECK(e == id + 5) CHECK(world:contains(e)) @@ -767,11 +767,11 @@ TEST("world:entity()", function() local e = world:entity() world:delete(e) end - local e = world:entity() :: any + local e = world:entity() :: number CHECK(ECS_ID(e) == pin) CHECK(ECS_GENERATION(e) == 2^16-1) world:delete(e) - e = world:entity() + e = world:entity() :: number CHECK(ECS_ID(e) == pin) CHECK(ECS_GENERATION(e) == 0) end