From 7eb5994405050ba586aa39d036106808a104b154 Mon Sep 17 00:00:00 2001 From: Lendemor Date: Tue, 26 Jul 2016 19:11:37 +0200 Subject: [PATCH] text doesn't appear in sparrowshell --- src/sparrowshell.cpp | 45 +++++++++++++++++++++++++++++++++----------- src/sparrowshell.h | 22 ++++++++++++++++++---- src/test/main.cpp | 39 +++++++++++++++++++++++--------------- src/tools/font.h | 1 + src/tools/utils.cpp | 23 +++++++++++++++------- src/tools/utils.h | 2 ++ 6 files changed, 95 insertions(+), 37 deletions(-) diff --git a/src/sparrowshell.cpp b/src/sparrowshell.cpp index 854d800..c4a9d72 100644 --- a/src/sparrowshell.cpp +++ b/src/sparrowshell.cpp @@ -6,13 +6,18 @@ #include "mesh.h" #include "phongmaterial.h" #include "tools/utils.h" +#include "tools/font.h" const unsigned int SparrowShell::BUFFER_MAX_LENGTH = 50; const unsigned int SparrowShell::BUFFER_DISPLAYED_NUMBER = 10; const unsigned int SparrowShell::SCROLLBAR_PIXEL_WIDTH = 10; -bool test = true; +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)) +SparrowShell::SparrowShell(sf::Window* window, Input* input): + m_window(window), + m_input(input), + m_position(glm::ivec2(0,0)), + m_buffer(ShellBuffer(BUFFER_MAX_LENGTH)) { sf::Vector2u size = m_window->getSize(); m_dimension = glm::ivec2(size.x,size.y/2); @@ -20,8 +25,9 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m mesh->addRectangle2D(m_position,m_dimension); PhongMaterial *mat = new PhongMaterial(); mat->diffuse = glm::vec3(0.1,0.1,0.1); + mat->m_opacity = 0.5; mesh->setMaterial(mat); - mesh->setDepth(-0.5); + mesh->setDepth(SHELL_DEPTH); mesh->initGL(); m_background = new MeshNode(mesh); this->addChild(m_background); @@ -30,33 +36,50 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m void SparrowShell::out(std::string s) { - if (m_buffer.size() == BUFFER_MAX_LENGTH) - m_buffer.pop_back(); - m_buffer.push_front(s); + m_buffer.push(s); if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER) m_resizeScrollBar = true; } void SparrowShell::scrollUp(){ if (m_index + BUFFER_DISPLAYED_NUMBER < m_buffer.size()) m_index++; - std::cout << "scroll up" << std::endl; +// std::cout << "scroll up" << std::endl; } void SparrowShell::scrollDown(){ if (m_index > 0) m_index--; - std::cout << "scroll up" << std::endl; +// std::cout << "scroll down" << std::endl; } void SparrowShell::update() { //TODO : update TextMesh + Font *shellfont = RESOURCE_GET(Font,"shellfont"); + MeshNode* mnode; + glm::vec2 text_pos(0); + //std::vector textMeshes; + for(auto textMesh: m_textMeshes) + removeChild(textMesh); + m_textMeshes.clear(); + for(unsigned int i = m_index;igetTextMesh(m_buffer[i],glm::vec3(0.7,1,0.3))); + utils::setPosition2D(mnode,text_pos); + text_pos.y += shellfont->getLineHeight(); + m_textMeshes.push_back(mnode); + addChild(mnode); + } m_scrollbar.update(); } -SparrowShell::ScrollBar::ScrollBar(){ - +void SparrowShell::ShellBuffer::push(std::string s){ + if (m_buffer.size() >= m_size) + m_buffer[m_zero_offset++] = s; + else + m_buffer.push_back(s); } +//SparrowShell::ScrollBar::ScrollBar(); + 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); @@ -64,7 +87,7 @@ SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){ mesh->addRectangle2D(glm::vec2(0),m_dimension); PhongMaterial *mat = new PhongMaterial(); mat->diffuse = glm::vec3(0,0,0.5); - mesh->setDepth(-0.4); + mesh->setDepth(SHELL_DEPTH+1); mesh->setMaterial(mat); mesh->initGL(); m_mesh = new MeshNode(mesh); diff --git a/src/sparrowshell.h b/src/sparrowshell.h index 414d03e..1860ae1 100644 --- a/src/sparrowshell.h +++ b/src/sparrowshell.h @@ -28,22 +28,36 @@ private: //TODO : Add rectangle mesh public: - ScrollBar(); + ScrollBar(){} ScrollBar(SparrowShell* shell); void update(); }; + class ShellBuffer{ + private: + std::vector m_buffer; + int m_zero_offset; + unsigned int m_size; + public: + ShellBuffer(int size):m_size(size){} + std::string& operator[](int i){return m_buffer[m_zero_offset+i%m_size];} + void push(std::string); + unsigned int size(){return m_size;} + }; + static const unsigned int BUFFER_MAX_LENGTH; static const unsigned int BUFFER_DISPLAYED_NUMBER; static const unsigned int SCROLLBAR_PIXEL_WIDTH; + static const float SHELL_DEPTH; - std::list m_buffer; sf::Window* m_window; Input* m_input; - int m_index = 0; - bool m_resizeScrollBar = false; glm::ivec2 m_position; glm::ivec2 m_dimension; + std::vector m_textMeshes; + ShellBuffer m_buffer; + int m_index = 0; + bool m_resizeScrollBar = false; //textMesh MeshNode* m_background; diff --git a/src/test/main.cpp b/src/test/main.cpp index 35791bb..4a024c8 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -27,7 +27,7 @@ int main(){ SceneTree scene; /* Exemple creation mesh 2D - **/ + * Mesh* mesh = new Mesh(); mesh->addRectangle2D(180, 400,10,64); PhongMaterial *mat = new PhongMaterial(); @@ -36,7 +36,7 @@ int main(){ mesh->setDepth(1); mesh->initGL(); scene.addObject(scene.getRootObject(),new MeshNode(mesh)); - /**/ + */ /* Exemple ajout d'un objet a la scene * @@ -55,25 +55,34 @@ int main(){ MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!")); scene.addObject(scene.getRootObject(),mnode)*/; - mnode = new MeshNode(fonte_des_neiges->getTextMesh("Portez ce vieux whisky au juge blond qui fume.", glm::vec3(0.5, 0.7, 0.2))); +// mnode = new MeshNode(fonte_des_neiges->getTextMesh("Portez ce vieux whisky au juge blond qui fume.", glm::vec3(0.5, 0.7, 0.2))); // mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(70, 30, 0)), 0.4f, glm::vec3(0, 0, 1))); - utils::setPosition2D(mnode,glm::vec2(180, 400)); - scene.addObject(scene.getRootObject(),mnode); +// utils::setPosition2D(mnode,glm::vec2(0, 400)); + // utils::rotate2D(mnode, glm::vec2(10,10),0.5); +// scene.addObject(scene.getRootObject(),mnode); + mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2))); + + utils::setPosition2D(mnode,glm::vec2(200, 170)); + utils::rotate2D(mnode, glm::vec2(0),-0.5); + + // mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1))); + scene.addObject(scene.getRootObject(),mnode); -/* mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2))); + mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2))); mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1))); scene.addObject(scene.getRootObject(),mnode); + + + // mnode = new MeshNode(fonte_des_neiges->getTextMesh("Very font", glm::vec3(0.7, 0.2, 0.8))); + // mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(180, 400, 0)), 0.1f, glm::vec3(0, 0, 1))); + // scene.addObject(scene.getRootObject(),mnode); - mnode = new MeshNode(fonte_des_neiges->getTextMesh("Very font", glm::vec3(0.7, 0.2, 0.8))); - mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(180, 400, 0)), 0.1f, glm::vec3(0, 0, 1))); - scene.addObject(scene.getRootObject(),mnode); - - mnode = new MeshNode(fonte_des_neiges->getTextMesh("Much animation", glm::vec3(0.3, 0.3, 0.8))); - mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0))); - mnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(580, 280, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-580, -280, 0)); - scene.addObject(scene.getRootObject(),mnode); -*/ + // mnode = new MeshNode(fonte_des_neiges->getTextMesh("Much animation", glm::vec3(0.3, 0.3, 0.8))); + // mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0))); + // mnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(580, 280, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-580, -280, 0)); + // scene.addObject(scene.getRootObject(),mnode); + engine.outputShell("Hello World!"); engine.outputShell("Starting test :"); diff --git a/src/tools/font.h b/src/tools/font.h index f81449f..3f93ef4 100644 --- a/src/tools/font.h +++ b/src/tools/font.h @@ -24,6 +24,7 @@ public: void addCharInfo(wchar_t character, CharInfo character_info){ m_charTable[character] = character_info; } void setNbChar(int nbchar){m_nbChar =nbchar;} void setLineHeight(int line_h){m_lineHeight = line_h;} + int getLineHeight(){return m_lineHeight;} void setBase(int base){m_base = base;} void setAntiAnliasing(bool antialiasing){m_antiAliasing = antialiasing;} void setScale(glm::vec2 scale){m_scale = scale;} diff --git a/src/tools/utils.cpp b/src/tools/utils.cpp index 054dcad..28ee472 100644 --- a/src/tools/utils.cpp +++ b/src/tools/utils.cpp @@ -13,19 +13,28 @@ std::vector utils::split(const std::string &line, char sep){ } void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){ - glm::mat4 tr = mnode->getTransform(); - glm::vec3 vpos(pos.x,pos.y,0); - tr = glm::translate(tr,vpos - glm::vec3(tr[3])); - mnode->setTransform(tr); + const glm::mat4 &tr = mnode->getTransform(); + mnode->setTransform(glm::translate(tr,glm::vec3(pos.x,pos.y,0) - glm::vec3(tr[3]))); } void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){ - glm::vec2 ratio(new_dim / dim); - scale2D(mnode,ratio); + scale2D(mnode,glm::vec2(new_dim / dim)); } void utils::scale2D(MeshNode* mnode, glm::vec2 ratio){ + mnode->setTransform(glm::scale(mnode->getTransform(), glm::vec3(ratio.x,ratio.y,1))); +} + +void utils::rotate2D(MeshNode* mnode, glm::vec2 center, float angle){ glm::mat4 tr = mnode->getTransform(); - tr = glm::scale(tr, glm::vec3(ratio.x,ratio.y,1)); + //glm::vec3 pos(tr[3]); + //tr = glm::translate(tr,pos-glm::vec3(center.x,center.y,0)); + tr = glm::rotate(mnode->getTransform(),angle,glm::vec3(0,0,1)); + //tr = glm::translate(tr,glm::vec3(center.x,center.y,0)-pos ); mnode->setTransform(tr); } + +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 a56477c..addf3bd 100644 --- a/src/tools/utils.h +++ b/src/tools/utils.h @@ -13,6 +13,8 @@ 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); } #endif // UTILS_H