mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-15 04:15:28 +07:00
prologue, epilogue instead one progress for systems
This commit is contained in:
@@ -39,8 +39,9 @@ BEFORE :: fragment
|
|||||||
|
|
||||||
PHASE :: fragment
|
PHASE :: fragment
|
||||||
QUERY :: fragment
|
QUERY :: fragment
|
||||||
PROCESS :: fragment
|
|
||||||
EXECUTE :: fragment
|
EXECUTE :: fragment
|
||||||
|
PROLOGUE :: fragment
|
||||||
|
EPILOGUE :: fragment
|
||||||
```
|
```
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
@@ -137,8 +138,9 @@ system_builder:after :: system... -> system_builder
|
|||||||
system_builder:before :: system... -> system_builder
|
system_builder:before :: system... -> system_builder
|
||||||
system_builder:phase :: phase -> system_builder
|
system_builder:phase :: phase -> system_builder
|
||||||
system_builder:query :: query -> system_builder
|
system_builder:query :: query -> system_builder
|
||||||
system_builder:process :: {} -> system_builder
|
|
||||||
system_builder:execute :: {chunk, entity[], integer} -> system_builder
|
system_builder:execute :: {chunk, entity[], integer} -> system_builder
|
||||||
|
system_builder:prologue :: {} -> system_builder
|
||||||
|
system_builder:epilogue :: {} -> system_builder
|
||||||
system_builder:build :: system, boolean
|
system_builder:build :: system, boolean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
## Backlog
|
## Backlog
|
||||||
|
|
||||||
- `prologue`, `epilogue` instead `progress` for systems
|
|
||||||
- add system groups (for disabling for example)
|
- add system groups (for disabling for example)
|
||||||
- deterministic system execution
|
- deterministic system execution
|
||||||
- add destroing policies (fragments, phases, systems)
|
- add destroing policies (fragments, phases, systems)
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ local queries = {
|
|||||||
|
|
||||||
local awake_system = evo.system()
|
local awake_system = evo.system()
|
||||||
:phase(phases.awake)
|
:phase(phases.awake)
|
||||||
:process(function()
|
:prologue(function()
|
||||||
print '-= Awake =-'
|
print '-= | Awake | =-'
|
||||||
evo.entity()
|
evo.entity()
|
||||||
:set(fragments.force, vector2(0, 0))
|
:set(fragments.force, vector2(0, 0))
|
||||||
:set(fragments.position, vector2(0, 0))
|
:set(fragments.position, vector2(0, 0))
|
||||||
@@ -105,15 +105,15 @@ local graphics_system = evo.system()
|
|||||||
local entity, position = entities[i], positions[i]
|
local entity, position = entities[i], positions[i]
|
||||||
|
|
||||||
print(string.format(
|
print(string.format(
|
||||||
'- {entity %d} at {%.4f, %.4f}',
|
'|-> {entity %d} at {%.4f, %.4f}',
|
||||||
entity, position.x, position.y))
|
entity, position.x, position.y))
|
||||||
end
|
end
|
||||||
end):build()
|
end):build()
|
||||||
|
|
||||||
local shutdown_system = evo.system()
|
local shutdown_system = evo.system()
|
||||||
:phase(phases.shutdown)
|
:phase(phases.shutdown)
|
||||||
:process(function()
|
:epilogue(function()
|
||||||
print '-= Shutdown =-'
|
print '-= | Shutdown | =-'
|
||||||
evo.batch_destroy(queries.bodies)
|
evo.batch_destroy(queries.bodies)
|
||||||
end):build()
|
end):build()
|
||||||
|
|
||||||
|
|||||||
73
evolved.lua
73
evolved.lua
@@ -41,8 +41,9 @@ local evolved = {
|
|||||||
---@alias evolved.default evolved.component
|
---@alias evolved.default evolved.component
|
||||||
---@alias evolved.construct fun(...: any): evolved.component
|
---@alias evolved.construct fun(...: any): evolved.component
|
||||||
|
|
||||||
---@alias evolved.process fun()
|
|
||||||
---@alias evolved.execute fun(c: evolved.chunk, es: evolved.entity[], ec: integer)
|
---@alias evolved.execute fun(c: evolved.chunk, es: evolved.entity[], ec: integer)
|
||||||
|
---@alias evolved.prologue fun()
|
||||||
|
---@alias evolved.epilogue fun()
|
||||||
|
|
||||||
---@alias evolved.set_hook fun(e: evolved.entity, f: evolved.fragment, nc: evolved.component, oc?: evolved.component)
|
---@alias evolved.set_hook fun(e: evolved.entity, f: evolved.fragment, nc: evolved.component, oc?: evolved.component)
|
||||||
---@alias evolved.assign_hook fun(e: evolved.entity, f: evolved.fragment, nc: evolved.component, oc: evolved.component)
|
---@alias evolved.assign_hook fun(e: evolved.entity, f: evolved.fragment, nc: evolved.component, oc: evolved.component)
|
||||||
@@ -417,8 +418,9 @@ evolved.BEFORE = __acquire_id()
|
|||||||
|
|
||||||
evolved.PHASE = __acquire_id()
|
evolved.PHASE = __acquire_id()
|
||||||
evolved.QUERY = __acquire_id()
|
evolved.QUERY = __acquire_id()
|
||||||
evolved.PROCESS = __acquire_id()
|
|
||||||
evolved.EXECUTE = __acquire_id()
|
evolved.EXECUTE = __acquire_id()
|
||||||
|
evolved.PROLOGUE = __acquire_id()
|
||||||
|
evolved.EPILOGUE = __acquire_id()
|
||||||
|
|
||||||
---
|
---
|
||||||
---
|
---
|
||||||
@@ -2601,15 +2603,14 @@ end
|
|||||||
|
|
||||||
---@param system evolved.system
|
---@param system evolved.system
|
||||||
local function __system_process(system)
|
local function __system_process(system)
|
||||||
---@type evolved.query?, evolved.process?, evolved.execute?
|
local query, execute, prologue, epilogue = evolved.get(system,
|
||||||
local query, process, execute = evolved.get(system,
|
evolved.QUERY, evolved.EXECUTE, evolved.PROLOGUE, evolved.EPILOGUE)
|
||||||
evolved.QUERY, evolved.PROCESS, evolved.EXECUTE)
|
|
||||||
|
|
||||||
if process then
|
if prologue then
|
||||||
local success, result = pcall(process)
|
local success, result = pcall(prologue)
|
||||||
|
|
||||||
if not success then
|
if not success then
|
||||||
error(string.format('system processing failed: %s', result), 2)
|
error(string.format('system prologue failed: %s', result), 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2627,6 +2628,14 @@ local function __system_process(system)
|
|||||||
end
|
end
|
||||||
evolved.commit()
|
evolved.commit()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if epilogue then
|
||||||
|
local success, result = pcall(epilogue)
|
||||||
|
|
||||||
|
if not success then
|
||||||
|
error(string.format('system epilogue failed: %s', result), 2)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param phase evolved.phase
|
---@param phase evolved.phase
|
||||||
@@ -6162,8 +6171,9 @@ end
|
|||||||
---@field package __before? evolved.system[]
|
---@field package __before? evolved.system[]
|
||||||
---@field package __phase? evolved.phase
|
---@field package __phase? evolved.phase
|
||||||
---@field package __query? evolved.query
|
---@field package __query? evolved.query
|
||||||
---@field package __process? evolved.process
|
|
||||||
---@field package __execute? evolved.execute
|
---@field package __execute? evolved.execute
|
||||||
|
---@field package __prologue? evolved.prologue
|
||||||
|
---@field package __epilogue? evolved.epilogue
|
||||||
|
|
||||||
---@class evolved.system_builder : evolved.__system_builder
|
---@class evolved.system_builder : evolved.__system_builder
|
||||||
local evolved_system_builder = {}
|
local evolved_system_builder = {}
|
||||||
@@ -6178,8 +6188,9 @@ function evolved.system()
|
|||||||
__before = nil,
|
__before = nil,
|
||||||
__phase = nil,
|
__phase = nil,
|
||||||
__query = nil,
|
__query = nil,
|
||||||
__process = nil,
|
|
||||||
__execute = nil,
|
__execute = nil,
|
||||||
|
__prologue = nil,
|
||||||
|
__epilogue = nil,
|
||||||
}
|
}
|
||||||
---@cast builder evolved.system_builder
|
---@cast builder evolved.system_builder
|
||||||
return setmetatable(builder, evolved_system_builder)
|
return setmetatable(builder, evolved_system_builder)
|
||||||
@@ -6249,18 +6260,24 @@ function evolved_system_builder:query(query)
|
|||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param process evolved.process
|
|
||||||
function evolved_system_builder:process(process)
|
|
||||||
self.__process = process
|
|
||||||
return self
|
|
||||||
end
|
|
||||||
|
|
||||||
---@param execute evolved.execute
|
---@param execute evolved.execute
|
||||||
function evolved_system_builder:execute(execute)
|
function evolved_system_builder:execute(execute)
|
||||||
self.__execute = execute
|
self.__execute = execute
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param prologue evolved.prologue
|
||||||
|
function evolved_system_builder:prologue(prologue)
|
||||||
|
self.__prologue = prologue
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param epilogue evolved.epilogue
|
||||||
|
function evolved_system_builder:epilogue(epilogue)
|
||||||
|
self.__epilogue = epilogue
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
---@return evolved.system system
|
---@return evolved.system system
|
||||||
---@return boolean is_deferred
|
---@return boolean is_deferred
|
||||||
function evolved_system_builder:build()
|
function evolved_system_builder:build()
|
||||||
@@ -6268,15 +6285,17 @@ function evolved_system_builder:build()
|
|||||||
local before = self.__before
|
local before = self.__before
|
||||||
local phase = self.__phase
|
local phase = self.__phase
|
||||||
local query = self.__query
|
local query = self.__query
|
||||||
local process = self.__process
|
|
||||||
local execute = self.__execute
|
local execute = self.__execute
|
||||||
|
local prologue = self.__prologue
|
||||||
|
local epilogue = self.__epilogue
|
||||||
|
|
||||||
self.__after = nil
|
self.__after = nil
|
||||||
self.__before = nil
|
self.__before = nil
|
||||||
self.__phase = nil
|
self.__phase = nil
|
||||||
self.__query = nil
|
self.__query = nil
|
||||||
self.__process = nil
|
|
||||||
self.__execute = nil
|
self.__execute = nil
|
||||||
|
self.__prologue = nil
|
||||||
|
self.__epilogue = nil
|
||||||
|
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
local component_list = __acquire_table(__TABLE_POOL_TAG__COMPONENT_LIST)
|
local component_list = __acquire_table(__TABLE_POOL_TAG__COMPONENT_LIST)
|
||||||
@@ -6306,18 +6325,24 @@ function evolved_system_builder:build()
|
|||||||
component_list[component_count] = query
|
component_list[component_count] = query
|
||||||
end
|
end
|
||||||
|
|
||||||
if process then
|
|
||||||
component_count = component_count + 1
|
|
||||||
fragment_list[component_count] = evolved.PROCESS
|
|
||||||
component_list[component_count] = process
|
|
||||||
end
|
|
||||||
|
|
||||||
if execute then
|
if execute then
|
||||||
component_count = component_count + 1
|
component_count = component_count + 1
|
||||||
fragment_list[component_count] = evolved.EXECUTE
|
fragment_list[component_count] = evolved.EXECUTE
|
||||||
component_list[component_count] = execute
|
component_list[component_count] = execute
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if prologue then
|
||||||
|
component_count = component_count + 1
|
||||||
|
fragment_list[component_count] = evolved.PROLOGUE
|
||||||
|
component_list[component_count] = prologue
|
||||||
|
end
|
||||||
|
|
||||||
|
if epilogue then
|
||||||
|
component_count = component_count + 1
|
||||||
|
fragment_list[component_count] = evolved.EPILOGUE
|
||||||
|
component_list[component_count] = epilogue
|
||||||
|
end
|
||||||
|
|
||||||
if component_count == 0 then
|
if component_count == 0 then
|
||||||
return evolved.id(), false
|
return evolved.id(), false
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user