From 80543e3f82679eb5313d5c47d7be4e93f277bb3f Mon Sep 17 00:00:00 2001 From: Lendemor Date: Fri, 5 Jan 2018 19:42:10 +0100 Subject: [PATCH] started to add a gui window for key mapping --- src/engine.cpp | 4 +++ src/engine.h | 3 +++ src/keymapper.cpp | 46 +++++++++++++++++++++++++++++++++ src/keymapper.h | 20 ++++++++++++++ src/sparrowshell/scriptnode.cpp | 6 +++++ src/sparrowshell/scriptnode.h | 1 + 6 files changed, 80 insertions(+) create mode 100644 src/keymapper.cpp create mode 100644 src/keymapper.h diff --git a/src/engine.cpp b/src/engine.cpp index 87120fd..aa765b4 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -14,6 +14,7 @@ #include "imgui/imgui.h" #include "tools/loader.h" #include "editor.h" +#include "keymapper.h" #include "tools/loadingthread.h" Engine::Engine() : @@ -67,6 +68,7 @@ void Engine::createWindow(std::string title, m_renderer->initGL(w, h); m_sparrowshell = new SparrowShell(m_window); m_editor = new Editor(); + m_keymapper = new KeyMapper(); m_loadingThread = LoadingThread::init(); } @@ -180,12 +182,14 @@ void Engine::setScene(std::string scene) previous_scene->getRootObject()->removeChild(m_sparrowshell); previous_scene->getRootObject()->removeChild(m_editor); + previous_scene->getRootObject()->removeChild(m_keymapper); m_renderer->setScene(new_scene); m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y); new_scene->getRootObject()->addChild(m_sparrowshell); new_scene->getRootObject()->addChild(m_editor); + new_scene->getRootObject()->addChild(m_keymapper); } void Engine::enablePhysicsDebug() diff --git a/src/engine.h b/src/engine.h index 586dc33..9dbee66 100644 --- a/src/engine.h +++ b/src/engine.h @@ -9,6 +9,7 @@ class SceneTree; class SparrowShell; class PhysicsDebugNode; class Editor; +class KeyMapper; class LoadingThread; namespace sf @@ -54,6 +55,7 @@ public: SparrowShell* getShell() const {return m_sparrowshell;} PhysicsDebugNode* getPhysicsDebug() const {return m_physicsDebugNode;} Editor* getEditor() const {return m_editor;} + KeyMapper* getKeyMapper() const{return m_keymapper;} LoadingThread* getLoadingThread() const {return m_loadingThread;} SceneTree* getScene() const; @@ -81,6 +83,7 @@ private: PhysicsDebugNode *m_physicsDebugNode; SparrowRenderer* m_renderer; Editor* m_editor; + KeyMapper* m_keymapper; LoadingThread* m_loadingThread; void update(); diff --git a/src/keymapper.cpp b/src/keymapper.cpp new file mode 100644 index 0000000..67c2086 --- /dev/null +++ b/src/keymapper.cpp @@ -0,0 +1,46 @@ +#include "keymapper.h" + +#include +#include "engine.h" +#include "SparrowInput/input.h" +#include + +KeyMapper::KeyMapper() : + m_enabled(false) +{ +} + +void KeyMapper::update() +{ + if(m_enabled) + gui(); +} + +void KeyMapper::gui() +{ + std::vector contexts = getEngine().getInput()->getContextsList(); + std::vector types_binding = {"pressed","released","hold"}; + + ImGui::Begin("KeyMapper"); + ImGui::Combo("Context",&m_selected_context,contexts); + for (Binding b : m_keysmap.data()){ + ImGui::Text("%d",b.action); + ImGui::SameLine(50); + ImGui::Text("%d",b.key); + ImGui::SameLine(100); + ImGui::PushItemWidth(100); + ImGui::Combo("",&(b.type),types_binding); + ImGui::PopItemWidth(); + } + ImGui::End(); +} + + + +void KeyMapper::toggle() +{ + m_enabled = !m_enabled; + if(m_enabled){ + m_keysmap = getEngine().getInput()->getKeysMap(); + } +} diff --git a/src/keymapper.h b/src/keymapper.h new file mode 100644 index 0000000..541e014 --- /dev/null +++ b/src/keymapper.h @@ -0,0 +1,20 @@ +#ifndef KEYMAPPER_H +#define KEYMAPPER_H + +#include "scene/containernode.h" +#include "SparrowInput/keybindings.h" + +class KeyMapper : public ContainerNode +{ + bool m_enabled; + int m_selected_context; + IKeysMap m_keysmap; + + void gui(); +public: + KeyMapper(); + void update(); + void toggle(); +}; + +#endif // KEYMAPPER_H diff --git a/src/sparrowshell/scriptnode.cpp b/src/sparrowshell/scriptnode.cpp index 5703425..2a53c42 100644 --- a/src/sparrowshell/scriptnode.cpp +++ b/src/sparrowshell/scriptnode.cpp @@ -10,6 +10,7 @@ #include "SparrowSerializer/Version.h" #include "tools/utils.h" #include "editor.h" +#include "keymapper.h" #define LUA_DEFINE(var) S[#var]=var #define LUA_SET_FUN(var) m_script.set_function(#var,&ScriptNode::var,this);this->functions_name.push_back(#var); @@ -29,6 +30,7 @@ ScriptNode::ScriptNode() LUA_SET_FUN(rendering); LUA_SET_FUN(resourcePackEditor); LUA_SET_FUN(editor); + LUA_SET_FUN(keymapper); m_script.new_usertype("Engine", "time",&Engine::getTime @@ -118,3 +120,7 @@ void ScriptNode::resourcePackEditor(){ void ScriptNode::editor(){ this->getEngine().getEditor()->toggleEditor(); } + +void ScriptNode::keymapper(){ + this->getEngine().getKeyMapper()->toggle(); +} diff --git a/src/sparrowshell/scriptnode.h b/src/sparrowshell/scriptnode.h index 8cbe80d..726daab 100644 --- a/src/sparrowshell/scriptnode.h +++ b/src/sparrowshell/scriptnode.h @@ -28,6 +28,7 @@ public: void rendering(); void resourcePackEditor(); void editor(); + void keymapper(); }; #endif // SCRIPTNODE_H