Cleanup repository
							
								
								
									
										4
									
								
								.luaurc
									
									
									
									
									
								
							
							
						
						| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "aliases": {
 | 
					    "aliases": {
 | 
				
			||||||
        "jecs": "src",
 | 
					        "jecs": "jecs",
 | 
				
			||||||
        "testkit": "testkit",
 | 
					        "testkit": "test/testkit",
 | 
				
			||||||
        "mirror": "mirror"
 | 
					        "mirror": "mirror"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "languageMode": "strict"
 | 
					    "languageMode": "strict"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										21
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| 
						 | 
					@ -1,19 +1,18 @@
 | 
				
			||||||
 | 
					 | 
				
			||||||
<p align="center">
 | 
					<p align="center">
 | 
				
			||||||
  <img src="image-5.png" width=35%/>
 | 
					  <img src="assets/image-5.png" width=35%/>
 | 
				
			||||||
</p>
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](LICENSE) [](https://wally.run/package/ukendio/jecs)
 | 
					[](LICENSE) [](https://wally.run/package/ukendio/jecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Just a stupidly fast Entity Component System
 | 
					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
 | 
					-   [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
 | 
					-   Iterate 800,000 entities at 60 frames per second
 | 
				
			||||||
* Type-safe [Luau](https://luau-lang.org/) API
 | 
					-   Type-safe [Luau](https://luau-lang.org/) API
 | 
				
			||||||
* Zero-dependency package
 | 
					-   Zero-dependency package
 | 
				
			||||||
* Optimized for column-major operations
 | 
					-   Optimized for column-major operations
 | 
				
			||||||
* Cache friendly [archetype/SoA](https://ajmmertens.medium.com/building-an-ecs-2-archetypes-and-vectorization-fe21690805f9) storage
 | 
					-   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
 | 
					-   Rigorously [unit tested](https://github.com/Ukendio/jecs/actions/workflows/ci.yaml) for stability
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Example
 | 
					### Example
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,9 +56,9 @@ end
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
21,000 entities 125 archetypes 4 random components queried.
 | 
					21,000 entities 125 archetypes 4 random components queried.
 | 
				
			||||||

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

 | 
					
 | 
				
			||||||
Can be found under /benches/visual/insertions.luau
 | 
					Can be found under /benches/visual/insertions.luau
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 392 KiB After Width: | Height: | Size: 392 KiB  | 
| 
		 Before Width: | Height: | Size: 391 KiB After Width: | Height: | Size: 391 KiB  | 
| 
		 Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB  | 
| 
		 Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB  | 
| 
		 Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB  | 
| 
						 | 
					@ -14,9 +14,6 @@
 | 
				
			||||||
			"Lib": {
 | 
								"Lib": {
 | 
				
			||||||
				"$path": "src"
 | 
									"$path": "src"
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
            "rgb": {
 | 
					 | 
				
			||||||
                "$path": "rgb.luau"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
			"benches": {
 | 
								"benches": {
 | 
				
			||||||
				"$path": "benches"
 | 
									"$path": "benches"
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,6 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
				
			||||||
local Matter = require(ReplicatedStorage.DevPackages.Matter)
 | 
					local Matter = require(ReplicatedStorage.DevPackages.Matter)
 | 
				
			||||||
local ecr = require(ReplicatedStorage.DevPackages.ecr)
 | 
					local ecr = require(ReplicatedStorage.DevPackages.ecr)
 | 
				
			||||||
local jecs = require(ReplicatedStorage.Lib)
 | 
					local jecs = require(ReplicatedStorage.Lib)
 | 
				
			||||||
local rgb = require(ReplicatedStorage.rgb)
 | 
					 | 
				
			||||||
local newWorld = Matter.World.new()
 | 
					local newWorld = Matter.World.new()
 | 
				
			||||||
local ecs = jecs.World.new()
 | 
					local ecs = jecs.World.new()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,6 @@
 | 
				
			||||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
					local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
				
			||||||
local Matter = require(ReplicatedStorage.DevPackages["_Index"]["matter-ecs_matter@0.8.1"].matter)
 | 
					local Matter = require(ReplicatedStorage.DevPackages["_Index"]["matter-ecs_matter@0.8.1"].matter)
 | 
				
			||||||
local ecr = require(ReplicatedStorage.DevPackages["_Index"]["centau_ecr@0.8.0"].ecr)
 | 
					local ecr = require(ReplicatedStorage.DevPackages["_Index"]["centau_ecr@0.8.0"].ecr)
 | 
				
			||||||
local rgb = require(ReplicatedStorage.rgb)
 | 
					 | 
				
			||||||
local newWorld = Matter.World.new()
 | 
					local newWorld = Matter.World.new()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local jecs = require(ReplicatedStorage.Lib)
 | 
					local jecs = require(ReplicatedStorage.Lib)
 | 
				
			||||||
| 
						 | 
					@ -133,13 +132,6 @@ for i = 1, N do
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
print("TEST", hm)
 | 
					print("TEST", hm)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local white = rgb.white
 | 
					 | 
				
			||||||
local yellow = rgb.yellow
 | 
					 | 
				
			||||||
local gray = rgb.gray
 | 
					 | 
				
			||||||
local green = rgb.green
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local WALL = gray(" │ ")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local count = 0
 | 
					local count = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for _, archetype in ecs:query(D2, D4, D6, D8):archetypes() do
 | 
					for _, archetype in ecs:query(D2, D4, D6, D8):archetypes() do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,7 +5,6 @@ local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
				
			||||||
local Matter = require(ReplicatedStorage.DevPackages.Matter)
 | 
					local Matter = require(ReplicatedStorage.DevPackages.Matter)
 | 
				
			||||||
local ecr = require(ReplicatedStorage.DevPackages.ecr)
 | 
					local ecr = require(ReplicatedStorage.DevPackages.ecr)
 | 
				
			||||||
local jecs = require(ReplicatedStorage.Lib)
 | 
					local jecs = require(ReplicatedStorage.Lib)
 | 
				
			||||||
local rgb = require(ReplicatedStorage.rgb)
 | 
					 | 
				
			||||||
local newWorld = Matter.World.new()
 | 
					local newWorld = Matter.World.new()
 | 
				
			||||||
local ecs = jecs.World.new()
 | 
					local ecs = jecs.World.new()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"name": "jecs",
 | 
						"name": "jecs",
 | 
				
			||||||
	"tree": {
 | 
						"tree": {
 | 
				
			||||||
      "$path": "src"
 | 
							"$path": "jecs.luau"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										0
									
								
								src/index.d.ts → jecs.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						| 
						 | 
					@ -1,11 +1,11 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	"name": "@rbxts/jecs",
 | 
						"name": "@rbxts/jecs",
 | 
				
			||||||
    "version": "0.4.0-rc.0",
 | 
						"version": "0.4.0",
 | 
				
			||||||
	"description": "Stupidly fast Entity Component System",
 | 
						"description": "Stupidly fast Entity Component System",
 | 
				
			||||||
    "main": "src",
 | 
						"main": "jecs.luau",
 | 
				
			||||||
	"repository": {
 | 
						"repository": {
 | 
				
			||||||
		"type": "git",
 | 
							"type": "git",
 | 
				
			||||||
        "url": "https://github.com/ukendio/jecs.git"
 | 
							"url": "git+https://github.com/ukendio/jecs.git"
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"keywords": [],
 | 
						"keywords": [],
 | 
				
			||||||
	"author": "Ukendio",
 | 
						"author": "Ukendio",
 | 
				
			||||||
| 
						 | 
					@ -15,9 +15,9 @@
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
	"homepage": "https://github.com/ukendio/jecs",
 | 
						"homepage": "https://github.com/ukendio/jecs",
 | 
				
			||||||
	"license": "MIT",
 | 
						"license": "MIT",
 | 
				
			||||||
    "types": "src/index.d.ts",
 | 
						"types": "jecs.d.ts",
 | 
				
			||||||
	"files": [
 | 
						"files": [
 | 
				
			||||||
        "src",
 | 
							"jecs.luau",
 | 
				
			||||||
		"LICENSE.md",
 | 
							"LICENSE.md",
 | 
				
			||||||
		"README.md"
 | 
							"README.md"
 | 
				
			||||||
	],
 | 
						],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										33
									
								
								rgb.luau
									
									
									
									
									
								
							
							
						
						| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
return {
 | 
					 | 
				
			||||||
	white_underline = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[1;4m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	white = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[37;1m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	green = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[32;1m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	red = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[31;1m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	yellow = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[33;1m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	red_highlight = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[41;1;30m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	green_highlight = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[42;1;30m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	gray = function(s: any)
 | 
					 | 
				
			||||||
		return `\27[30;1m{s}\27[0m`
 | 
					 | 
				
			||||||
	end,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,29 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    "name": "jecs-test",
 | 
					 | 
				
			||||||
    "tree": {
 | 
					 | 
				
			||||||
      "$className": "DataModel",
 | 
					 | 
				
			||||||
      "StarterPlayer": {
 | 
					 | 
				
			||||||
        "$className": "StarterPlayer",
 | 
					 | 
				
			||||||
        "StarterPlayerScripts": {
 | 
					 | 
				
			||||||
          "$className": "StarterPlayerScripts",
 | 
					 | 
				
			||||||
          "$path": "tests"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "ReplicatedStorage": {
 | 
					 | 
				
			||||||
        "$className": "ReplicatedStorage",
 | 
					 | 
				
			||||||
        "Lib": {
 | 
					 | 
				
			||||||
          "$path": "lib"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "rgb": {
 | 
					 | 
				
			||||||
          "$path": "rgb.lua"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "benches": {
 | 
					 | 
				
			||||||
          "$path": "benches"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "mirror": {
 | 
					 | 
				
			||||||
          "$path": "mirror"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,3 +0,0 @@
 | 
				
			||||||
roots = ["ServerStorage"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[extraOptions]
 | 
					 | 
				
			||||||
| 
						 | 
					@ -6,8 +6,7 @@ realm = "shared"
 | 
				
			||||||
license = "MIT"
 | 
					license = "MIT"
 | 
				
			||||||
include = [
 | 
					include = [
 | 
				
			||||||
    "default.project.json",
 | 
					    "default.project.json",
 | 
				
			||||||
    "src/**",
 | 
					    "jecs.luau",
 | 
				
			||||||
    "src",
 | 
					 | 
				
			||||||
    "wally.toml",
 | 
					    "wally.toml",
 | 
				
			||||||
    "README.md",
 | 
					    "README.md",
 | 
				
			||||||
    "CHANGELOG.md",
 | 
					    "CHANGELOG.md",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||