-Events system update order is now choosen according to system priority

-added mixin for adding exluded components using it's type
-demos:
 *added GUI for selecting templates and choosing tools
 *change SpaceInvades SideMove system to not using events for better performance and multithreading
 *added Entites spawning support
 *fixed some Snake demo bugs
 *GUI work's better now
This commit is contained in:
Mergul 2020-02-09 15:24:26 +01:00
parent 19fc440ed6
commit 1f78f2506c
9 changed files with 436 additions and 60 deletions

View file

@ -7,18 +7,35 @@ import cimgui.cimgui;
import ecs.std;
import ecs.system;
import ecs.vector;
import ecs.entity;
import gui.system;
import gui.template_;
extern(C):
struct GUIManager
{
Vector!SystemGUI systems;
Vector!TemplateGUI templates;
uint selected_tempalte = 0;
void clear()
{
foreach(tmpl; templates)
{
launcher.manager.freeTemplate(tmpl.tmpl);
}
systems.clear();
templates.clear();
}
EntityTemplate* getSelectedTemplate()
{
if(templates.length > selected_tempalte)return templates[selected_tempalte].tmpl;
else return null;
}
void addSystem(ushort id, const (char)* name, bool enabled = true)
@ -28,9 +45,19 @@ struct GUIManager
systems.add(SystemGUI(name,system,enabled));
}
void addTemplate(ushort[] components, const (char)* name)
{
templates.add(TemplateGUI(name, launcher.manager.allocateTemplate(components)));
}
void addTemplate(EntityTemplate* tmpl, const (char)* name)
{
templates.add(TemplateGUI(name, tmpl));
}
void gui()
{
if(igCollapsingHeader("Systems", ImGuiTreeNodeFlags_Framed))
if(igCollapsingHeader("Systems", ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_FramePadding))
{
bool true_ = true;
igIndent(8);
@ -44,6 +71,27 @@ struct GUIManager
}
igUnindent(8);
}
}
void toolGui()
{
if(templates.length)
{
if(igBeginCombo("Template",templates[selected_tempalte].name,0))
{
foreach(i, tmpl; templates)
{
if(igSelectable(tmpl.name,false,0,ImVec2(0,0)))
{
selected_tempalte = cast(uint)i;
}
}
igEndCombo();
}
}
else
{
if(igBeginCombo("Template",null,0))igEndCombo();
}
}
}