mirror of
https://github.com/Ukendio/jecs.git
synced 2025-08-04 03:09:18 +00:00
Initial commit with union
This commit is contained in:
parent
dab260f733
commit
46d363ad5f
3 changed files with 24 additions and 13 deletions
12
jecs.luau
12
jecs.luau
|
@ -2525,8 +2525,8 @@ end
|
|||
|
||||
World.new = world_new
|
||||
|
||||
export type Entity<T = any> = { __T: T }
|
||||
export type Id<T = any> = { __T: T }
|
||||
export type Entity<T = any> = number | { __T: T }
|
||||
export type Id<T = any> = number | { __T: T }
|
||||
export type Pair<P, O> = Id<P>
|
||||
type ecs_id_t<T=unknown> = Id<T> | Pair<T, "Tag"> | Pair<"Tag", T>
|
||||
export type Item<T...> = (self: Query<T...>) -> (Entity, T...)
|
||||
|
@ -2601,10 +2601,10 @@ export type World = {
|
|||
& (<T, a, b, c, d>(World, Entity<T>, Id<a>, Id<b>, Id<c>, Id<d>) -> (a?, b?, c?, d?)),
|
||||
|
||||
--- Returns whether the entity has the ID.
|
||||
has: (<T>(World, Entity<T>, Id) -> boolean)
|
||||
& (<T>(World, Entity<T>, Id, Id) -> boolean)
|
||||
& (<T>(World, Entity<T>, Id, Id, Id) -> boolean)
|
||||
& <T>(World, Entity<T>, Id, Id, Id, Id) -> boolean,
|
||||
has: (<T, a>(World, Entity<T>, Id<a>) -> boolean)
|
||||
& (<T, a, b >(World, Entity<T>, Id<a>, Id<a>) -> boolean)
|
||||
& (<T, a, b, c>(World, Entity<T>, Id<a>, Id<b>, Id<c>) -> boolean)
|
||||
& <T, a, b, c, d>(World, Entity<T>, Id<a>, Id<b>, Id<c>, Id<d>) -> boolean,
|
||||
|
||||
--- Get parent (target of ChildOf relationship) for entity. If there is no ChildOf relationship pair, it will return nil.
|
||||
parent: <T>(self: World, entity: Entity<T>) -> Entity,
|
||||
|
|
|
@ -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<number>
|
||||
type Q<T...> = () -> (jecs.Entity, T...)
|
||||
local query:
|
||||
(<A>(jecs.World, jecs.Id<A>) -> Q<A>)
|
||||
& (<A, B>(jecs.World, jecs.Id<A>, jecs.Id<B>) -> Q<A, B>)
|
||||
& (<A, B, C>(jecs.World, jecs.Id<A>, jecs.Id<B>, jecs.Id<C>) -> Q<A, B, C>)
|
||||
= 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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue