mirror of
https://github.com/Ukendio/jecs.git
synced 2025-08-04 03:09:18 +00:00
Version
This commit is contained in:
parent
499afc20cd
commit
4230a0a797
3 changed files with 68 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@rbxts/jecs",
|
"name": "@rbxts/jecs",
|
||||||
"version": "0.9.0-rc.6",
|
"version": "0.9.0-rc.7",
|
||||||
"description": "Stupidly fast Entity Component System",
|
"description": "Stupidly fast Entity Component System",
|
||||||
"main": "jecs.luau",
|
"main": "jecs.luau",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "ukendio/jecs"
|
name = "ukendio/jecs"
|
||||||
version = "0.9.0-rc.6"
|
version = "0.9.0-rc.7"
|
||||||
registry = "https://github.com/UpliftGames/wally-index"
|
registry = "https://github.com/UpliftGames/wally-index"
|
||||||
realm = "shared"
|
realm = "shared"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
66
werewitch.luau
Executable file
66
werewitch.luau
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
local jecs = require("@jecs")
|
||||||
|
|
||||||
|
local world = jecs.world()
|
||||||
|
local pair = jecs.pair
|
||||||
|
|
||||||
|
local IsA = world:entity()
|
||||||
|
|
||||||
|
local traits = {
|
||||||
|
IsA = IsA
|
||||||
|
}
|
||||||
|
|
||||||
|
world:set(IsA, jecs.OnAdd, function(component, id)
|
||||||
|
local second = jecs.pair_second(world, id)
|
||||||
|
assert(second ~= component, "circular")
|
||||||
|
|
||||||
|
local is_tag = jecs.is_tag(world, second)
|
||||||
|
world:added(component, function(entity, _, value)
|
||||||
|
if is_tag then
|
||||||
|
world:add(entity, second)
|
||||||
|
else
|
||||||
|
world:set(entity, second, value)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
world:removed(component, function(entity)
|
||||||
|
world:remove(entity, second)
|
||||||
|
end)
|
||||||
|
|
||||||
|
if not is_tag then
|
||||||
|
world:changed(component, function(entity, _, value)
|
||||||
|
world:set(entity, second, value)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local r = jecs.record(world, second) :: jecs.Record
|
||||||
|
local archetype = r.archetype
|
||||||
|
if not archetype then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local types = archetype.types
|
||||||
|
|
||||||
|
for _, id in types do
|
||||||
|
if jecs.is_tag(world, id) then
|
||||||
|
world:add(component, id)
|
||||||
|
else
|
||||||
|
local metadata = world:get(second, id)
|
||||||
|
if not world:has(component, id) then
|
||||||
|
world:set(component, id, metadata)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- jecs.bulk_insert(world, component, ids, values)
|
||||||
|
end)
|
||||||
|
|
||||||
|
local Witch = world:entity()
|
||||||
|
local Werewolf = world:entity()
|
||||||
|
|
||||||
|
local WereWitch = world:entity()
|
||||||
|
world:add(WereWitch, pair(IsA, Witch))
|
||||||
|
world:add(WereWitch, pair(IsA, Werewolf))
|
||||||
|
|
||||||
|
local e = world:entity()
|
||||||
|
world:add(e, WereWitch)
|
||||||
|
print(world:has(e, pair(IsA, Witch))) -- false
|
||||||
|
print(world:has(e, Witch)) -- true
|
Loading…
Reference in a new issue