Compare commits

..

3 commits

Author SHA1 Message Date
Ukendio
4435d718a7 Change TS types for Archetype
Some checks failed
analysis / Run Luau Analyze (push) Has been cancelled
deploy-docs / build (push) Has been cancelled
publish-npm / publish (push) Has been cancelled
unit-testing / Run Luau Tests (push) Has been cancelled
deploy-docs / Deploy (push) Has been cancelled
2025-03-02 01:24:53 +01:00
Ukendio
62af051e7a Bump 2025-03-01 20:16:26 +01:00
Ukendio
a5dad9aa4d Fix entity deletion swap logic 2025-03-01 20:15:52 +01:00
6 changed files with 32 additions and 4023 deletions

30
jecs.d.ts vendored
View file

@ -31,31 +31,27 @@ export type Id<TData = unknown> = Entity<TData> | Pair<TData, unknown> | Pair<un
export type InferComponent<E> = E extends Entity<infer D> export type InferComponent<E> = E extends Entity<infer D>
? D ? D
: E extends Pair<infer P, infer O> : E extends Pair<infer P, infer O>
? P extends undefined ? P extends undefined
? O ? O
: P : P
: never; : never;
type FlattenTuple<T extends unknown[]> = T extends [infer U] ? U : LuaTuple<T>; type FlattenTuple<T extends unknown[]> = T extends [infer U] ? U : LuaTuple<T>;
type Nullable<T extends unknown[]> = { [K in keyof T]: T[K] | undefined }; type Nullable<T extends unknown[]> = { [K in keyof T]: T[K] | undefined };
type InferComponents<A extends Id[]> = { [K in keyof A]: InferComponent<A[K]> }; type InferComponents<A extends Id[]> = { [K in keyof A]: InferComponent<A[K]> };
type ArchetypeId = number type ArchetypeId = number;
type Column = unknown[]; type Column = unknown[];
type ArchetypeRecord = {
count: number;
column: number;
}
export type Archetype = { export type Archetype = {
id: number; id: number;
types: number[]; types: number[];
type: string; type: string;
entities: number[]; entities: number[];
columns: Column[]; columns: Column[];
records: ArchetypeRecord[]; records: number[];
} counts: number[];
};
type Iter<T extends unknown[]> = IterableFunction<LuaTuple<[Entity, ...T]>>; type Iter<T extends unknown[]> = IterableFunction<LuaTuple<[Entity, ...T]>>;

View file

@ -950,6 +950,7 @@ local function archetype_delete(world: World, archetype: Archetype, row: number,
record_to_move.row = row record_to_move.row = row
end end
delete = entities[row]
entities[row] = move entities[row] = move
end end

4004
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "@rbxts/jecs", "name": "@rbxts/jecs",
"version": "0.5.4", "version": "0.5.5",
"description": "Stupidly fast Entity Component System", "description": "Stupidly fast Entity Component System",
"main": "jecs.luau", "main": "jecs.luau",
"repository": { "repository": {

View file

@ -1045,6 +1045,22 @@ TEST("world:component()", function()
end) end)
TEST("world:delete", function() TEST("world:delete", function()
do CASE "invoke OnRemove hooks"
local world = world_new()
local e1 = world:entity()
local e2 = world:entity()
local Stable = world:component()
world:set(Stable, jecs.OnRemove, function(e)
CHECK(e == e1)
end)
world:set(e1, Stable, true)
world:set(e2, Stable, true)
world:delete(e1)
end
do CASE "delete recycled entity id used as component" do CASE "delete recycled entity id used as component"
local world = world_new() local world = world_new()
local id = world:entity() local id = world:entity()

View file

@ -1,6 +1,6 @@
[package] [package]
name = "ukendio/jecs" name = "ukendio/jecs"
version = "0.5.4" version = "0.5.5"
registry = "https://github.com/UpliftGames/wally-index" registry = "https://github.com/UpliftGames/wally-index"
realm = "shared" realm = "shared"
license = "MIT" license = "MIT"