-fully working betterC for windows
*replaced array[..] = array[ .. ] sclice copy with mempcy *added own std library (allocator, alloca, Mutex) *changed tamplates for collecting components for systems -fixed issue with multiple optional components registering for system
This commit is contained in:
parent
ed99807871
commit
41f1c6474b
14 changed files with 722 additions and 868 deletions
196
tests/tests.d
196
tests/tests.d
|
|
@ -1,7 +1,7 @@
|
|||
module tests.tests;
|
||||
|
||||
/*
|
||||
import std.experimental.allocator;
|
||||
import std.experimental.allocator.mallocator;
|
||||
import std.experimental.allocator.mallocator;*/
|
||||
|
||||
import ecs.entity;
|
||||
import ecs.events;
|
||||
|
|
@ -13,6 +13,21 @@ import ecs.core;
|
|||
import core.time;
|
||||
import std.stdio;
|
||||
|
||||
version(Windows)
|
||||
{
|
||||
import core.sys.windows.windows;
|
||||
struct Time
|
||||
{
|
||||
static long getUSecTime()
|
||||
{
|
||||
LARGE_INTEGER time, freq;
|
||||
QueryPerformanceFrequency(&freq);
|
||||
QueryPerformanceCounter(&time);
|
||||
return time.QuadPart / (freq.QuadPart / 1000_000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TestEvent
|
||||
{
|
||||
mixin ECS.Event; //__gshared ushort event_id;
|
||||
|
|
@ -124,17 +139,20 @@ struct ChangeTestSystem
|
|||
|
||||
void onCreate()
|
||||
{
|
||||
writeln("On Change Test System create.");
|
||||
//writeln("On Change Test System create.");
|
||||
printf("On Change Test System create.");
|
||||
}
|
||||
|
||||
void onCreate(int i)
|
||||
{
|
||||
writeln("On Change Test System create.");
|
||||
//writeln("On Change Test System create.");
|
||||
printf("On Change Test System create.");
|
||||
}
|
||||
|
||||
void onDestroy()
|
||||
{
|
||||
writeln("On Change Test System destroy.");
|
||||
//writeln("On Change Test System destroy.");
|
||||
printf("On Change Test System destroy.");
|
||||
}
|
||||
|
||||
void onAddEntity(EntitiesData data)
|
||||
|
|
@ -142,30 +160,30 @@ struct ChangeTestSystem
|
|||
//printf("Entity added! ID: ");
|
||||
foreach (i; 0 .. data.length)
|
||||
printf("Entity added! ID: %u\n",data.entites[i].id);
|
||||
//writeln("Entity added! ID: ", data.entites[i].id);
|
||||
////writeln("Entity added! ID: ", data.entites[i].id);
|
||||
}
|
||||
|
||||
void onRemoveEntity(EntitiesData data)
|
||||
{
|
||||
//writeln("Entity removed! ID: ", data.entites[0].id);
|
||||
////writeln("Entity removed! ID: ", data.entites[0].id);
|
||||
printf("Entity removed! ID: %u\n",data.entites[0].id);
|
||||
}
|
||||
|
||||
void onChangeEntity(EntitiesData data)
|
||||
{
|
||||
//writeln("Entity changed! ID: ", data.entites[0].id);
|
||||
////writeln("Entity changed! ID: ", data.entites[0].id);
|
||||
printf("Entity changed! ID: %u\n",data.entites[0].id);
|
||||
}
|
||||
|
||||
bool onBegin()
|
||||
{
|
||||
//writeln("On Test System begin.");
|
||||
////writeln("On Test System begin.");
|
||||
return true;
|
||||
}
|
||||
|
||||
void onEnd()
|
||||
{
|
||||
//writeln("On Test System end.");
|
||||
////writeln("On Test System end.");
|
||||
}
|
||||
|
||||
void initialize(ref Entity entity, ref TestComp comp)
|
||||
|
|
@ -196,34 +214,36 @@ struct TestSystem
|
|||
|
||||
void onCreate()
|
||||
{
|
||||
writeln("On Test System create.");
|
||||
//writeln("On Test System create.");
|
||||
printf("On Change Test System create.");
|
||||
}
|
||||
|
||||
void onDestroy()
|
||||
{
|
||||
writeln("On Test System destroy.");
|
||||
//writeln("On Test System destroy.");
|
||||
printf("On Change Test System destroy.");
|
||||
}
|
||||
|
||||
void onAddEntity(EntitiesData data)
|
||||
{
|
||||
//foreach(i;0..data.length)
|
||||
//writeln("Entity added ID: ",data.entites[i].id.id);
|
||||
////writeln("Entity added ID: ",data.entites[i].id.id);
|
||||
}
|
||||
/*
|
||||
void onRemoveEntity(EntitiesData data)
|
||||
{
|
||||
//writeln("Entity destroyed ID: ",data.entites[0].id);
|
||||
////writeln("Entity destroyed ID: ",data.entites[0].id);
|
||||
}*/
|
||||
|
||||
bool onBegin()
|
||||
{
|
||||
//writeln("On Test System begin.");
|
||||
////writeln("On Test System begin.");
|
||||
return true;
|
||||
}
|
||||
|
||||
void onEnd()
|
||||
{
|
||||
//writeln("On Test System end.");
|
||||
////writeln("On Test System end.");
|
||||
}
|
||||
|
||||
void initialize(ref Entity entity, ref TestComp comp)
|
||||
|
|
@ -400,14 +420,16 @@ struct TestSystem2
|
|||
{
|
||||
import std.stdio;
|
||||
|
||||
writeln("TestSystem2 enabled");
|
||||
//writeln("TestSystem2 enabled");
|
||||
printf("TestSystem2 enabled");
|
||||
}
|
||||
|
||||
void onDisable()
|
||||
{
|
||||
import std.stdio;
|
||||
|
||||
writeln("TestSystem2 disabled");
|
||||
//writeln("TestSystem2 disabled");
|
||||
printf("TestSystem2 disabled");
|
||||
}
|
||||
|
||||
void initialize(ref Entity entity, ref TestComp comp)
|
||||
|
|
@ -446,35 +468,38 @@ struct TestSystem2
|
|||
}*/
|
||||
}
|
||||
|
||||
int main()
|
||||
extern(C) int main()
|
||||
{
|
||||
|
||||
void dispatch(EntityManager.JobGroup jobs) nothrow @nogc
|
||||
{
|
||||
foreach (job; jobs.jobs)
|
||||
{
|
||||
//writeln(job);
|
||||
////writeln(job);
|
||||
job.execute();
|
||||
}
|
||||
}
|
||||
|
||||
void writeEntityComponents(Entity* entity)
|
||||
{
|
||||
write(entity.id);
|
||||
|
||||
printf("EntityID(%u, %u)",entity.id.id,entity.id.counter);
|
||||
//write(entity.id);
|
||||
TestComp* test_comp = entity.getComponent!TestComp;
|
||||
if (test_comp)
|
||||
write(*test_comp);
|
||||
printf("TestComp(%u, %u)",test_comp.a,test_comp.b);//write(*test_comp);
|
||||
TestComp2* test_comp2 = entity.getComponent!TestComp2;
|
||||
if (test_comp2)
|
||||
write(*test_comp2);
|
||||
printf("TestComp2(%u, %u)",test_comp2.a,test_comp2.b);//write(*test_comp2);
|
||||
TestComp3* test_comp3 = entity.getComponent!TestComp3;
|
||||
if (test_comp3)
|
||||
write(*test_comp3);
|
||||
printf("TestComp3(%u, %u)",test_comp3.gg,test_comp3.bg);//write(*test_comp3);
|
||||
TestComp4* test_comp4 = entity.getComponent!TestComp4;
|
||||
if (test_comp4)
|
||||
write(*test_comp4);
|
||||
writeln();
|
||||
//writeln((cast(uint*) pp)[0 .. 14], " ", pp);
|
||||
printf("TestComp4(%u, %u, %u, %u, %u, %u)",test_comp4.gg,test_comp4.bg,test_comp4.a,test_comp4.b,test_comp4.c,test_comp4.g);//write(*test_comp4);
|
||||
printf("\n");
|
||||
//writeln();
|
||||
////writeln((cast(uint*) pp)[0 .. 14], " ", pp);
|
||||
}
|
||||
|
||||
EntityManager.initialize(1);
|
||||
|
|
@ -484,7 +509,8 @@ int main()
|
|||
gEM.beginRegister();
|
||||
gEM.registerPass("fixed");
|
||||
|
||||
MonoTime time = MonoTime.currTime;
|
||||
//MonoTime time = MonoTime.currTime;
|
||||
long time = Time.getUSecTime();
|
||||
|
||||
gEM.registerComponent!TestComp2;
|
||||
gEM.registerComponent!TestComp4;
|
||||
|
|
@ -495,10 +521,13 @@ int main()
|
|||
gEM.registerEvent!TestEvent;
|
||||
gEM.registerEvent!TestEvent2;
|
||||
|
||||
ulong dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Components register: ", dur, " usecs");
|
||||
/*ulong dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Components register: ", dur, " usecs");
|
||||
|
||||
time = MonoTime.currTime;
|
||||
time = MonoTime.currTime;*/
|
||||
|
||||
printf("Components register: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
gEM.registerSystem!TestSystemWithHighPriority(100, "fixed");
|
||||
gEM.registerSystem!TestSystem(0);
|
||||
|
|
@ -507,13 +536,15 @@ int main()
|
|||
gEM.registerSystem!Sys2(-100);
|
||||
gEM.registerSystem!Sys3(-2);
|
||||
//gEM.registerSystem!TestSystemWithHighPriority(100);
|
||||
//gEM.registerSystem!TestSystem2(0);
|
||||
//gEM.registerSystem!TestSystem2(0);*/
|
||||
gEM.endRegister();
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Systems register: ", dur, " usecs");
|
||||
/*dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Systems register: ", dur, " usecs");
|
||||
|
||||
time = MonoTime.currTime;
|
||||
time = MonoTime.currTime;*/
|
||||
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];
|
||||
ushort[2] ids = [TestComp2.component_id, TestComp.component_id];
|
||||
|
|
@ -522,11 +553,13 @@ int main()
|
|||
//ushort[3] ids2 = [TestComp3.component_id, TestComp.component_id, TestComp4.component_id];
|
||||
ushort[2] ids2 = [TestComp3.component_id, TestComp.component_id];
|
||||
EntityTemplate* tmpl2 = gEM.allocateTemplate(ids2);
|
||||
//writeln(tmpl.info.components[]);
|
||||
////writeln(tmpl.info.components[]);
|
||||
//*cast(EntityID*) tmpl.entity_data.ptr = EntityID(1, 1);
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Template allocating: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Template allocating: ", dur, " usecs");
|
||||
printf("Template allocating: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
EntityID entity;
|
||||
|
||||
|
|
@ -536,18 +569,21 @@ int main()
|
|||
EntityManager.EntitiesBlock* block = EntityManager.instance.getMetaData(
|
||||
gEM.getEntity(entity));
|
||||
EntityManager.EntityInfo* info = block.type_info;
|
||||
writeln(info.add_listeners);
|
||||
//writeln(info.add_listeners);
|
||||
//if(info)assert(0);
|
||||
}
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
time = Time.getUSecTime();
|
||||
|
||||
//foreach(i; 0..1_000_000)gEM.addEntity(tmpl);
|
||||
|
||||
//foreach(i; 0..1_000_000)gEM.removeEntity(gEM.addEntity(tmpl).id);
|
||||
|
||||
EntityID[] idss = Mallocator.instance.makeArray!EntityID(5000);//[5000]
|
||||
scope(exit)Mallocator.instance.dispose(idss);
|
||||
import ecs.std;
|
||||
|
||||
EntityID[] idss = Mallocator.makeArray!EntityID(5000);//[5000]
|
||||
//scope(exit)Mallocator.dispose(idss);
|
||||
|
||||
foreach (i; 0 .. 200)
|
||||
{
|
||||
|
|
@ -560,8 +596,10 @@ int main()
|
|||
}
|
||||
gEM.commit();
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Entities adding: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Entities adding: ", dur, " usecs");
|
||||
printf("Entities adding: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
uint blocks = 0;
|
||||
foreach (info; &gEM.entities_infos.byValue)
|
||||
|
|
@ -573,7 +611,8 @@ int main()
|
|||
blocks++;
|
||||
}
|
||||
}
|
||||
writeln("Entities blocks: ", blocks);
|
||||
//writeln("Entities blocks: ", blocks);
|
||||
printf("Entities blocks: %u\n",blocks);
|
||||
|
||||
//foreach(j; 0..1_000)gEM.addEntity(tmpl);
|
||||
|
||||
|
|
@ -590,9 +629,10 @@ int main()
|
|||
|
||||
EntityID entity2;
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
time = Time.getUSecTime();
|
||||
|
||||
EntityID[] entities = Mallocator.instance.makeArray!EntityID(1_000_000);
|
||||
EntityID[] entities = Mallocator.makeArray!EntityID(1_000_000);
|
||||
foreach (i; 0 .. 500_000)
|
||||
{
|
||||
entity2 = gEM.addEntity(tmpl).id;
|
||||
|
|
@ -601,10 +641,12 @@ int main()
|
|||
}
|
||||
|
||||
gEM.commit();
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Entities adding2: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Entities adding2: ", dur, " usecs");
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
printf("Entities adding2: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
foreach (i; 0 .. 1_000_000)
|
||||
{
|
||||
|
|
@ -613,10 +655,12 @@ int main()
|
|||
}
|
||||
|
||||
gEM.commit();
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Components adding: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Components adding: ", dur, " usecs");
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
printf("Components adding: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
foreach (i; 0 .. 1_000_000)
|
||||
{
|
||||
|
|
@ -625,44 +669,52 @@ int main()
|
|||
}
|
||||
|
||||
gEM.commit();
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Components removing: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Components removing: ", dur, " usecs");
|
||||
printf("Components removing: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
time = Time.getUSecTime();
|
||||
|
||||
Mallocator.instance.dispose(entities);
|
||||
Mallocator.dispose(entities);
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
time = Time.getUSecTime();
|
||||
|
||||
gEM.begin();
|
||||
//gEM.updateMT();
|
||||
gEM.update();
|
||||
gEM.end();
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Update: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
time = Time.getUSecTime();
|
||||
|
||||
gEM.begin();
|
||||
gEM.updateMT();
|
||||
//gEM.update();
|
||||
gEM.end();
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Update: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
time = MonoTime.currTime;
|
||||
//time = MonoTime.currTime;
|
||||
time = Time.getUSecTime();
|
||||
|
||||
gEM.begin();
|
||||
gEM.updateMT();
|
||||
//gEM.update();
|
||||
gEM.end();
|
||||
|
||||
dur = (MonoTime.currTime - time).total!"usecs";
|
||||
writeln("Update: ", dur, " usecs");
|
||||
//dur = (MonoTime.currTime - time).total!"usecs";
|
||||
//writeln("Update: ", dur, " usecs");
|
||||
printf("Update: %f usecs\n",cast(float)(Time.getUSecTime() - time));
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity2));
|
||||
|
||||
|
|
@ -673,10 +725,10 @@ int main()
|
|||
gEM.end();
|
||||
|
||||
//Entity* pp;// = gEM.getEntity(entity.id);
|
||||
//writeln((cast(uint*) pp)[0 .. 14], " ", pp);
|
||||
////writeln((cast(uint*) pp)[0 .. 14], " ", pp);
|
||||
writeEntityComponents(gEM.getEntity(entity));
|
||||
|
||||
writeln("Entity, its copy, and template, and default filled tempalte");
|
||||
//writeln("Entity, its copy, and template, and default filled tempalte");
|
||||
gEM.addEntity(tmpl);
|
||||
writeEntityComponents(gEM.getEntity(entity));
|
||||
writeEntityComponents(gEM.addEntityCopy(entity));
|
||||
|
|
@ -705,16 +757,22 @@ int main()
|
|||
|
||||
gEM.removeComponents!(TestComp4)(entity);
|
||||
|
||||
gEM.commit();//*/
|
||||
gEM.commit();
|
||||
|
||||
printf("pre end\n");
|
||||
|
||||
writeEntityComponents(gEM.getEntity(entity));
|
||||
//import std.stdio;
|
||||
//writeln((cast(uint*)tmpl.info.first_block)[0..48]);
|
||||
////writeln((cast(uint*)tmpl.info.first_block)[0..48]);
|
||||
gEM.freeTemplate(tmpl);
|
||||
gEM.freeTemplate(tmpl2);
|
||||
gEM.freeTemplate(copy_tempalte);
|
||||
gEM.freeTemplate(copy_default_tempalte);
|
||||
EntityManager.destroy();
|
||||
|
||||
Mallocator.dispose(idss);
|
||||
|
||||
printf("end\n");//*/
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue