Added job_id parameter to EntitiesData (index of currently executing job)

This commit is contained in:
Mergul 2020-05-23 10:53:36 +02:00
parent bfc0da47e4
commit 233f4abd47

View file

@ -469,7 +469,7 @@ export struct EntityManager
foreach (member; __traits(allMembers, Sys.EntitiesData))
{
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)[]))
{
//continue;
@ -692,7 +692,7 @@ export struct EntityManager
foreach (member; __traits(allMembers, Sys.EntitiesData))
{
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)[]))
{
if (is(MemberType == Entity[]) || is(MemberType == const(Entity)[]))
@ -809,6 +809,13 @@ export struct EntityManager
static assert(MemberType.sizeof > 1,
"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)))
static assert(0, "EntitiesData members should be arrays of elements!");
}
@ -1009,6 +1016,12 @@ export struct EntityManager
.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);
(cast(typeof(&__traits(getOverloads, s,
"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;
}
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,
"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);
tmp_datas.clear();
sys.jobs[job_id].callers = callers;
sys.jobs[job_id].id = job_id;
job_id++;
}
@ -3415,6 +3435,8 @@ export struct EntityManager
ushort end;
///current thread index
uint thread_id;
//current job index
uint job_id;
}
struct ListenerCallData
@ -3428,6 +3450,7 @@ export struct EntityManager
struct Job
{
CallData[] callers;
uint id;
export void execute() nothrow @nogc
{
@ -3435,6 +3458,7 @@ export struct EntityManager
foreach (ref caller; callers)
{
caller.thread_id = EntityManager.instance.threadID();
caller.job_id = id;
caller.update();
}
}