From 2c451a8892907a883884375458e06086000c16de Mon Sep 17 00:00:00 2001 From: Lendemor Date: Tue, 13 Dec 2016 00:42:07 +0100 Subject: [PATCH] toggle working for textnode (TODO: check relative positioning) --- src/engine.cpp | 4 +- src/scene/graphicalcontainernode.h | 1 + src/scene/graphicalnode.cpp | 25 +++++++++++++ src/scene/graphicalnode.h | 7 ++++ src/sparrowshell/shellbuffer.cpp | 59 ++++++++++++++++-------------- src/sparrowshell/shellbuffer.h | 6 ++- src/sparrowshell/sparrowshell.cpp | 10 ++--- src/test/main.cpp | 8 ++-- src/tools/utils.cpp | 7 +--- src/tools/utils.h | 10 ++--- 10 files changed, 88 insertions(+), 49 deletions(-) diff --git a/src/engine.cpp b/src/engine.cpp index edb1950..eb7c2ef 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -96,8 +96,8 @@ void Engine::update() void Engine::start() { m_running = true; - for(int i = 0;i<5;i++) - m_sparrowshell->scrollUp(); +// for(int i = 0;i<5;i++) +// m_sparrowshell->scrollUp(); while(!m_input->isCloseRequested() && m_running) update(); } diff --git a/src/scene/graphicalcontainernode.h b/src/scene/graphicalcontainernode.h index a51c630..5b58d78 100644 --- a/src/scene/graphicalcontainernode.h +++ b/src/scene/graphicalcontainernode.h @@ -2,6 +2,7 @@ #define GRAPHICALCONTAINERNODE_H #include "graphicalnode.h" +#include "glm/vec2.hpp" #include "glm/mat4x4.hpp" #include diff --git a/src/scene/graphicalnode.cpp b/src/scene/graphicalnode.cpp index 28d0c92..cbdae05 100644 --- a/src/scene/graphicalnode.cpp +++ b/src/scene/graphicalnode.cpp @@ -46,6 +46,31 @@ void GraphicalNode::scale(const glm::vec3 &scaleFactor) m_transformChanged = true; } +void GraphicalNode::moveTo2D(const glm::vec2 &position) +{ + setTransform(glm::translate(m_transform,glm::vec3(position.x,position.y,0) - glm::vec3(m_transform[3]))); +} + +void GraphicalNode::resize2D(const glm::vec2 oldDimension, glm::vec2 newDimension) +{ + scale2D(glm::vec2(newDimension / oldDimension)); +} + +void GraphicalNode::scale2D(const glm::vec2 scaleFactor) +{ + setTransform(glm::scale(m_transform, glm::vec3(scaleFactor.x,scaleFactor.y,1))); +} + +void GraphicalNode::rotate2D(const glm::vec2 ¢er, float angle) +{ + setTransform(glm::rotate(m_transform,angle,glm::vec3(0,0,1))); +} + +void GraphicalNode::setDepth2D(float depth) +{ + // don't have access to depth here? :( +} + // setters void GraphicalNode::setTransform(const glm::mat4 &transform) { diff --git a/src/scene/graphicalnode.h b/src/scene/graphicalnode.h index d35adec..c020353 100644 --- a/src/scene/graphicalnode.h +++ b/src/scene/graphicalnode.h @@ -66,6 +66,13 @@ public: void rotate(float angle, const glm::vec3 &vector); void scale(const glm::vec3 &scaleFactor); + //2D tools: + void moveTo2D(const glm::vec2 &position); + void rotate2D(const glm::vec2 ¢er, float angle); + void scale2D(const glm::vec2 scaleFactor); + void resize2D(const glm::vec2 oldDimension, glm::vec2 newDimension); + void setDepth2D(float depth); + // this is used to synchronize a bullet rigidbody's transform with a GraphicalNode transform SparrowMotionState* getMotionState() { return &m_motionState; } }; diff --git a/src/sparrowshell/shellbuffer.cpp b/src/sparrowshell/shellbuffer.cpp index 79974d4..ab1fced 100644 --- a/src/sparrowshell/shellbuffer.cpp +++ b/src/sparrowshell/shellbuffer.cpp @@ -13,34 +13,39 @@ void ShellBuffer::toggleBuffer(){ void ShellBuffer::update() { TextNode* tnode; - glm::vec2 text_pos(0); + glm::vec2 text_pos(0,0); -// std::cout << m_children.size() << std::endl; - -// if (m_parent){ -// SparrowShell* shell = dynamic_cast(m_parent); -// if(shell && shell->isEnabled()) -// { -// for(unsigned int i = 0; i< size();i++) -// { -// tnode = (TextNode*) (*this)[i]; - // std::cout << tnode->getString() << std::endl; - // if (i >= m_index && i < m_index+SparrowShell::BUFFER_DISPLAYED_NUMBER) - // { - // tnode->moveTo(glm::vec3(text_pos,0)); - // text_pos.y += m_font_size; -// } -// else -// tnode->moveTo(glm::vec3(-100,-100,0)); -// } -// } -// } + SparrowShell* shell = dynamic_cast(m_parent); + if(shell->isEnabled()) + { + for(unsigned int i = 0; i< size();i++) + { + tnode = (TextNode*) (*this)[i]; + if (i >= m_index && i < m_index+SparrowShell::BUFFER_DISPLAYED_NUMBER) + { + tnode->moveTo2D(text_pos); + text_pos.y += m_font_size; +// std::cout << tnode->getString() << ": " << text_pos.x << " " << text_pos.y << std::endl; + } + else + tnode->moveTo2D(glm::vec2(-100,-100)); + } + } } -void ShellBuffer::push(TextNode* s){ - if (m_children.size() >= m_max_size){ - m_children[m_zero_offset++] = s; - m_zero_offset %= m_max_size; - }else - m_children.push_back(s); +void ShellBuffer::push(TextNode* tnode){ + if(tnode != nullptr) + { + if(m_scene != nullptr) + tnode->setSceneTree(m_scene); + + if (m_children.size() >= m_max_size){ + m_children[m_zero_offset++] = tnode; + m_zero_offset %= m_max_size; + }else + m_children.push_back(tnode); + tnode->m_parent = this; + tnode->setParentTransform(m_transform); + tnode->setParentVisible(isVisible()); + } } diff --git a/src/sparrowshell/shellbuffer.h b/src/sparrowshell/shellbuffer.h index f56d060..cb6e4b5 100644 --- a/src/sparrowshell/shellbuffer.h +++ b/src/sparrowshell/shellbuffer.h @@ -3,6 +3,7 @@ #include "scene/graphicalcontainernode.h" + class TextNode; class ShellBuffer : public GraphicalContainerNode { @@ -12,7 +13,10 @@ private: float m_font_size; unsigned int m_index = 0; public: - ShellBuffer(int buffer_size):m_max_size(buffer_size), m_zero_offset(0),m_font_size(16.f){m_visible = false;} + ShellBuffer(int buffer_size):m_max_size(buffer_size), m_zero_offset(0),m_font_size(16.f){ + m_visible = false; + moveTo2D(glm::vec2(0,0)); + } GraphicalNode* operator[](int i){return m_children[(m_zero_offset+i)%m_max_size];} void push(TextNode*); unsigned int size(){return m_children.size();} diff --git a/src/sparrowshell/sparrowshell.cpp b/src/sparrowshell/sparrowshell.cpp index a33f630..8c7f724 100644 --- a/src/sparrowshell/sparrowshell.cpp +++ b/src/sparrowshell/sparrowshell.cpp @@ -20,13 +20,15 @@ const float SparrowShell::SHELL_DEPTH = 10; SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window), m_input(input), - m_position(glm::ivec2(0,0)), + m_position(glm::ivec2(10,0)), m_buffer(new ShellBuffer(BUFFER_MAX_LENGTH)) { sf::Vector2u size = m_window->getSize(); m_dimension = glm::ivec2(size.x,size.y/2); m_buffer->setFontSize(16.f); + moveTo2D(glm::vec2(m_position)); + Font* fonte_des_neiges = Loader::loadFont("../data/consolas.fnt","../data/consolas.png"); RESOURCE_ADD(fonte_des_neiges,Font,"shellfont"); @@ -66,10 +68,8 @@ void SparrowShell::out(std::string s) TextNode* tnode = shellfont->getTextNode(s,glm::vec3(0.7,1,0.3),m_buffer->getFontSize(),false); tnode->setDepth(SHELL_DEPTH+1); m_buffer->push(tnode); - // if(m_shellEnabled) - // m_scene->addToIndex(tnode); -// if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_NUMBER) -// m_resizeBuffer = true; + if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_NUMBER) + m_resizeBuffer = true; } void SparrowShell::scrollUp(){ diff --git a/src/test/main.cpp b/src/test/main.cpp index bb68e04..a1c7324 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -165,15 +165,15 @@ int main(){ scene->getRootObject()->addChild(sunLight); // terrain - generateTerrain(scene, engine.getPhysics()); + // generateTerrain(scene, engine.getPhysics()); // shell output tests engine.outputShell("Hello World!"); engine.outputShell("Starting test :"); - for(int i = 0; i < 17; i++){ - engine.outputShell(std::to_string(i)); - } +// for(int i = 0; i < 17; i++){ +// engine.outputShell(std::to_string(i)); +// } // preparing shaders and launching the engine scene->updateShaders(); diff --git a/src/tools/utils.cpp b/src/tools/utils.cpp index aeda53a..bb55e71 100644 --- a/src/tools/utils.cpp +++ b/src/tools/utils.cpp @@ -14,14 +14,10 @@ std::vector utils::split(const std::string &line, char sep){ tokens.push_back(line.substr(start)); return tokens; } - +/* void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){ const glm::mat4 &tr = mnode->getTransform(); - //mnode->moveTo(pos) -// glm::vec3 v1(pos.x,pos.y,0); -// glm::vec3 v2(tr[3]); mnode->setTransform(glm::translate(tr,glm::vec3(pos.x,pos.y,0) - glm::vec3(tr[3]))); -// mnode->setTransform(glm::translate(tr,v1 - v2)); } void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){ @@ -45,3 +41,4 @@ void setDepth2D(MeshNode* mnode, float depth){ //Mesh* mesh; //= getMesh here //mesh.setDepth(depth); } +*/ diff --git a/src/tools/utils.h b/src/tools/utils.h index addf3bd..d17cfcd 100644 --- a/src/tools/utils.h +++ b/src/tools/utils.h @@ -10,11 +10,11 @@ class MeshNode; namespace utils { std::vector split(const std::string &line, char sep); -void setPosition2D(MeshNode*, glm::vec2); -void resize2D(MeshNode*, glm::vec2, glm::vec2); -void scale2D(MeshNode*, glm::vec2); -void rotate2D(MeshNode* mnode, glm::vec2 center, float angle); -void setDepth2D(MeshNode* mnode, float depth); +//void setPosition2D(MeshNode*, glm::vec2); +//void resize2D(MeshNode*, glm::vec2, glm::vec2); +//void scale2D(MeshNode*, glm::vec2); +//void rotate2D(MeshNode* mnode, glm::vec2 center, float angle); +//void setDepth2D(MeshNode* mnode, float depth); } #endif // UTILS_H