Toggle editor with "ToggleEditor" command. Enable editor with "Debug.EnableEditor" config variable.

This commit is contained in:
2015-12-14 16:12:52 +01:00
parent ea239b19bd
commit cddd9026fb
2 changed files with 38 additions and 2 deletions
+6
View File
@@ -2,6 +2,8 @@
#include <glm/gtx/common.hpp>
#include "../Core/System.h"
#include "../Core/EMousePress.h"
#include "../Core/ConfigFile.h"
#include "../Input/EInputCommand.h"
#include "../Rendering/EPicking.h"
#include "../Rendering/RenderQueueFactory.h"
@@ -13,12 +15,16 @@ public:
virtual void Update(World* world, double dt) override;
private:
bool m_Enabled;
bool m_Visible;
std::vector<glm::vec2> m_PickingQueue;
EntityID m_Widget = 0;
EntityID m_Selection = 0;
EntityID m_LastSelection = 0;
glm::vec3 m_Position;
EventRelay<EditorSystem, Events::InputCommand> m_EInputCommand;
bool OnInputCommand(const Events::InputCommand& e);
EventRelay<EditorSystem, Events::MousePress> m_EMousePress;
bool OnMousePress(const Events::MousePress& e);
EventRelay<EditorSystem, Events::Picking> m_EPicking;
+32 -2
View File
@@ -5,12 +5,25 @@
EditorSystem::EditorSystem(EventBroker* eventBroker)
: ImpureSystem(eventBroker)
{
auto config = ResourceManager::Load<ConfigFile>("Config.ini");
m_Enabled = config->Get<bool>("Debug.EditorEnabled", false);
m_Visible = m_Enabled;
if (!m_Enabled) {
return;
}
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &EditorSystem::OnInputCommand);
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorSystem::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EPicking, &EditorSystem::OnPicking);
}
void EditorSystem::Update(World* world, double dt)
{
if (!m_Enabled) {
return;
}
if (m_Widget == 0) {
m_Widget = world->CreateEntity();
world->AttachComponent(m_Widget, "Transform");
@@ -22,6 +35,8 @@ void EditorSystem::Update(World* world, double dt)
}
auto& widgetModel = world->GetComponent(m_Widget, "Model");
widgetModel["Visible"] = m_Visible;
if (m_Selection != 0) {
if (world->HasComponent(m_Selection, "Transform")) {
glm::vec3 pos = RenderQueueFactory::AbsolutePosition(world, m_Selection);
@@ -30,11 +45,24 @@ void EditorSystem::Update(World* world, double dt)
} else {
m_Selection = 0;
}
}
}
if (!m_Visible) {
return;
}
drawUI(world, dt);
}
bool EditorSystem::OnInputCommand(const Events::InputCommand& e)
{
if (e.Command == "ToggleEditor" && e.Value > 0) {
m_Visible = !m_Visible;
}
return true;
}
bool EditorSystem::OnMousePress(const Events::MousePress& e)
{
if (e.Button == GLFW_MOUSE_BUTTON_RIGHT) {
@@ -146,7 +174,6 @@ void EditorSystem::drawUI(World* world, double dt)
val = tempVal;
}
} else {
//ImGui::InputFloat3(field.c_str(), glm::value_ptr(val));
ImGui::DragFloat3(field.c_str(), glm::value_ptr(val), 0.1f, std::numeric_limits<float>::lowest(), std::numeric_limits<float>::max());
}
} else if (type == "Color") {
@@ -165,6 +192,9 @@ void EditorSystem::drawUI(World* world, double dt)
if (ImGui::InputFloat(field.c_str(), &tempVal, 0.01f, 1.f)) {
component.SetProperty(field, static_cast<double>(tempVal));
}
} else if (type == "bool") {
auto& val = component.Property<bool>(field);
ImGui::Checkbox(field.c_str(), &val);
}
}
}