Fix unregisterSystem function
and add function to get m_system_pointer from System
This commit is contained in:
parent
9bf6f84d45
commit
0702b007d1
3 changed files with 78 additions and 16 deletions
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue