-added EmptySystem supprort (called once per frame, sholud be once per jobs)
-EntitiesData can contain "thread_id" which is filled with ID of current thread
This commit is contained in:
parent
5399b584dd
commit
d6b53425dd
3 changed files with 237 additions and 156 deletions
148
tests/tests.d
148
tests/tests.d
|
|
@ -10,9 +10,9 @@ import ecs.system;
|
|||
import ecs.attributes;
|
||||
import ecs.core;
|
||||
|
||||
version(WebAssembly)
|
||||
version (WebAssembly)
|
||||
{
|
||||
extern(C) int printf(scope const char* format, ...) @nogc nothrow @system;
|
||||
extern (C) int printf(scope const char* format, ...) @nogc nothrow @system;
|
||||
|
||||
alias int time_t;
|
||||
alias int clockid_t;
|
||||
|
|
@ -20,62 +20,65 @@ version(WebAssembly)
|
|||
|
||||
struct timespec
|
||||
{
|
||||
time_t tv_sec;
|
||||
int tv_nsec;
|
||||
time_t tv_sec;
|
||||
int tv_nsec;
|
||||
}
|
||||
|
||||
extern(C) int clock_gettime(clockid_t, timespec*) @nogc nothrow @system;
|
||||
extern (C) int clock_gettime(clockid_t, timespec*) @nogc nothrow @system;
|
||||
|
||||
struct Time
|
||||
{
|
||||
|
||||
{
|
||||
|
||||
static long getUSecTime()
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
time_t time;
|
||||
timespec spec;
|
||||
|
||||
clock_gettime(CLOCK_REALTIME, &spec);
|
||||
|
||||
//time = spec.tv_sec;
|
||||
return spec.tv_sec * 1000_000 + spec.tv_nsec / 1000;//time / 1000_000;
|
||||
}
|
||||
}
|
||||
return spec.tv_sec * 1000_000 + spec.tv_nsec / 1000; //time / 1000_000;
|
||||
}
|
||||
}
|
||||
|
||||
extern(C) void _start() {}
|
||||
extern (C) void _start()
|
||||
{
|
||||
}
|
||||
}
|
||||
else version(Windows)
|
||||
else version (Windows)
|
||||
{
|
||||
import core.stdc.stdio : printf;
|
||||
import core.sys.windows.windows;
|
||||
|
||||
struct Time
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
LARGE_INTEGER time, freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
LARGE_INTEGER time, freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
QueryPerformanceCounter(&time);
|
||||
return time.QuadPart / (freq.QuadPart / 1000_000);
|
||||
}
|
||||
}
|
||||
return time.QuadPart / (freq.QuadPart / 1000_000);
|
||||
}
|
||||
}
|
||||
}
|
||||
else version(Posix)
|
||||
else version (Posix)
|
||||
{
|
||||
import core.stdc.stdio : printf;
|
||||
import core.sys.posix.time;
|
||||
|
||||
struct Time
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
time_t time;
|
||||
timespec spec;
|
||||
|
||||
clock_gettime(CLOCK_REALTIME, &spec);
|
||||
|
||||
//time = spec.tv_sec;
|
||||
return spec.tv_sec * 1000_000 + spec.tv_nsec / 1000;//time / 1000_000;
|
||||
}
|
||||
}
|
||||
return spec.tv_sec * 1000_000 + spec.tv_nsec / 1000; //time / 1000_000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TestEvent
|
||||
|
|
@ -209,20 +212,20 @@ struct ChangeTestSystem
|
|||
{
|
||||
//printf("Entity added! ID: ");
|
||||
foreach (i; 0 .. data.length)
|
||||
printf("Entity added! ID: %u\n",cast(uint)data.entites[i].id.id);
|
||||
////writeln("Entity added! ID: ", data.entites[i].id);
|
||||
printf("Entity added! ID: %u\n", cast(uint) data.entites[i].id.id);
|
||||
////writeln("Entity added! ID: ", data.entites[i].id);
|
||||
}
|
||||
|
||||
void onRemoveEntity(EntitiesData data)
|
||||
{
|
||||
////writeln("Entity removed! ID: ", data.entites[0].id);
|
||||
printf("Entity removed! ID: %u\n",cast(uint)data.entites[0].id.id);
|
||||
printf("Entity removed! ID: %u\n", cast(uint) data.entites[0].id.id);
|
||||
}
|
||||
|
||||
void onChangeEntity(EntitiesData data)
|
||||
{
|
||||
////writeln("Entity changed! ID: ", data.entites[0].id);
|
||||
printf("Entity changed! ID: %u\n",cast(uint)data.entites[0].id.id);
|
||||
printf("Entity changed! ID: %u\n", cast(uint) data.entites[0].id.id);
|
||||
}
|
||||
|
||||
bool onBegin()
|
||||
|
|
@ -409,6 +412,21 @@ struct Sys3
|
|||
}
|
||||
}
|
||||
|
||||
struct EmptySystem
|
||||
{
|
||||
mixin ECS.System;
|
||||
|
||||
struct EntitiesData
|
||||
{
|
||||
uint thread_id;
|
||||
}
|
||||
|
||||
void onUpdate(EntitiesData data)
|
||||
{
|
||||
printf("EmptySystem.onUpdate() - this should be called once per update\n");
|
||||
}
|
||||
}
|
||||
|
||||
import std.meta;
|
||||
|
||||
struct TestSystem2
|
||||
|
|
@ -422,7 +440,7 @@ struct TestSystem2
|
|||
}*/
|
||||
|
||||
//alias ExcludedComponents = AliasSeq!("TestComp", "TestComp4");
|
||||
/*
|
||||
/*
|
||||
string ExcludedComponents2;*/
|
||||
|
||||
static struct EntitiesData
|
||||
|
|
@ -507,15 +525,15 @@ struct ExternalUpdateCallTest
|
|||
|
||||
void update(TestSystem2.EntitiesData data)
|
||||
{
|
||||
if(print_count > 0)
|
||||
if (print_count > 0)
|
||||
{
|
||||
print_count--;
|
||||
printf("ExternalUpdateCallTest %u %u\n", data.test[0].gg, cast(uint)data.length);
|
||||
printf("ExternalUpdateCallTest %u %u\n", data.test[0].gg, cast(uint) data.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
version(unittest)
|
||||
version (unittest)
|
||||
{
|
||||
void main()
|
||||
{
|
||||
|
|
@ -523,7 +541,7 @@ version(unittest)
|
|||
}
|
||||
}
|
||||
else:
|
||||
extern(C) int main()
|
||||
extern (C) int main()
|
||||
{
|
||||
|
||||
void dispatch(EntityManager.JobGroup jobs) nothrow @nogc
|
||||
|
|
@ -542,28 +560,30 @@ extern(C) int main()
|
|||
|
||||
void writeEntityComponents(Entity* entity)
|
||||
{
|
||||
|
||||
printf("EntityID(%u, %u)",cast(uint)entity.id.id,cast(uint)entity.id.counter);
|
||||
|
||||
printf("EntityID(%u, %u)", cast(uint) entity.id.id, cast(uint) entity.id.counter);
|
||||
//write(entity.id);
|
||||
TestComp* test_comp = entity.getComponent!TestComp;
|
||||
if (test_comp)
|
||||
printf("TestComp(%u, %u)",cast(uint)test_comp.a,cast(uint)test_comp.b);//write(*test_comp);
|
||||
printf("TestComp(%u, %u)", cast(uint) test_comp.a, cast(uint) test_comp.b); //write(*test_comp);
|
||||
TestComp2* test_comp2 = entity.getComponent!TestComp2;
|
||||
if (test_comp2)
|
||||
printf("TestComp2(%u, %u)",cast(uint)test_comp2.b,cast(uint)test_comp2.a);//write(*test_comp2);
|
||||
printf("TestComp2(%u, %u)", cast(uint) test_comp2.b, cast(uint) test_comp2.a); //write(*test_comp2);
|
||||
TestComp3* test_comp3 = entity.getComponent!TestComp3;
|
||||
if (test_comp3)
|
||||
printf("TestComp3(%u, %u)",cast(uint)test_comp3.gg,cast(uint)test_comp3.bg);//write(*test_comp3);
|
||||
printf("TestComp3(%u, %u)", cast(uint) test_comp3.gg, cast(uint) test_comp3.bg); //write(*test_comp3);
|
||||
TestComp4* test_comp4 = entity.getComponent!TestComp4;
|
||||
if (test_comp4)
|
||||
printf("TestComp4(%u, %u, %u, %u, %u, %u)",test_comp4.gg,test_comp4.bg,cast(uint)test_comp4.a,cast(uint)test_comp4.b,cast(uint)test_comp4.c,cast(uint)test_comp4.g);//write(*test_comp4);
|
||||
printf("TestComp4(%u, %u, %u, %u, %u, %u)", test_comp4.gg, test_comp4.bg,
|
||||
cast(uint) test_comp4.a, cast(uint) test_comp4.b,
|
||||
cast(uint) test_comp4.c, cast(uint) test_comp4.g); //write(*test_comp4);
|
||||
printf("\n");
|
||||
//writeln();
|
||||
////writeln((cast(uint*) pp)[0 .. 14], " ", pp);
|
||||
}
|
||||
|
||||
EntityManager.initialize(1);
|
||||
|
||||
|
||||
//gEM.setJobDispachFunc(&dispatch);
|
||||
gEM.setMultithreadingCallbacks(&dispatch, &getID);
|
||||
//assert(gEM !is null);
|
||||
|
|
@ -588,7 +608,7 @@ extern(C) int main()
|
|||
|
||||
time = MonoTime.currTime;*/
|
||||
|
||||
printf("Components register: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Components register: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
gEM.registerSystem!TestSystemWithHighPriority(100, "fixed");
|
||||
|
|
@ -597,6 +617,7 @@ extern(C) int main()
|
|||
gEM.registerSystem!Sys1(10);
|
||||
gEM.registerSystem!Sys2(-100);
|
||||
gEM.registerSystem!Sys3(-2);
|
||||
gEM.registerSystem!EmptySystem(2);
|
||||
//gEM.registerSystem!TestSystemWithHighPriority(100);
|
||||
//gEM.registerSystem!TestSystem2(0);
|
||||
gEM.endRegister();
|
||||
|
|
@ -605,7 +626,7 @@ extern(C) int main()
|
|||
//writeln("Systems register: ", dur, " usecs");
|
||||
|
||||
time = MonoTime.currTime;*/
|
||||
printf("Systems register: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Systems register: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
//ushort[3] ids = [TestComp2.component_id, TestComp.component_id, TestComp4.component_id];
|
||||
|
|
@ -620,7 +641,7 @@ extern(C) int main()
|
|||
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Template allocating: ", dur, " usecs");
|
||||
printf("Template allocating: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Template allocating: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
EntityID entity;
|
||||
|
|
@ -644,7 +665,7 @@ extern(C) int main()
|
|||
|
||||
import ecs.std;
|
||||
|
||||
EntityID[] idss = Mallocator.makeArray!EntityID(5000);//[5000]
|
||||
EntityID[] idss = Mallocator.makeArray!EntityID(5000); //[5000]
|
||||
//scope(exit)Mallocator.dispose(idss);
|
||||
|
||||
foreach (i; 0 .. 200)
|
||||
|
|
@ -660,7 +681,7 @@ extern(C) int main()
|
|||
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Entities adding: ", dur, " usecs");
|
||||
printf("Entities adding: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Entities adding: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
uint blocks = 0;
|
||||
|
|
@ -674,7 +695,7 @@ extern(C) int main()
|
|||
}
|
||||
}
|
||||
//writeln("Entities blocks: ", blocks);
|
||||
printf("Entities blocks: %u\n",blocks);
|
||||
printf("Entities blocks: %u\n", blocks);
|
||||
|
||||
//foreach(j; 0..1_000)gEM.addEntity(tmpl);
|
||||
|
||||
|
|
@ -696,8 +717,8 @@ extern(C) int main()
|
|||
foreach (i; 0 .. 500_000)
|
||||
{
|
||||
entity2 = gEM.addEntity(tmpl).id;
|
||||
entities[i*2] = entity2;
|
||||
entities[i*2+1] = gEM.addEntity(tmpl2).id;
|
||||
entities[i * 2] = entity2;
|
||||
entities[i * 2 + 1] = gEM.addEntity(tmpl2).id;
|
||||
}
|
||||
|
||||
gEM.commit();
|
||||
|
|
@ -705,13 +726,14 @@ extern(C) int main()
|
|||
//writeln("Entities adding2: ", dur, " usecs");
|
||||
|
||||
//time = MonoTime.currTime;
|
||||
printf("Entities adding2: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Entities adding2: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
foreach (i; 0 .. 1_000_000)
|
||||
{
|
||||
EntityManager.instance.addComponents(entities[i],TestComp5());
|
||||
if((i & 0x00FFFF) == 0)gEM.commit();
|
||||
EntityManager.instance.addComponents(entities[i], TestComp5());
|
||||
if ((i & 0x00FFFF) == 0)
|
||||
gEM.commit();
|
||||
}
|
||||
|
||||
gEM.commit();
|
||||
|
|
@ -719,7 +741,7 @@ extern(C) int main()
|
|||
//writeln("Components adding: ", dur, " usecs");
|
||||
|
||||
//time = MonoTime.currTime;
|
||||
printf("Components adding: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Components adding: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
foreach (i; 0 .. 1_000_000)
|
||||
|
|
@ -731,7 +753,7 @@ extern(C) int main()
|
|||
gEM.commit();
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Components removing: ", dur, " usecs");
|
||||
printf("Components removing: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Components removing: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
Mallocator.dispose(entities);
|
||||
|
|
@ -746,7 +768,7 @@ extern(C) int main()
|
|||
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Update: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
|
|
@ -760,7 +782,7 @@ extern(C) int main()
|
|||
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Update: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
|
|
@ -774,7 +796,7 @@ extern(C) int main()
|
|||
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
printf("Update: %f usecs\n", cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
|
|
@ -794,7 +816,7 @@ extern(C) int main()
|
|||
writeEntityComponents(gEM.addEntityCopy(entity));
|
||||
EntityTemplate* copy_tempalte = gEM.allocateTemplate(entity);
|
||||
writeEntityComponents(gEM.addEntity(copy_tempalte));
|
||||
EntityTemplate* copy_default_tempalte = gEM.allocateTemplate(entity,true);
|
||||
EntityTemplate* copy_default_tempalte = gEM.allocateTemplate(entity, true);
|
||||
writeEntityComponents(gEM.addEntity(copy_default_tempalte));
|
||||
|
||||
gEM.addComponents(entity, TestComp4());
|
||||
|
|
@ -838,7 +860,7 @@ extern(C) int main()
|
|||
|
||||
Mallocator.dispose(idss);
|
||||
|
||||
printf("end\n");//*/
|
||||
printf("end\n"); //*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue