mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-04 02:49:18 +00:00 
			
		
		
		
	Change logo
This commit is contained in:
		
							parent
							
								
									106dc42128
								
							
						
					
					
						commit
						3fcad85593
					
				
					 2 changed files with 63 additions and 65 deletions
				
			
		
							
								
								
									
										128
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								README.md
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -1,65 +1,63 @@
 | 
			
		|||
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <img src="jecs_darkmode.svg#gh-dark-mode-only" width=50%/>
 | 
			
		||||
  <img src="jecs_lightmode.svg#gh-light-mode-only" width=50%/>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
[](LICENSE-APACHE)
 | 
			
		||||
[](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.
 | 
			
		||||

 | 
			
		||||
Can be found under /benches/visual/query.luau
 | 
			
		||||
 | 
			
		||||
Inserting 8 components to an entity and updating them over 50 times.
 | 
			
		||||

 | 
			
		||||
Can be found under /benches/visual/insertions.luau
 | 
			
		||||
 | 
			
		||||
<p align="center">
 | 
			
		||||
  <img src="image-5.png" width=50%/>
 | 
			
		||||
 | 
			
		||||
[](LICENSE-APACHE) [](https://wally.run/package/ukendio/jecs)
 | 
			
		||||
 | 
			
		||||
</p>
 | 
			
		||||
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.
 | 
			
		||||

 | 
			
		||||
Can be found under /benches/visual/query.luau
 | 
			
		||||
 | 
			
		||||
Inserting 8 components to an entity and updating them over 50 times.
 | 
			
		||||

 | 
			
		||||
Can be found under /benches/visual/insertions.luau
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								image-5.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								image-5.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.7 KiB  | 
		Loading…
	
		Reference in a new issue