mirror of
https://github.com/BlackMATov/evolved.lua.git
synced 2025-12-15 04:15:28 +07:00
new defer functions (assign/insert/remove hooks)
This commit is contained in:
159
evolved.lua
159
evolved.lua
@@ -940,6 +940,43 @@ end
|
|||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|
||||||
|
local __defer_set
|
||||||
|
local __defer_assign
|
||||||
|
local __defer_insert
|
||||||
|
local __defer_remove
|
||||||
|
local __defer_clear
|
||||||
|
local __defer_destroy
|
||||||
|
|
||||||
|
local __defer_multi_set
|
||||||
|
local __defer_multi_assign
|
||||||
|
local __defer_multi_insert
|
||||||
|
local __defer_multi_remove
|
||||||
|
|
||||||
|
local __defer_batch_set
|
||||||
|
local __defer_batch_assign
|
||||||
|
local __defer_batch_insert
|
||||||
|
local __defer_batch_remove
|
||||||
|
local __defer_batch_clear
|
||||||
|
local __defer_batch_destroy
|
||||||
|
|
||||||
|
local __defer_batch_multi_set
|
||||||
|
local __defer_batch_multi_assign
|
||||||
|
local __defer_batch_multi_insert
|
||||||
|
local __defer_batch_multi_remove
|
||||||
|
|
||||||
|
local __defer_spawn_entity_at
|
||||||
|
local __defer_spawn_entity_with
|
||||||
|
|
||||||
|
local __defer_assign_hook
|
||||||
|
local __defer_insert_hook
|
||||||
|
local __defer_remove_hook
|
||||||
|
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
---@param chunk evolved.chunk
|
---@param chunk evolved.chunk
|
||||||
---@param place integer
|
---@param place integer
|
||||||
local function __detach_entity(chunk, place)
|
local function __detach_entity(chunk, place)
|
||||||
@@ -2441,10 +2478,14 @@ local __defer_op = {
|
|||||||
|
|
||||||
spawn_entity_at = 21,
|
spawn_entity_at = 21,
|
||||||
spawn_entity_with = 22,
|
spawn_entity_with = 22,
|
||||||
|
|
||||||
|
assign_hook = 23,
|
||||||
|
insert_hook = 24,
|
||||||
|
remove_hook = 25,
|
||||||
}
|
}
|
||||||
|
|
||||||
---@type table<evolved.defer_op, fun(bytes: any[], index: integer): integer>
|
---@type table<evolved.defer_op, fun(bytes: any[], index: integer): integer>
|
||||||
local __defer_ops = __table_new(22, 0)
|
local __defer_ops = __table_new(25, 0)
|
||||||
|
|
||||||
---@return boolean started
|
---@return boolean started
|
||||||
local function __defer()
|
local function __defer()
|
||||||
@@ -2487,7 +2528,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_set(entity, fragment, ...)
|
__defer_set = function(entity, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2555,7 +2596,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_assign(entity, fragment, ...)
|
__defer_assign = function(entity, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2623,7 +2664,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_insert(entity, fragment, ...)
|
__defer_insert = function(entity, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2690,7 +2731,7 @@ end
|
|||||||
|
|
||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param ... evolved.fragment fragments
|
---@param ... evolved.fragment fragments
|
||||||
local function __defer_remove(entity, ...)
|
__defer_remove = function(entity, ...)
|
||||||
local fragment_count = select('#', ...)
|
local fragment_count = select('#', ...)
|
||||||
if fragment_count == 0 then return end
|
if fragment_count == 0 then return end
|
||||||
|
|
||||||
@@ -2755,7 +2796,7 @@ __defer_ops[__defer_op.remove] = function(bytes, index)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
local function __defer_clear(entity)
|
__defer_clear = function(entity)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2772,7 +2813,7 @@ __defer_ops[__defer_op.clear] = function(bytes, index)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
local function __defer_destroy(entity)
|
__defer_destroy = function(entity)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2791,7 +2832,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_multi_set(entity, fragments, components)
|
__defer_multi_set = function(entity, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -2822,7 +2863,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_multi_assign(entity, fragments, components)
|
__defer_multi_assign = function(entity, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -2853,7 +2894,7 @@ end
|
|||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_multi_insert(entity, fragments, components)
|
__defer_multi_insert = function(entity, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -2883,7 +2924,7 @@ end
|
|||||||
|
|
||||||
---@param entity evolved.entity
|
---@param entity evolved.entity
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
local function __defer_multi_remove(entity, fragments)
|
__defer_multi_remove = function(entity, fragments)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -2908,7 +2949,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_batch_set(query, fragment, ...)
|
__defer_batch_set = function(query, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -2976,7 +3017,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_batch_assign(query, fragment, ...)
|
__defer_batch_assign = function(query, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -3044,7 +3085,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragment evolved.fragment
|
---@param fragment evolved.fragment
|
||||||
---@param ... any component arguments
|
---@param ... any component arguments
|
||||||
local function __defer_batch_insert(query, fragment, ...)
|
__defer_batch_insert = function(query, fragment, ...)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -3111,7 +3152,7 @@ end
|
|||||||
|
|
||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param ... evolved.fragment fragments
|
---@param ... evolved.fragment fragments
|
||||||
local function __defer_batch_remove(query, ...)
|
__defer_batch_remove = function(query, ...)
|
||||||
local fragment_count = select('#', ...)
|
local fragment_count = select('#', ...)
|
||||||
if fragment_count == 0 then return end
|
if fragment_count == 0 then return end
|
||||||
|
|
||||||
@@ -3176,7 +3217,7 @@ __defer_ops[__defer_op.batch_remove] = function(bytes, index)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
local function __defer_batch_clear(query)
|
__defer_batch_clear = function(query)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -3193,7 +3234,7 @@ __defer_ops[__defer_op.batch_clear] = function(bytes, index)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
local function __defer_batch_destroy(query)
|
__defer_batch_destroy = function(query)
|
||||||
local length = __defer_length
|
local length = __defer_length
|
||||||
local bytecode = __defer_bytecode
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
@@ -3212,7 +3253,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_batch_multi_set(query, fragments, components)
|
__defer_batch_multi_set = function(query, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3243,7 +3284,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_batch_multi_assign(query, fragments, components)
|
__defer_batch_multi_assign = function(query, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3274,7 +3315,7 @@ end
|
|||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_batch_multi_insert(query, fragments, components)
|
__defer_batch_multi_insert = function(query, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3304,7 +3345,7 @@ end
|
|||||||
|
|
||||||
---@param query evolved.query
|
---@param query evolved.query
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
local function __defer_batch_multi_remove(query, fragments)
|
__defer_batch_multi_remove = function(query, fragments)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3330,7 +3371,7 @@ end
|
|||||||
---@param chunk evolved.chunk
|
---@param chunk evolved.chunk
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_spawn_entity_at(entity, chunk, fragments, components)
|
__defer_spawn_entity_at = function(entity, chunk, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3368,7 +3409,7 @@ end
|
|||||||
---@param chunk evolved.chunk
|
---@param chunk evolved.chunk
|
||||||
---@param fragments evolved.fragment[]
|
---@param fragments evolved.fragment[]
|
||||||
---@param components evolved.component[]
|
---@param components evolved.component[]
|
||||||
local function __defer_spawn_entity_with(entity, chunk, fragments, components)
|
__defer_spawn_entity_with = function(entity, chunk, fragments, components)
|
||||||
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
local fragment_list = __acquire_table(__TABLE_POOL_TAG__FRAGMENT_LIST)
|
||||||
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
__table_move(fragments, 1, #fragments, 1, fragment_list)
|
||||||
|
|
||||||
@@ -3402,6 +3443,78 @@ __defer_ops[__defer_op.spawn_entity_with] = function(bytes, index)
|
|||||||
return 4
|
return 4
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param entity evolved.entity
|
||||||
|
---@param fragment evolved.fragment
|
||||||
|
---@param new_component evolved.component
|
||||||
|
---@param old_component evolved.component
|
||||||
|
__defer_assign_hook = function(entity, fragment, new_component, old_component)
|
||||||
|
local length = __defer_length
|
||||||
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
|
bytecode[length + 1] = __defer_op.assign_hook
|
||||||
|
bytecode[length + 2] = entity
|
||||||
|
bytecode[length + 3] = fragment
|
||||||
|
bytecode[length + 4] = new_component
|
||||||
|
bytecode[length + 5] = old_component
|
||||||
|
|
||||||
|
__defer_length = length + 5
|
||||||
|
end
|
||||||
|
|
||||||
|
__defer_ops[__defer_op.assign_hook] = function(bytes, index)
|
||||||
|
local entity = bytes[index + 0]
|
||||||
|
local fragment = bytes[index + 1]
|
||||||
|
local new_component = bytes[index + 2]
|
||||||
|
local old_component = bytes[index + 3]
|
||||||
|
__call_fragment_set_and_assign_hooks(entity, fragment, new_component, old_component)
|
||||||
|
return 4
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param entity evolved.entity
|
||||||
|
---@param fragment evolved.fragment
|
||||||
|
---@param new_component evolved.component
|
||||||
|
__defer_insert_hook = function(entity, fragment, new_component)
|
||||||
|
local length = __defer_length
|
||||||
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
|
bytecode[length + 1] = __defer_op.insert_hook
|
||||||
|
bytecode[length + 2] = entity
|
||||||
|
bytecode[length + 3] = fragment
|
||||||
|
bytecode[length + 4] = new_component
|
||||||
|
|
||||||
|
__defer_length = length + 4
|
||||||
|
end
|
||||||
|
|
||||||
|
__defer_ops[__defer_op.insert_hook] = function(bytes, index)
|
||||||
|
local entity = bytes[index + 0]
|
||||||
|
local fragment = bytes[index + 1]
|
||||||
|
local new_component = bytes[index + 2]
|
||||||
|
__call_fragment_set_and_insert_hooks(entity, fragment, new_component)
|
||||||
|
return 3
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param entity evolved.entity
|
||||||
|
---@param fragment evolved.fragment
|
||||||
|
---@param old_component evolved.component
|
||||||
|
__defer_remove_hook = function(entity, fragment, old_component)
|
||||||
|
local length = __defer_length
|
||||||
|
local bytecode = __defer_bytecode
|
||||||
|
|
||||||
|
bytecode[length + 1] = __defer_op.remove_hook
|
||||||
|
bytecode[length + 2] = entity
|
||||||
|
bytecode[length + 3] = fragment
|
||||||
|
bytecode[length + 4] = old_component
|
||||||
|
|
||||||
|
__defer_length = length + 4
|
||||||
|
end
|
||||||
|
|
||||||
|
__defer_ops[__defer_op.remove_hook] = function(bytes, index)
|
||||||
|
local entity = bytes[index + 0]
|
||||||
|
local fragment = bytes[index + 1]
|
||||||
|
local old_component = bytes[index + 2]
|
||||||
|
__call_fragment_remove_hook(entity, fragment, old_component)
|
||||||
|
return 3
|
||||||
|
end
|
||||||
|
|
||||||
---
|
---
|
||||||
---
|
---
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user