-added second mmcommando commit
-removed some stupid feature
This commit is contained in:
parent
dbdbdb35e1
commit
be5de2ae9c
1 changed files with 31 additions and 68 deletions
|
|
@ -249,47 +249,13 @@ class EntityManager
|
|||
//dfmt off
|
||||
static if(hasMember!(Sys,"EventInput"))
|
||||
{
|
||||
/*static string genEventCompList()()
|
||||
{
|
||||
string ret = "Sys.EventInput input;\n";
|
||||
string type;
|
||||
//bool has = true;
|
||||
foreach (member; __traits(allMembers, Sys.EventInput))
|
||||
{
|
||||
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;
|
||||
}
|
||||
/* static void genEventCompList(Sys)(ref EventCallData data, EntityInfo* info, ref Sys.EventInput input)
|
||||
{*/
|
||||
static void callEventHandler(Type)(ref EventCallData data){
|
||||
Sys.EventInput input;
|
||||
Sys* dataSystem = cast(Sys*) data.system_pointer;
|
||||
EntityInfo* info = data.block.type_info;
|
||||
|
||||
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);
|
||||
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;
|
||||
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
|
||||
{
|
||||
|
|
@ -337,7 +321,7 @@ class EntityManager
|
|||
void* callback;
|
||||
}*/
|
||||
|
||||
static string catchEventHanlders()()
|
||||
/*static string catchEventHanlders()()
|
||||
{
|
||||
int event_handlers = 0;
|
||||
string ret;
|
||||
|
|
@ -369,36 +353,15 @@ class EntityManager
|
|||
ret ~= "system.m_event_callers["~event_handlers.to!string~"].id = "~event_param~".event_id;";
|
||||
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;
|
||||
}
|
||||
|
||||
//pragma(msg,catchEventHanlders());
|
||||
mixin(catchEventHanlders());
|
||||
mixin(catchEventHanlders());*/
|
||||
|
||||
|
||||
}
|
||||
//dfmt on
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue