From eaf2d1581cde31441a1c77f662245e5fc32bd6e6 Mon Sep 17 00:00:00 2001 From: Mergul Date: Sat, 6 Apr 2019 16:28:59 +0000 Subject: [PATCH] -removed next two mixins: *catchFunc *catchEntityFunc --- source/ecs/manager.d | 91 ++++++++++++++++++++------------------------ tests/tests.d | 7 +++- 2 files changed, 48 insertions(+), 50 deletions(-) diff --git a/source/ecs/manager.d b/source/ecs/manager.d index 2a34d27..5719f6e 100644 --- a/source/ecs/manager.d +++ b/source/ecs/manager.d @@ -637,8 +637,7 @@ class EntityManager assert(entities_count <= block.entities_count && offset <= block.entities_count); fillInputData(input_data, info, block, offset, entities_count, system); - //mixin(genFillInputData()); - + s.onUpdate(input_data); block = block.next_block; @@ -650,66 +649,60 @@ class EntityManager system.m_update = &callUpdate; } - static string catchFunc(RetType = void)(string member, string func) + static void catchFunction(string func_name, RetType = void)(void** member) { - //dfmt off - static if(is(RetType == void))string ret_str = ""; - else string ret_str = "return "; - string ret = "static if (hasMember!(Sys, \"" ~ func ~ "\") && - Parameters!(Sys."~func~").length == 0 && - is(ReturnType!(Sys."~func~") == "~RetType.stringof~")) + static if(hasMember!(Sys,func_name)) { - static "~RetType.stringof~" call" ~ func - ~ "(void* system_pointer) + foreach (func; __traits(getOverloads, Sys, func_name)) { - Sys* s = cast(Sys*) system_pointer; - "~ret_str~"s." ~ func ~ "(); + static if ((Parameters!(func)).length == 0 && is(ReturnType!(func) == RetType)) + { + static RetType callFunc(void* system_pointer) + { + Sys* s = cast(Sys*) system_pointer; + static if(is(RetTyp == void))mixin("s."~func_name~"()"); + else return mixin("s."~func_name~"()"); + } + *member = cast(void*)&callFunc; + break; + } } - - system." - ~ member ~ " = &call" ~ func ~ "; - }"; - return ret; - //dfmt on + } } - static string catchEntityFunc(RetType = void)(string member, string func) + static void catchEntityFunction(string func_name, RetType = void)(void** member) { - //dfmt off - - static if(is(RetType == void))string ret_str = ""; - else string ret_str = "return "; - string ret = "static if (hasMember!(Sys, \"" ~ func ~ "\") && - Parameters!(Sys."~func~").length == 1 && - is(Parameters!(Sys."~func~")[0] == Sys.EntitiesData) && - is(ReturnType!(Sys."~func~") == "~RetType.stringof~")) + static if(hasMember!(Sys,func_name)) { - static "~RetType.stringof~" call" ~ func - ~ "(ref ListenerCallData data) + foreach (func; __traits(getOverloads, Sys, func_name)) { - Sys* s = cast(Sys*) data.system.m_system_pointer; - Sys.EntitiesData input_data; - fillInputData(input_data, data.block.type_info, data.block, data.begin, data.end, data.system); - "~ret_str~"s." ~ func ~ "(input_data); + static if ((Parameters!(func)).length == 1 && is(Parameters!(func)[0] == Sys.EntitiesData) && is(ReturnType!(func) == RetType)) + { + static RetType callFunc(ref ListenerCallData data) + { + Sys* s = cast(Sys*) data.system.m_system_pointer; + Sys.EntitiesData input_data; + fillInputData(input_data, data.block.type_info, data.block, data.begin, data.end, data.system); + static if(is(RetTyp == void))mixin("s."~func_name~"(input_data)"); + else return mixin("s."~func_name~"(input_data)"); + } + *member = cast(void*)&callFunc; + break; + } } - - system." - ~ member ~ " = &call" ~ func ~ "; - }"; - return ret; - //dfmt on + } } - mixin(catchFunc("m_enable", "onEnable")); - mixin(catchFunc("m_disable", "onDisable")); - mixin(catchFunc("m_create", "onCreate")); - mixin(catchFunc("m_destroy", "onDestroy")); - mixin(catchFunc!(bool)("m_begin", "onBegin")); - mixin(catchFunc("m_end", "onEnd")); + catchFunction!("onEnable")(&system.m_enable); + catchFunction!("onDisable")(&system.m_disable); + catchFunction!("onCreate")(&system.m_create); + catchFunction!("onDestroy")(&system.m_destroy); + catchFunction!("onBegin",bool)(&system.m_begin); + catchFunction!("onEnd")(&system.m_end); - mixin(catchEntityFunc("m_add_entity", "onAddEntity")); - mixin(catchEntityFunc("m_remove_entity", "onRemoveEntity")); - mixin(catchEntityFunc("m_change_entity", "onChangeEntity")); + catchEntityFunction!("onAddEntity")(&system.m_add_entity); + catchEntityFunction!("onRemoveEntity")(&system.m_remove_entity); + catchEntityFunction!("onChangeEntity")(&system.m_change_entity); system.m_system_pointer = cast(void*) Mallocator.instance.make!Sys; system.m_priority = priority; diff --git a/tests/tests.d b/tests/tests.d index 60fed07..bf6fd53 100644 --- a/tests/tests.d +++ b/tests/tests.d @@ -124,6 +124,11 @@ struct ChangeTestSystem writeln("On Change Test System create."); } + void onCreate(int i) + { + writeln("On Change Test System create."); + } + void onDestroy() { writeln("On Change Test System destroy."); @@ -329,7 +334,7 @@ struct Sys3 void onUpdate(EntitiesData data) { - + } }