@@ -4139,6 +4139,10 @@ end
41394139--- @param components evolved.component[]
41404140--- @param component_count integer
41414141function __defer_spawn_entity_at (entity , chunk , fragments , fragment_count , components , component_count )
4142+ if component_count > fragment_count then
4143+ component_count = fragment_count
4144+ end
4145+
41424146 --- @type evolved.fragment[]
41434147 local fragment_list = __acquire_table (__table_pool_tag .fragment_list )
41444148 __lua_table_move (fragments , 1 , fragment_count , 1 , fragment_list )
@@ -4190,6 +4194,10 @@ end
41904194--- @param components evolved.component[]
41914195--- @param component_count integer
41924196function __defer_spawn_entity_as (entity , prefab , fragments , fragment_count , components , component_count )
4197+ if component_count > fragment_count then
4198+ component_count = fragment_count
4199+ end
4200+
41934201 --- @type evolved.fragment[]
41944202 local fragment_list = __acquire_table (__table_pool_tag .fragment_list )
41954203 __lua_table_move (fragments , 1 , fragment_count , 1 , fragment_list )
@@ -4241,6 +4249,10 @@ end
42414249--- @param components evolved.component[]
42424250--- @param component_count integer
42434251function __defer_spawn_entity_with (entity , chunk , fragments , fragment_count , components , component_count )
4252+ if component_count > fragment_count then
4253+ component_count = fragment_count
4254+ end
4255+
42444256 --- @type evolved.fragment[]
42454257 local fragment_list = __acquire_table (__table_pool_tag .fragment_list )
42464258 __lua_table_move (fragments , 1 , fragment_count , 1 , fragment_list )
@@ -6154,9 +6166,9 @@ end
61546166local __builder_fns = {}
61556167
61566168--- @class evolved.entity_builder
6157- --- @field package __fragment_list ? evolved.fragment[]
6158- --- @field package __component_list ? evolved.component[]
6159- --- @field package __component_count ? integer
6169+ --- @field package __fragment_list evolved.fragment[]
6170+ --- @field package __component_list evolved.component[]
6171+ --- @field package __component_count integer
61606172__builder_fns .entity_builder = {}
61616173__builder_fns .entity_builder .__index = __builder_fns .entity_builder
61626174
@@ -6203,7 +6215,11 @@ __builder_fns.system_builder.__index = __builder_fns.system_builder
62036215--- @return evolved.entity_builder builder
62046216--- @nodiscard
62056217function __evolved_entity ()
6206- return __lua_setmetatable ({}, __builder_fns .entity_builder )
6218+ return __lua_setmetatable ({
6219+ __fragment_list = {},
6220+ __component_list = {},
6221+ __component_count = 0 ,
6222+ }, __builder_fns .entity_builder )
62076223end
62086224
62096225--- @param fragment evolved.fragment
@@ -6212,19 +6228,8 @@ end
62126228function __builder_fns .entity_builder :set (fragment , component )
62136229 local fragment_list = self .__fragment_list
62146230 local component_list = self .__component_list
6215- local component_count = self .__component_count or 0
6216-
6217- if component_count == 0 then
6218- fragment_list = __acquire_table (__table_pool_tag .fragment_list )
6219- component_list = __acquire_table (__table_pool_tag .component_list )
6220- self .__fragment_list = fragment_list
6221- self .__component_list = component_list
6222- end
6223-
6224- --- @cast fragment_list -?
6225- --- @cast component_list -?
62266231
6227- component_count = component_count + 1
6232+ local component_count = self . __component_count + 1
62286233 self .__component_count = component_count
62296234
62306235 fragment_list [component_count ] = fragment
@@ -6237,23 +6242,28 @@ end
62376242function __builder_fns .entity_builder :build ()
62386243 local fragment_list = self .__fragment_list
62396244 local component_list = self .__component_list
6240- local component_count = self .__component_count or 0
62416245
6242- self .__fragment_list = nil
6243- self .__component_list = nil
6244- self .__component_count = nil
6246+ local component_count = self .__component_count
6247+ self .__component_count = 0
62456248
6246- if component_count == 0 then
6247- return __evolved_id ( )
6249+ if __debug_mode then
6250+ __debug_fns . validate_fragment_list ( fragment_list , component_count )
62486251 end
62496252
6250- --- @cast fragment_list -?
6251- --- @cast component_list -?
6253+ local entity = __acquire_id ()
6254+ local entity_chunk = __chunk_fragment_list ( fragment_list , component_count )
62526255
6253- local entity = __evolved_spawn_with (fragment_list , component_list )
6256+ if __defer_depth > 0 then
6257+ __defer_spawn_entity_with (entity , entity_chunk ,
6258+ fragment_list , component_count ,
6259+ component_list , component_count )
6260+ end
62546261
6255- __release_table (__table_pool_tag .fragment_list , fragment_list )
6256- __release_table (__table_pool_tag .component_list , component_list )
6262+ __evolved_defer ()
6263+ do
6264+ __spawn_entity_with (entity , entity_chunk , fragment_list , component_count , component_list )
6265+ end
6266+ __evolved_commit ()
62576267
62586268 return entity
62596269end
0 commit comments