From 66e4c6952bc7b82302d825fb7e898f76d7f25a10 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Tue, 23 Apr 2024 18:12:46 +0200 Subject: [PATCH] README --- README.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ed40147..366d4ce 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,48 @@ +[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE-APACHE) +[![Wally]()]() + Just an ECS -jecs provides \ No newline at end of file +jecs is a stupidly fast Entity Component System (ECS). + +- Process tens of thousands of entities with ease every frame +- Zero-dependency Luau package +- Optimized for column-major operations +- Cache friendly archetype/SoA storage + +### Example + +```lua +local world = Jecs.World.new() + +local player = world:entity() +local opponent = world:entity() + +-- Notice how components are just entities +local Health = world:entity() +local Damage = world:entity() +local Position = world:entity() + +world:add(player, Health, 100) +world:add(player, Damage, 8) +world:add(player, Position, Vector3.new(0, 5, 0)) + +world:add(opponent, Health, 100) +world:add(opponent, Damage, 21) +world:add(opponent, Position, Vector3.new(0, 5, 3)) + +for playerId, playerPosition, health in world:query(Position, Health) do + local totalDamage = 0 + for _, opponentPosition, damage in world:query(Position, Damage) do + if (playerPosition - opponentPosition).Magnitude < 5 then + totalDamage += damage + end + end + + world:add(playerId, Health, health - totalDamage) +end + +assert(world:get(playerId, Health) == 79) +assert(world:get(opponentId, Health) == 92) + +``` \ No newline at end of file