From 3fcad855930a7315422ab3c604106093fe53b8fc Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sun, 6 Oct 2024 05:42:18 +0200 Subject: [PATCH] Change logo --- README.md | 128 ++++++++++++++++++++++++++-------------------------- image-5.png | Bin 0 -> 8932 bytes 2 files changed, 63 insertions(+), 65 deletions(-) create mode 100644 image-5.png diff --git a/README.md b/README.md index 539213b..e5d7daf 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,63 @@ - -

- - -

- -[![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: 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 diff --git a/image-5.png b/image-5.png new file mode 100644 index 0000000000000000000000000000000000000000..e841a378660d581665ab29e795b525b33bce15df GIT binary patch literal 8932 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