default/construct predef fragments

This commit is contained in:
BlackMATov
2024-12-18 17:38:39 +07:00
parent b40ff4809e
commit dfe5d10a38
2 changed files with 121 additions and 3 deletions

View File

@@ -273,3 +273,78 @@ do
assert(evo.get(e2, f1) == 42 and evo.get(e2, f2) == 44)
end
end
do
local f1, f2, f3, f4 = evo.id(), evo.id(), evo.id(), evo.id()
evo.set(f1, evo.DEFAULT, 42)
evo.set(f2, evo.DEFAULT, false)
local e = evo.id()
evo.set(e, f1)
evo.set(e, f2)
evo.set(e, f3)
evo.set(e, f4, false)
assert(evo.get(e, f1) == 42)
assert(evo.get(e, f2) == false)
assert(evo.get(e, f3) == true)
assert(evo.get(e, f4) == false)
end
do
local f1, f2, f3, f4, f5 = evo.id(), evo.id(), evo.id(), evo.id(), evo.id()
evo.set(f1, evo.CONSTRUCT, function(_, a, b) return a - b end)
evo.set(f2, evo.CONSTRUCT, function(_, c) return c end)
evo.set(f3, evo.CONSTRUCT, function() return nil end)
evo.set(f4, evo.CONSTRUCT, function() return false end)
evo.set(f5, evo.CONSTRUCT, function(e) return e end)
local e = evo.id()
evo.insert(e, f1, 43, 1)
evo.insert(e, f2, false)
evo.insert(e, f3, 43)
evo.insert(e, f4, 43)
evo.insert(e, f5)
assert(evo.get(e, f1) == 42)
assert(evo.get(e, f2) == false)
assert(evo.get(e, f3) == true)
assert(evo.get(e, f4) == false)
assert(evo.get(e, f5) == e)
evo.assign(e, f1, 42, 2)
evo.assign(e, f2, true)
evo.assign(e, f3, 43)
evo.assign(e, f4, 43)
evo.assign(e, f5, 43)
assert(evo.get(e, f1) == 40)
assert(evo.get(e, f2) == true)
assert(evo.get(e, f3) == true)
assert(evo.get(e, f4) == false)
assert(evo.get(e, f5) == e)
end
do
local f1, f2 = evo.id(), evo.id()
evo.set(f1, evo.DEFAULT, 42)
evo.set(f1, evo.CONSTRUCT, function() return nil end)
evo.set(f2, evo.DEFAULT, 42)
evo.set(f2, evo.CONSTRUCT, function() return false end)
local e = evo.id()
evo.set(e, f1, 43)
evo.set(e, f2, 43)
assert(evo.get(e, f1) == 42)
assert(evo.get(e, f2) == false)
evo.set(e, f1, 43)
evo.set(e, f2, 43)
assert(evo.get(e, f1) == 42)
assert(evo.get(e, f2) == false)
end

View File

@@ -116,6 +116,40 @@ end
---
---
evolved.DEFAULT = __acquire_id()
evolved.CONSTRUCT = __acquire_id()
---
---
---
---
---
---@param entity evolved.entity
---@param fragment evolved.fragment
---@param component evolved.component
---@param ... any construct additional parameters
---@return evolved.component
local function __construct(entity, fragment, component, ...)
local construct = evolved.get(fragment, evolved.CONSTRUCT)
if construct ~= nil then
component = construct(entity, component, ...)
end
if component == nil then
component = evolved.get(fragment, evolved.DEFAULT)
end
return component == nil and true or component
end
---
---
---
---
---
---@param fragment evolved.fragment
---@return evolved.chunk
---@nodiscard
@@ -515,7 +549,10 @@ end
---@param entity evolved.entity
---@param fragment evolved.fragment
---@param component evolved.component
function evolved.set(entity, fragment, component)
---@param ... any construct additional parameters
function evolved.set(entity, fragment, component, ...)
component = __construct(entity, fragment, component, ...)
if not __alive_id(entity) then
return false
end
@@ -582,8 +619,11 @@ end
---@param entity evolved.entity
---@param fragment evolved.fragment
---@param component evolved.component
---@param ... any construct additional parameters
---@return boolean is_assigned
function evolved.assign(entity, fragment, component)
function evolved.assign(entity, fragment, component, ...)
component = __construct(entity, fragment, component, ...)
if not __alive_id(entity) then
return false
end
@@ -611,8 +651,11 @@ end
---@param entity evolved.entity
---@param fragment evolved.fragment
---@param component evolved.component
---@param ... any construct additional parameters
---@return boolean is_inserted
function evolved.insert(entity, fragment, component)
function evolved.insert(entity, fragment, component, ...)
component = __construct(entity, fragment, component, ...)
if not __alive_id(entity) then
return false
end