Fix unregisterSystem function

and add function to get m_system_pointer from System
This commit is contained in:
Mergul 2023-03-09 11:04:12 +01:00
parent 9bf6f84d45
commit 0702b007d1
3 changed files with 78 additions and 16 deletions

View file

@ -76,7 +76,7 @@ export struct EntityManager
UpdatePass* pass = Mallocator.make!UpdatePass;
pass.name = Mallocator.makeArray(cast(char[]) "update");
passes.add(pass);
passes_map.add(cast(string) pass.name, cast(ushort)(passes.length - 1));
passes_map.add(cast(const(char)[]) pass.name, cast(ushort)(passes.length - 1));
}
}
}
@ -84,7 +84,7 @@ export struct EntityManager
/************************************************************************************************************************
Deinitialize and destroy ECS. This function release whole memory.
*/
export static void destroy()
export static void destroy() nothrow @nogc
{
if (gEntityManager is null)
return;
@ -334,16 +334,23 @@ export struct EntityManager
*/
void unregisterSystem(Sys)()
{
assert(register_state, "unregisterSystem must be called between beginRegister() and endRegister().");
ushort system_id = becsID!Sys;
System* system = getSystem(system_id);
assert(system, "System was not registered");
assert(system.isAlive, "System already unregistered");
unregisterSystem(system);
}
system.destroy();
*system = System.init;
/************************************************************************************************************************
Unregister given system form EntityManager.
*/
export void unregisterSystem(System* system) nothrow @nogc
{
assert(register_state, "unregisterSystem must be called between beginRegister() and endRegister().");
assert(system !is null, "System was not registered");
assert(system.isAlive, "System already unregistered");
//disable, destroy and dispose user created system but keep name and other data
system.destroySystemData();
}
/************************************************************************************************************************
@ -1248,7 +1255,8 @@ export struct EntityManager
}
/************************************************************************************************************************
Return system ECS api by id
Return system ECS api by id.
System pointer might become invalid after registration process. It should be get once again after new systems are registered.
*/
export System* getSystem(ushort id) nothrow @nogc
{