Demos #10
1 changed files with 26 additions and 2 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue