bubel-ecs/demos/source/gui/manager.d
2020-05-05 16:56:51 +02:00

97 lines
No EOL
2.4 KiB
D

module gui.manager;
import app;
import cimgui.cimgui;
import bubel.ecs.std;
import bubel.ecs.system;
import bubel.ecs.vector;
import bubel.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)
{
System* system = launcher.manager.getSystem(id);
//const (char)* name =
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 | ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_FramePadding))
{
bool true_ = true;
igIndent(8);
foreach(ref SystemGUI system;systems)
{
if(igCheckbox(system.name,&system.enabled))
{
if(system.enabled)system.system.enable();
else system.system.disable();
}
}
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();
}
}
}