-removed comments
This commit is contained in:
parent
e7d3d08feb
commit
bf8fac84cf
1 changed files with 37 additions and 90 deletions
|
|
@ -246,124 +246,71 @@ class EntityManager
|
||||||
static assert(0, "System should gave \"EntitiesData\" struct for input components");
|
static assert(0, "System should gave \"EntitiesData\" struct for input components");
|
||||||
}
|
}
|
||||||
|
|
||||||
//dfmt off
|
static if (hasMember!(Sys, "EventInput"))
|
||||||
static if(hasMember!(Sys,"EventInput"))
|
|
||||||
{
|
{
|
||||||
/* static void genEventCompList(Sys)(ref EventCallData data, EntityInfo* info, ref Sys.EventInput input)
|
static void callEventHandler(Type)(ref EventCallData data)
|
||||||
{*/
|
{
|
||||||
static void callEventHandler(Type)(ref EventCallData data){
|
Sys.EventInput input;
|
||||||
Sys.EventInput input;
|
|
||||||
Sys* dataSystem = cast(Sys*) data.system_pointer;
|
Sys* dataSystem = cast(Sys*) data.system_pointer;
|
||||||
EntityInfo* info = data.block.type_info;
|
EntityInfo* info = data.block.type_info;
|
||||||
|
|
||||||
alias EventFields=Fields!(Sys.EventInput);
|
alias EventFields = Fields!(Sys.EventInput);
|
||||||
foreach (eventFieldNum, ref eventField; input.tupleof)
|
foreach (eventFieldNum, ref eventField; input.tupleof)
|
||||||
{
|
{
|
||||||
alias EventFieldType = Unqual!(typeof(*eventField));
|
alias EventFieldType = Unqual!(typeof(*eventField));
|
||||||
enum bool isEntity = is( EventFieldType == ecs.entity.Entity );
|
enum bool isEntity = is(EventFieldType == ecs.entity.Entity);
|
||||||
|
|
||||||
static if(isEntity)
|
static if (isEntity)
|
||||||
{
|
{
|
||||||
eventField=cast(Entity*) data.block.dataBegin() + data.id;
|
eventField = cast(Entity*) data.block.dataBegin() + data.id;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
enum long indexInEntitiesData=getIndexOfTypeInEntitiesData!(Sys.EntitiesData, EventFieldType);
|
enum long indexInEntitiesData = getIndexOfTypeInEntitiesData!(Sys.EntitiesData,
|
||||||
static assert(indexInEntitiesData != -1, "Component present in EventInput has to be present in EntitiesData!");// Type present in EventInput has to be present in EntitiesData
|
EventFieldType);
|
||||||
|
static assert(indexInEntitiesData != -1,
|
||||||
|
"Component present in EventInput has to be present in EntitiesData!"); // Type present in EventInput has to be present in EntitiesData
|
||||||
|
|
||||||
enum bool isOptional = hasUDA!(Sys.EntitiesData.tupleof[indexInEntitiesData], "optional");
|
enum bool isOptional = hasUDA!(Sys.EntitiesData.tupleof[indexInEntitiesData],
|
||||||
static if(isOptional)
|
"optional");
|
||||||
|
static if (isOptional)
|
||||||
{
|
{
|
||||||
eventField=null;
|
eventField = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
eventField = cast(EventFieldType*)(cast(void*) data.block
|
eventField = cast(EventFieldType*)(cast(void*) data.block
|
||||||
+ info.deltas[EventFieldType.component_id]
|
+ info.deltas[EventFieldType.component_id]
|
||||||
+ data.id * EventFieldType.sizeof);
|
+ data.id * EventFieldType.sizeof);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
dataSystem.handleEvent(input, *cast(Type*)data.event);
|
dataSystem.handleEvent(input, *cast(Type*) data.event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setEventCallers(Sys)(ref System system){
|
static void setEventCallers(Sys)(ref System system)
|
||||||
enum allEventHandlers=__traits(getOverloads, Sys, "handleEvent").length;
|
{
|
||||||
system.m_event_callers = Mallocator.instance.makeArray!(System.EventCaller)(allEventHandlers);
|
enum allEventHandlers = __traits(getOverloads, Sys, "handleEvent").length;
|
||||||
|
system.m_event_callers = Mallocator.instance.makeArray!(
|
||||||
foreach(j, func; __traits(getOverloads, Sys, "handleEvent"))
|
System.EventCaller)(allEventHandlers);
|
||||||
|
|
||||||
|
foreach (j, func; __traits(getOverloads, Sys, "handleEvent"))
|
||||||
{
|
{
|
||||||
alias EventParamType=Parameters!( __traits(getOverloads, Sys, "handleEvent")[j] )[1];
|
alias EventParamType = Parameters!(__traits(getOverloads,
|
||||||
system.m_event_callers[j].callback = cast(void*)&callEventHandler!(EventParamType);
|
Sys, "handleEvent")[j])[1];
|
||||||
|
system.m_event_callers[j].callback = cast(
|
||||||
|
void*)&callEventHandler!(EventParamType);
|
||||||
system.m_event_callers[j].id = EventParamType.event_id;
|
system.m_event_callers[j].id = EventParamType.event_id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static if(__traits(hasMember, Sys, "handleEvent"))
|
static if (__traits(hasMember, Sys, "handleEvent"))
|
||||||
{
|
{
|
||||||
setEventCallers!(Sys)(system);
|
setEventCallers!(Sys)(system);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static string checkHandler()(string member)
|
|
||||||
{
|
|
||||||
string ret;
|
|
||||||
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~")[1] == Sys.EventInput) && hasStaticMember!(Parameters!(Sys."~member~")[0],\"event_id\")))";
|
|
||||||
return ret;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*static struct Handler
|
|
||||||
{
|
|
||||||
ushort id;
|
|
||||||
void* callback;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*static string catchEventHanlders()()
|
|
||||||
{
|
|
||||||
int event_handlers = 0;
|
|
||||||
string ret;
|
|
||||||
string event_param;
|
|
||||||
|
|
||||||
static if(__traits(hasMember, Sys, "handleEvent"))
|
|
||||||
{
|
|
||||||
foreach(func; __traits(getOverloads, Sys, "handleEvent"))
|
|
||||||
{
|
|
||||||
event_handlers++;//pragma(msg,"kupa");
|
|
||||||
}
|
|
||||||
|
|
||||||
//ret ~= "Handler[] handlers = (cast(Handler*)alloca("~event_handlers.to!string~" * (Handler).sizeof))[0 .. "~event_handlers.to!string~"];\n";
|
|
||||||
ret ~= "system.m_event_callers = Mallocator.instance.makeArray!(System.EventCaller)("~event_handlers.to!string~");";
|
|
||||||
event_handlers = 0;
|
|
||||||
|
|
||||||
foreach(j,func; __traits(getOverloads, Sys, "handleEvent"))
|
|
||||||
{
|
|
||||||
event_param = "Parameters!(__traits(getOverloads, Sys, \"handleEvent\")["~j.to!string~"])[1]";
|
|
||||||
ret ~= "static void callHandler"~event_handlers.to!string~"(ref EventCallData data)\n{\n";
|
|
||||||
ret ~= "Sys* s = cast(Sys*) data.system_pointer;
|
|
||||||
EntityInfo* info = data.block.type_info;";
|
|
||||||
//ret ~= genEventCompList();
|
|
||||||
ret ~= "Sys.EventInput input;\n";
|
|
||||||
ret ~= "genEventCompList!(Sys)(data, info, input);";
|
|
||||||
ret ~= "s.handleEvent(input, *cast("~event_param~"*)data.event);";
|
|
||||||
ret ~= "}\n";
|
|
||||||
ret ~= "system.m_event_callers["~event_handlers.to!string~"].callback = cast(void*)&callHandler"~event_handlers.to!string~";";
|
|
||||||
ret ~= "system.m_event_callers["~event_handlers.to!string~"].id = "~event_param~".event_id;";
|
|
||||||
event_handlers++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
//pragma(msg,catchEventHanlders());
|
|
||||||
mixin(catchEventHanlders());*/
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//dfmt on
|
|
||||||
|
|
||||||
static string genCompList()()
|
static string genCompList()()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue