diff --git a/src/engine.cpp b/src/engine.cpp index eed2c55..c12e99f 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -67,6 +67,7 @@ void Engine::update() m_timeStamp = (unsigned int) m_clock->getElapsedTime().asMilliseconds(); // update Events m_input->updateEvents(); + // update Scene m_scene->update(); // update Physics @@ -108,7 +109,7 @@ void Engine::setScene(SceneTree *scene) m_scene = scene; m_renderer->setScene(m_scene); m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y); - m_sparrowshell->setScene(scene); + m_sparrowshell->setSceneTree(scene); scene->addObject(scene->getRootObject(), m_sparrowshell); } diff --git a/src/scene/meshnode.cpp b/src/scene/meshnode.cpp index 84ffb34..0df15ee 100644 --- a/src/scene/meshnode.cpp +++ b/src/scene/meshnode.cpp @@ -10,3 +10,12 @@ void MeshNode::setSceneTree(SceneTree *tree){ SceneNode::setSceneTree(tree); tree->addToIndex(this); } + +void MeshNode::toggleVisibility(){ + m_visible = !m_visible; + if(m_visible){ + m_scene->addToIndex(this); + }else{ + m_scene->removeFromIndex(this); + } +} diff --git a/src/scene/meshnode.h b/src/scene/meshnode.h index 83f7df8..45a60cd 100644 --- a/src/scene/meshnode.h +++ b/src/scene/meshnode.h @@ -12,6 +12,7 @@ class MeshNode : public SceneNode { GeometryNode geometry; + bool m_visible; public: // temp glm::mat4 m_movement; @@ -31,6 +32,8 @@ public: const glm::mat4& getTransform() { return geometry.modelMatrix; } void setDepth(float depth); + void toggleVisibility(); + GeometryNode* getGeometryNode() { return &geometry; } }; diff --git a/src/scene/scenenode.h b/src/scene/scenenode.h index bbb9563..95f3c2e 100644 --- a/src/scene/scenenode.h +++ b/src/scene/scenenode.h @@ -10,10 +10,12 @@ class SceneNode public: SceneNode* m_parent; SceneTree* m_scene; +// bool m_enabled; virtual void update() = 0; virtual Light* getLight() {return nullptr;} virtual GeometryNode* getGeometryNode() {return nullptr;} virtual void setSceneTree(SceneTree* tree){m_scene = tree;} +// virtual void toggleNode(){m_enabled = !m_enabled;} }; #endif // SCENENODE_H diff --git a/src/sparrowshell.cpp b/src/sparrowshell.cpp index 91782b2..2498b8f 100644 --- a/src/sparrowshell.cpp +++ b/src/sparrowshell.cpp @@ -62,49 +62,79 @@ void SparrowShell::scrollDown(){ } } -void SparrowShell::update() -{ - //Font *shellfont = RESOURCE_GET(Font,"shellfont"); +void SparrowShell::toggleShell(){ + m_shellEnabled = !m_shellEnabled; +// if (m_shellEnabled){ +// for(unsigned int i = 0;iaddToIndex(m_buffer[i]); +// }else{ +// for(unsigned int i = 0;iremoveFromIndex(m_buffer[i]); +// } + for(auto child : m_children){ + MeshNode* meshchild = dynamic_cast(child); + if(meshchild) + meshchild->toggleVisibility(); + } + m_buffer.toggleBuffer(); + m_background->toggleVisibility(); +} + +void SparrowShell::update(){ TextNode* tnode; glm::vec2 text_pos(0); -// if(m_indexMoved){ -// unsigned int count_stop = m_buffer.size() > BUFFER_DISPLAYED_NUMBER ? m_index + BUFFER_DISPLAYED_NUMBER: m_buffer.size(); - //move position of shellBuffer - // position textnode inside shellBuffer - for(unsigned int i = 0; i= m_index && i < m_index + BUFFER_DISPLAYED_NUMBER){ - utils::setPosition2D(tnode,text_pos); - text_pos.y += m_buffer.getFontSize(); - m_currentScene->addToIndex(tnode); - // m_currentScene->addObject(this,mnode); + for(auto action : m_input->getActions()){ + if(action == 15){ + toggleShell(); + } + } + //move position of shellBuffer + // position textnode inside shellBuffer + + if(m_shellEnabled){ + for(unsigned int i = 0; i= m_index && i < m_index + BUFFER_DISPLAYED_NUMBER){ + utils::setPosition2D(tnode,text_pos); + text_pos.y += m_buffer.getFontSize(); + m_scene->addToIndex(tnode); + } } } -// m_indexMoved = false; - // } m_scrollbar.update(); } +void SparrowShell::ShellBuffer::toggleBuffer(){ + for(auto child : m_children){ + MeshNode* meshchild = dynamic_cast(child); + if(meshchild) + meshchild->toggleVisibility(); + } +} + + void SparrowShell::ShellBuffer::push(TextNode* s){ if (m_children.size() >= m_max_size){ m_children[m_zero_offset++] = s; m_zero_offset %= m_max_size; - } - else + }else m_children.push_back(s); } SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){ m_position = glm::ivec2(m_shell->m_dimension.x - SparrowShell::SCROLLBAR_PIXEL_WIDTH,0); m_dimension = glm::ivec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH,m_shell->m_dimension.y); + Mesh* mesh = new Mesh(); mesh->addRectangle2D(glm::vec2(0),m_dimension); PhongMaterial *mat = new PhongMaterial(); mat->diffuse = glm::vec3(0,0,0.5); + mesh->setDepth(SHELL_DEPTH+1); mesh->setMaterial(mat); mesh->initGL(); + m_mesh = new MeshNode(mesh); utils::setPosition2D(m_mesh,m_position); m_shell->addChild(m_mesh); diff --git a/src/sparrowshell.h b/src/sparrowshell.h index bba1bd3..be32cbd 100644 --- a/src/sparrowshell.h +++ b/src/sparrowshell.h @@ -23,7 +23,6 @@ private: glm::ivec2 m_position; glm::ivec2 m_dimension; MeshNode *m_mesh; - //TODO : Add rectangle mesh public: ScrollBar(){} ScrollBar(SparrowShell* shell); @@ -40,6 +39,7 @@ private: SceneNode* operator[](int i){return m_children[(m_zero_offset+i)%m_max_size];} void push(TextNode*); unsigned int size(){return m_children.size();} + void toggleBuffer(); // if this font_size is scaling down, sizes which are power of 2 render better. void setFontSize(float font_size){m_font_size = font_size;} @@ -53,7 +53,6 @@ private: sf::Window* m_window; Input* m_input; - SceneTree* m_currentScene; glm::ivec2 m_position; glm::ivec2 m_dimension; @@ -61,7 +60,7 @@ private: unsigned int m_index = 0; bool m_resizeScrollBar = false; bool m_indexMoved = false; - + bool m_shellEnabled = false; //textMesh MeshNode* m_background; ScrollBar m_scrollbar; @@ -70,10 +69,12 @@ public: SparrowShell(sf::Window*, Input*); void update(); - void setScene(SceneTree *scene){m_currentScene = scene;} +// void setScene(SceneTree *scene){m_currentScene = scene;} void scrollUp(); void scrollDown(); + + void toggleShell(); void out(std::string); }; diff --git a/src/system.cpp b/src/system.cpp index ef8d0de..03cbbf8 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -19,10 +19,10 @@ void InputSystem::initInput(sf::Window *window){ } void InputSystem::update(){ - int action; - Message* message; - while ((action = m_input->getAction()) != NO_ACTION){ - message = new Message(std::to_string(action),SystemType::INPUT_SYSTEM); - m_msgBus->postMessage(message); - } +// int action; +// Message* message; +// while ((action = m_input->getAction()) != NO_ACTION){ +// message = new Message(std::to_string(action),SystemType::INPUT_SYSTEM); +// m_msgBus->postMessage(message); +// } } diff --git a/src/test/main.cpp b/src/test/main.cpp index 3205927..6d8b0da 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -19,6 +19,21 @@ #include + +class myKeysMap : public IKeysMap{ +public: + enum{TOGGLE_CONSOLE = 15}; + + myKeysMap(){ + Binding b; + b.action = TOGGLE_CONSOLE; + b.key = sf::Keyboard::F3; + b.type = IKeysMap::PRESSED; + + keys.push_back(b); + } +}; + int main(){ Engine engine; @@ -94,6 +109,16 @@ int main(){ engine.outputShell(std::to_string(i)); } + + Input* input = engine.getInput(); + std::vector v = {myKeysMap::TOGGLE_CONSOLE}; + input->addContext(Context("default",v)); + + IKeysMap km = myKeysMap(); + + input->setKeysMap(km); + input->setCurrentContext("default"); + input->updateKeyBindings(); engine.start(); /* GraphNode n1 = GraphNode();