Demos #10
1 changed files with 26 additions and 2 deletions
|
|
@ -469,7 +469,7 @@ export struct EntityManager
|
||||||
foreach (member; __traits(allMembers, Sys.EntitiesData))
|
foreach (member; __traits(allMembers, Sys.EntitiesData))
|
||||||
{
|
{
|
||||||
alias MemberType = typeof(__traits(getMember, Sys.EntitiesData, member));
|
alias MemberType = typeof(__traits(getMember, Sys.EntitiesData, member));
|
||||||
if (member == "length" || member == "thread_id"
|
if (member == "length" || member == "thread_id" || member == "job_id"
|
||||||
|| is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
|| is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
||||||
{
|
{
|
||||||
//continue;
|
//continue;
|
||||||
|
|
@ -692,7 +692,7 @@ export struct EntityManager
|
||||||
foreach (member; __traits(allMembers, Sys.EntitiesData))
|
foreach (member; __traits(allMembers, Sys.EntitiesData))
|
||||||
{
|
{
|
||||||
alias MemberType = typeof(__traits(getMember, Sys.EntitiesData, member));
|
alias MemberType = typeof(__traits(getMember, Sys.EntitiesData, member));
|
||||||
if (member == "length" || member == "thread_id"
|
if (member == "length" || member == "thread_id" || member == "job_id"
|
||||||
|| is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
|| is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
||||||
{
|
{
|
||||||
if (is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
if (is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
|
||||||
|
|
@ -809,6 +809,13 @@ export struct EntityManager
|
||||||
static assert(MemberType.sizeof > 1,
|
static assert(MemberType.sizeof > 1,
|
||||||
"EntitiesData 'thread_id' member can't be byte or ubyte.");
|
"EntitiesData 'thread_id' member can't be byte or ubyte.");
|
||||||
}
|
}
|
||||||
|
else static if (member == "job_id")
|
||||||
|
{
|
||||||
|
static assert(isIntegral!(MemberType),
|
||||||
|
"EntitiesData 'job_id' member must be integral type.");
|
||||||
|
static assert(MemberType.sizeof > 1,
|
||||||
|
"EntitiesData 'job_id' member can't be byte or ubyte.");
|
||||||
|
}
|
||||||
else static if (!(isArray!(MemberType)))
|
else static if (!(isArray!(MemberType)))
|
||||||
static assert(0, "EntitiesData members should be arrays of elements!");
|
static assert(0, "EntitiesData members should be arrays of elements!");
|
||||||
}
|
}
|
||||||
|
|
@ -1009,6 +1016,12 @@ export struct EntityManager
|
||||||
.thread_id;
|
.thread_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static if (hasMember!(Sys.EntitiesData, "job_id"))
|
||||||
|
{
|
||||||
|
input_data.job_id = cast(typeof(input_data.job_id)) data
|
||||||
|
.job_id;
|
||||||
|
}
|
||||||
|
|
||||||
//s.onUpdate(input_data);
|
//s.onUpdate(input_data);
|
||||||
(cast(typeof(&__traits(getOverloads, s,
|
(cast(typeof(&__traits(getOverloads, s,
|
||||||
"onUpdate")[OnUpdateOverloadNum])) data.update_delegate)(input_data);
|
"onUpdate")[OnUpdateOverloadNum])) data.update_delegate)(input_data);
|
||||||
|
|
@ -1037,6 +1050,12 @@ export struct EntityManager
|
||||||
input_data.thread_id = cast(typeof(input_data.thread_id)) data.thread_id;
|
input_data.thread_id = cast(typeof(input_data.thread_id)) data.thread_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static if (hasMember!(Sys.EntitiesData, "job_id"))
|
||||||
|
{
|
||||||
|
input_data.job_id = cast(typeof(input_data.job_id)) data
|
||||||
|
.job_id;
|
||||||
|
}
|
||||||
|
|
||||||
(cast(typeof(&__traits(getOverloads, s,
|
(cast(typeof(&__traits(getOverloads, s,
|
||||||
"onUpdate")[OnUpdateOverloadNum])) data.update_delegate)(input_data);
|
"onUpdate")[OnUpdateOverloadNum])) data.update_delegate)(input_data);
|
||||||
}
|
}
|
||||||
|
|
@ -1406,6 +1425,7 @@ export struct EntityManager
|
||||||
memcpy(callers.ptr, &tmp_datas[0], CallData.sizeof * tmp_datas.length);
|
memcpy(callers.ptr, &tmp_datas[0], CallData.sizeof * tmp_datas.length);
|
||||||
tmp_datas.clear();
|
tmp_datas.clear();
|
||||||
sys.jobs[job_id].callers = callers;
|
sys.jobs[job_id].callers = callers;
|
||||||
|
sys.jobs[job_id].id = job_id;
|
||||||
job_id++;
|
job_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3415,6 +3435,8 @@ export struct EntityManager
|
||||||
ushort end;
|
ushort end;
|
||||||
///current thread index
|
///current thread index
|
||||||
uint thread_id;
|
uint thread_id;
|
||||||
|
//current job index
|
||||||
|
uint job_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ListenerCallData
|
struct ListenerCallData
|
||||||
|
|
@ -3428,6 +3450,7 @@ export struct EntityManager
|
||||||
struct Job
|
struct Job
|
||||||
{
|
{
|
||||||
CallData[] callers;
|
CallData[] callers;
|
||||||
|
uint id;
|
||||||
|
|
||||||
export void execute() nothrow @nogc
|
export void execute() nothrow @nogc
|
||||||
{
|
{
|
||||||
|
|
@ -3435,6 +3458,7 @@ export struct EntityManager
|
||||||
foreach (ref caller; callers)
|
foreach (ref caller; callers)
|
||||||
{
|
{
|
||||||
caller.thread_id = EntityManager.instance.threadID();
|
caller.thread_id = EntityManager.instance.threadID();
|
||||||
|
caller.job_id = id;
|
||||||
caller.update();
|
caller.update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue