-added multiple new function to allocate template and add entity -updated README.md (complete initial version) -empty components now don't take memory -fixedd small bug with TestRunner -added many new tests (HashMap, Vector, EntityMeta, ...) -added default hashing function to HashMap -fixed critical bug with adding entities -fixed small bug with adding entity with remplacement components -added asserts into code to better bug detection -small performance improvement for events -added ComponentRef structure which contain data pointer and componentID -remove EntityID from Event structure -now events are handled before removing entiteis -fixed GDC compilation -fixed rendering of rotated sprites -added weapons as separate entities to space ship and others -added Tower enemy to SpaceInvaders demo -added Boss to SpaceInvaders demo (boss has four tower attached to it) -Boss towers shoot multiple bullets upon death -fixed critical bug with demos switching -fixed critical bug related to adding/removing entities form inside onAdd/onRemove entity callback -added animation support -added particles sypport and particles for firing and explostions, and more -multithreaded rendering now has same rendering order as singlethreaded -application automaticallu detect host CPU threads count -added upgrades to SPaceInvaders demo -fixed texture memory freeing -improved documentation -improved multithreaded performance -improve shader code -fixed registration issue -some additional performance improvements -added depth and colors to rendering parameters -jobs now has names corresponding to their systems -change execute() -> willExecute() -added EntityMeta structure to speedup getting fetching components form entity -improved multithreading rendering -added possibility tio change number of threads runtime -added bullets collision detection in SpaceInvaders demo -some CI changes -added VBO batch rendering (current default, no render mode switch yet) -fixed camera positioning calculation -fixed buffer issue with WebGL -added viewport scalling (at least 300 pixels height). Pixels are scalled if screen is bigger. -center demos gameplay area -added fullpage html template for Emscripten build -added many new sprites to atlas -fixed critical bug with CPU usage in multithreaded mode -snake render tile coresponding to body part -snake is destroyed after collision and emit some particles -added some functionality to vectors -fixed documentation issue in Manager.d -more minor code changes and cleanup
98 lines
No EOL
2.4 KiB
D
98 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();
|
|
selected_tempalte = 0;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
} |