-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
|
//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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue