-added second mmcommando commit

-removed some stupid feature
This commit is contained in:
Mergul 2019-04-06 14:47:33 +00:00
parent dbdbdb35e1
commit be5de2ae9c

View file

@ -249,47 +249,13 @@ class EntityManager
//dfmt off //dfmt off
static if(hasMember!(Sys,"EventInput")) static if(hasMember!(Sys,"EventInput"))
{ {
/*static string genEventCompList()() /* static void genEventCompList(Sys)(ref EventCallData data, EntityInfo* info, ref Sys.EventInput input)
{ {*/
string ret = "Sys.EventInput input;\n"; static void callEventHandler(Type)(ref EventCallData data){
string type; Sys.EventInput input;
//bool has = true; Sys* dataSystem = cast(Sys*) data.system_pointer;
foreach (member; __traits(allMembers, Sys.EventInput)) EntityInfo* info = data.block.type_info;
{
if(mixin("fullyQualifiedName!(ConstOf!(PointerTarget!(typeof(Sys.EventInput."~member~")))) == \"const(ecs.entity.Entity)\""))
{
ret ~= "input." ~ member ~ " = cast(Entity*) data.block.dataBegin() + data.id;\n";
continue;
}
bool has = false;
bool optional = false;
foreach(member2; __traits(allMembers, Sys.EntitiesData))
{
static if(mixin("isBasicType!(typeof(Sys.EntitiesData."~member2~"))")){}
else static if(mixin("fullyQualifiedName!(ConstOf!(PointerTarget!(typeof(Sys.EventInput."~member~")))) == fullyQualifiedName!(ConstOf!(ForeachType!(typeof(Sys.EntitiesData."~member2~"))))"))
{
has = true;
if(mixin("hasUDA!(Sys.EntitiesData."~member2~",\"optional\")"))optional = true;
break;
}
}
if(!has)assert(0);
if(optional)ret ~= "input." ~ member ~ " = null;\n";
else ret ~= "input." ~ member ~ " = cast(typeof(Sys.EventInput." ~ member
~ "))(cast(void*) data.block + info.deltas[typeof(Sys.EventInput."
~ member ~ ").component_id] + data.id * typeof(Sys.EventInput." ~ member
~ ").sizeof);\n";
}
return ret;
}*/
//pragma(msg,genEventCompList());
//pragma(msg,genEventCompList());
static void genEventCompList(Sys)(ref EventCallData data, EntityInfo* info, ref Sys.EventInput input)
{
alias EventFields=Fields!(Sys.EventInput); alias EventFields=Fields!(Sys.EventInput);
foreach (eventFieldNum, ref eventField; input.tupleof) foreach (eventFieldNum, ref eventField; input.tupleof)
{ {
@ -320,16 +286,34 @@ class EntityManager
} }
} }
dataSystem.handleEvent(input, *cast(Type*)data.event);
} }
static string checkHandler()(string member) static void setEventCallers(Sys)(System system){
enum allEventHandlers=__traits(getOverloads, Sys, "handleEvent").length;
system.m_event_callers = Mallocator.instance.makeArray!(System.EventCaller)(allEventHandlers);
foreach(j, func; __traits(getOverloads, Sys, "handleEvent"))
{
alias EventParamType=Parameters!( __traits(getOverloads, Sys, "handleEvent")[j] )[1];
system.m_event_callers[j].callback = cast(void*)&callEventHandler!(EventParamType);
system.m_event_callers[j].id = EventParamType.event_id;
}
}
static if(__traits(hasMember, Sys, "handleEvent"))
{
setEventCallers!(Sys)(system);
}
/*static string checkHandler()(string member)
{ {
string ret; string ret;
ret ~= "(Parameters!(Sys."~member~")).length == 2 && "; ret ~= "(Parameters!(Sys."~member~")).length == 2 && ";
ret ~= "((is(Parameters!(Sys."~member~")[0] == Sys.EventInput) && hasStaticMember!(Parameters!(Sys."~member~")[1],\"event_id\")) ||"; ret ~= "((is(Parameters!(Sys."~member~")[0] == Sys.EventInput) && hasStaticMember!(Parameters!(Sys."~member~")[1],\"event_id\")) ||";
ret ~= " (is(Parameters!(Sys."~member~")[1] == Sys.EventInput) && hasStaticMember!(Parameters!(Sys."~member~")[0],\"event_id\")))"; ret ~= " (is(Parameters!(Sys."~member~")[1] == Sys.EventInput) && hasStaticMember!(Parameters!(Sys."~member~")[0],\"event_id\")))";
return ret; return ret;
} }*/
/*static struct Handler /*static struct Handler
{ {
@ -337,7 +321,7 @@ class EntityManager
void* callback; void* callback;
}*/ }*/
static string catchEventHanlders()() /*static string catchEventHanlders()()
{ {
int event_handlers = 0; int event_handlers = 0;
string ret; string ret;
@ -369,36 +353,15 @@ class EntityManager
ret ~= "system.m_event_callers["~event_handlers.to!string~"].id = "~event_param~".event_id;"; ret ~= "system.m_event_callers["~event_handlers.to!string~"].id = "~event_param~".event_id;";
event_handlers++; event_handlers++;
} }
/*ret ~= "ushort max_id = 0;";
ret ~= "foreach(handler;handlers)
{
if(handler.id > max_id)max_id = handler.id;
}";
ret ~= "system.m_event_callback = Mallocator.instance.makeArray!(System.EventHandler)(max_id);";
ret ~= "foreach(handler;handlers)
{
system.m_event_callback[handler.id] = handler.callback;
}";*/
} }
/*static if(__traits(hasMember, Sys, "handleEvent"))//foreach(member; __traits(allMembers,Sys))
{
//static foreach()
static if (member == "handleEvent" && mixin("isFunction!(Sys."~member~")"))
{
static if(mixin(checkHandler(member)))
{
event_handlers++;
}
}
}*/
return ret; return ret;
} }
//pragma(msg,catchEventHanlders()); //pragma(msg,catchEventHanlders());
mixin(catchEventHanlders()); mixin(catchEventHanlders());*/
} }
//dfmt on //dfmt on