diff --git a/.luaurc b/.luaurc index 2747dd7..73598d2 100644 --- a/.luaurc +++ b/.luaurc @@ -2,7 +2,7 @@ "aliases": { "jecs": "src", "testkit": "testkit", - "mirror": "mirror", + "mirror": "mirror" }, "languageMode": "strict" -} +} \ No newline at end of file diff --git a/README.md b/README.md index 0d86c4c..166a5db 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,68 @@ -An unofficial pesde package for [jecs](https://github.com/ukendio/jecs). +An automatically synced minimal copy of the [jecs](https://github.com/Ukendio/jecs) repo published to pesde. - -
- - -
- -[![License: Apache 2.0](https://img.shields.io/badge/License-Apache-blue.svg?style=for-the-badge)](LICENSE-APACHE) -[![Wally](https://img.shields.io/github/v/tag/ukendio/jecs?&style=for-the-badge)](https://wally.run/package/ukendio/jecs) - -jecs is Just a stupidly fast Entity Component System - -- Entity Relationships as first class citizens -- Iterate 800,000 entities at 60 frames per second -- Type-safe [Luau](https://luau-lang.org/) API -- Zero-dependency package -- Optimized for column-major operations -- Cache friendly archetype/SoA storage -- Unit tested for stability - -### Example - -```lua -local world = jecs.World.new() -local pair = jecs.pair - -local ChildOf = world:component() -local Name = world:component() - -local function parent(entity) - return world:target(entity, ChildOf) -end -local function getName(entity) - return world:get(entity, Name) -end - -local alice = world:entity() -world:set(alice, Name, "alice") - -local bob = world:entity() -world:add(bob, pair(ChildOf, alice)) -world:set(bob, Name, "bob") - -local sara = world:entity() -world:add(sara, pair(ChildOf, alice)) -world:set(sara, Name, "sara") - -print(getName(parent(sara))) - -for e in world:query(pair(ChildOf, alice)) do - print(getName(e), "is the child of alice") -end - --- Output --- "alice" --- bob is the child of alice --- sara is the child of alice -``` - -21,000 entities 125 archetypes 4 random components queried. -![Queries](image-3.png) -Can be found under /benches/visual/query.luau - -Inserting 8 components to an entity and updating them over 50 times. -![Insertions](image-4.png) -Can be found under /benches/visual/insertions.luau + ++ +
+ +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge)](LICENSE) [![Wally](https://img.shields.io/github/v/tag/ukendio/jecs?&style=for-the-badge)](https://wally.run/package/ukendio/jecs) + +Just a stupidly fast Entity Component System + +* [Entity Relationships](https://ajmmertens.medium.com/building-games-in-ecs-with-entity-relationships-657275ba2c6c) as first class citizens +* Iterate 800,000 entities at 60 frames per second +* Type-safe [Luau](https://luau-lang.org/) API +* Zero-dependency package +* Optimized for column-major operations +* Cache friendly [archetype/SoA](https://ajmmertens.medium.com/building-an-ecs-2-archetypes-and-vectorization-fe21690805f9) storage +* Rigorously [unit tested](https://github.com/Ukendio/jecs/actions/workflows/ci.yaml) for stability + +### Example + +```lua +local world = jecs.World.new() +local pair = jecs.pair + +-- These components and functions are actually already builtin +-- but have been illustrated for demonstration purposes +local ChildOf = world:component() +local Name = world:component() + +local function parent(entity) + return world:target(entity, ChildOf) +end +local function getName(entity) + return world:get(entity, Name) +end + +local alice = world:entity() +world:set(alice, Name, "alice") + +local bob = world:entity() +world:add(bob, pair(ChildOf, alice)) +world:set(bob, Name, "bob") + +local sara = world:entity() +world:add(sara, pair(ChildOf, alice)) +world:set(sara, Name, "sara") + +print(getName(parent(sara))) + +for e in world:query(pair(ChildOf, alice)) do + print(getName(e), "is the child of alice") +end + +-- Output +-- "alice" +-- bob is the child of alice +-- sara is the child of alice +``` + +21,000 entities 125 archetypes 4 random components queried. +![Queries](image-3.png) +Can be found under /benches/visual/query.luau + +Inserting 8 components to an entity and updating them over 50 times. +![Insertions](image-4.png) +Can be found under /benches/visual/insertions.luau diff --git a/init.luau b/init.luau index 4223eed..2b96b0a 100644 --- a/init.luau +++ b/init.luau @@ -26,7 +26,7 @@ type GraphEdges = Map(first: P, second: O) -> Pair
, -- Inwards facing API for testing ECS_ID = ECS_ENTITY_T_LO, @@ -1886,4 +1866,26 @@ return { pair_first = ecs_pair_first, pair_second = ecs_pair_second, entity_index_get_alive = entity_index_get_alive, + + archetype_append_to_records = archetype_append_to_records, + id_record_ensure = id_record_ensure, + archetype_create = archetype_create, + archetype_ensure = archetype_ensure, + find_insert = find_insert, + find_archetype_with = find_archetype_with, + find_archetype_without = find_archetype_without, + archetype_init_edge = archetype_init_edge, + archetype_ensure_edge = archetype_ensure_edge, + init_edge_for_add = init_edge_for_add, + init_edge_for_remove = init_edge_for_remove, + create_edge_for_add = create_edge_for_add, + create_edge_for_remove = create_edge_for_remove, + archetype_traverse_add = archetype_traverse_add, + archetype_traverse_remove = archetype_traverse_remove, + + entity_index_try_get = entity_index_try_get, + entity_index_try_get_any = entity_index_try_get_any, + entity_index_is_alive = entity_index_is_alive, + entity_index_remove = entity_index_remove, + entity_index_new_id = entity_index_new_id, } diff --git a/pesde.toml b/pesde.toml index bd6fdee..0fd4bfd 100644 --- a/pesde.toml +++ b/pesde.toml @@ -10,7 +10,7 @@ includes = [ license = "MIT" name = "mark_marks/jecs_pesde" repository = "https://git.devmarked.win/marked/jecs-pesde" -version = "0.3.2" +version = "0.4.0-rc.0" [indices] default = "https://github.com/daimond113/pesde-index"