-removed next two mixins:

*catchFunc
*catchEntityFunc
This commit is contained in:
Mergul 2019-04-06 16:28:59 +00:00
parent f39d5ab403
commit eaf2d1581c
2 changed files with 48 additions and 50 deletions

View file

@ -637,7 +637,6 @@ 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);
@ -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;

View file

@ -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.");