-update README code example (to one that compile)

-remove Entity.instance and gEM, global manager is now gEntityManager
This commit is contained in:
Mergul 2021-03-02 19:44:18 +01:00
parent d1c48e4c5f
commit 3b954b732b
11 changed files with 617 additions and 604 deletions

View file

@ -26,10 +26,11 @@ import bubel.ecs.traits;
import bubel.ecs.vector;
import bubel.ecs.atomic;
export alias gEM = EntityManager.instance;
export alias gEntityManager = EntityManager.instance;
alias SerializeVector = bubel.ecs.vector.Vector!ubyte;
///Global EntityManager used for everything.
export __gshared EntityManager* gEntityManager = null;
/************************************************************************************************************************
Entity manager is responsible for everything.
@ -40,7 +41,7 @@ Entity manager can be in three states:
Manager can be only in one state simultaneously.
Manager must be initialized before use. There is global instance of EntityManager: EntityManager.instance or gEM as alias.
Manager must be initialized before use. There is global instance of EntityManager: gEntityManager or gEntityManager as alias.
Registration process consist of registration of passes, systems, entities and events.
@ -64,15 +65,15 @@ export struct EntityManager
/************************************************************************************************************************
Initialize ECS.
*/
export static void initialize(uint threads_count, uint page_size = 32768,
export static void initialize(uint threads_count = 1, uint page_size = 32768,
uint block_pages_count = 128)
{
if (instance is null)
if (gEntityManager is null)
{
//instance = Mallocator.make!EntityManager(threads_count);
instance = Mallocator.make!EntityManager(threads_count, page_size, block_pages_count);
//gEntityManager = Mallocator.make!EntityManager(threads_count);
gEntityManager = Mallocator.make!EntityManager(threads_count, page_size, block_pages_count);
with (instance)
with (gEntityManager)
{
UpdatePass* pass = Mallocator.make!UpdatePass;
pass.name = Mallocator.makeArray(cast(char[]) "update");
@ -89,10 +90,10 @@ export struct EntityManager
*/
export static void destroy()
{
if (instance is null)
if (gEntityManager is null)
return;
with (instance)
with (gEntityManager)
{
foreach (ref system; systems)
{
@ -131,8 +132,8 @@ export struct EntityManager
}
}
Mallocator.dispose(instance);
instance = null;
Mallocator.dispose(gEntityManager);
gEntityManager = null;
}
/************************************************************************************************************************
@ -1904,8 +1905,8 @@ export struct EntityManager
addSystemCaller(*info, cast(uint) i);
}
info.comp_add_info = Mallocator.makeArray!(EntityInfo*)(instance.components.length);
//info.comp_rem_info = Mallocator.makeArray!(EntityInfo*)(instance.components.length);
info.comp_add_info = Mallocator.makeArray!(EntityInfo*)(gEntityManager.components.length);
//info.comp_rem_info = Mallocator.makeArray!(EntityInfo*)(gEntityManager.components.length);
info.comp_rem_info = Mallocator.makeArray!(EntityInfo*)(info.deltas.length);
foreach (comp; info.components)
@ -3406,7 +3407,7 @@ export struct EntityManager
if (comp_add_info.length <= id)
{
EntityInfo*[] new_infos = Mallocator.makeArray!(EntityInfo*)(
instance.components.length);
gEntityManager.components.length);
if (comp_add_info !is null)
{
//new_infos[0 .. comp_add_info.length] = comp_add_info[0 .. $];
@ -3445,7 +3446,7 @@ export struct EntityManager
assert(len == components.length + 1);
EntityInfo* new_info = instance.getEntityInfo(ids);
EntityInfo* new_info = gEntityManager.getEntityInfo(ids);
comp_add_info[id] = new_info;
return new_info;
@ -3456,7 +3457,7 @@ export struct EntityManager
/*if (comp_rem_info.length <= id)
{
EntityInfo*[] new_infos = Mallocator.makeArray!(EntityInfo*)(
instance.components.length, &this);
gEntityManager.components.length, &this);
if (comp_rem_info !is null)
{
//new_infos[0 .. comp_rem_info.length] = comp_rem_info[0 .. $];
@ -3486,7 +3487,7 @@ export struct EntityManager
assert(len == components.length - 1);
EntityInfo* new_info = instance.getEntityInfo(ids[0 .. len]);
EntityInfo* new_info = gEntityManager.getEntityInfo(ids[0 .. len]);
comp_rem_info[id] = new_info;
return new_info;
@ -3646,10 +3647,10 @@ export struct EntityManager
export void execute() nothrow @nogc
{
//EntityManager.instance.getThreadID();
//gEntityManager.getThreadID();
foreach (ref caller; callers)
{
caller.thread_id = EntityManager.instance.threadID();
caller.thread_id = gEntityManager.threadID();
caller.job_id = id;
caller.update();
}
@ -3866,6 +3867,5 @@ export struct EntityManager
return ret;
}
}
export __gshared EntityManager* instance = null;
}