diff --git a/.gitignore b/.gitignore index 24c79b9..9c21851 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ build* *.user +data/*.jpg +data/*.mtl +data/*.obj diff --git a/src/engine.cpp b/src/engine.cpp index fc4a5b2..fbe70f4 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -106,7 +106,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); -// scene->addObject(scene->getRootObject(), m_sparrowshell); + scene->addObject(scene->getRootObject(), m_sparrowshell); } void Engine::outputShell(std::string str) diff --git a/src/sparrowshell.cpp b/src/sparrowshell.cpp index 36ebbb1..ffce338 100644 --- a/src/sparrowshell.cpp +++ b/src/sparrowshell.cpp @@ -5,10 +5,12 @@ #include "scenetree.h" #include "mesh.h" #include "phongmaterial.h" +#include "tools/utils.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; SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m_input(input),m_position(glm::ivec2(0,0)) { @@ -17,7 +19,7 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m Mesh* mesh = new Mesh(); mesh->addRectangle2D(m_position,m_dimension); PhongMaterial *mat = new PhongMaterial(); - mat->diffuse = glm::vec3(0,0.5,0.5); + mat->diffuse = glm::vec3(0.1,0.1,0.1); mesh->setMaterial(mat); mesh->setDepth(-0.5); mesh->initGL(); @@ -31,6 +33,8 @@ void SparrowShell::out(std::string s) if (m_buffer.size() == BUFFER_MAX_LENGTH) m_buffer.pop_back(); m_buffer.push_front(s); + if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER) + m_resizeScrollBar = true; } void SparrowShell::scrollUp(){ @@ -55,13 +59,14 @@ 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(m_position,m_dimension); + mesh->addRectangle2D(glm::vec2(0),m_dimension); PhongMaterial *mat = new PhongMaterial(); - mat->diffuse = glm::vec3(1,0,0); + mat->diffuse = glm::vec3(0,0,0.5); mesh->setDepth(-0.4); mesh->setMaterial(mat); mesh->initGL(); m_mesh = new MeshNode(mesh); + utils::setPosition2D(m_mesh,m_position); m_shell->addChild(m_mesh); } @@ -69,10 +74,14 @@ void SparrowShell::ScrollBar::update(){ m_position.y = m_shell->m_position.y; m_dimension.y = m_shell->m_dimension.y; - if (m_shell->m_buffer.size() > BUFFER_DISPLAYED_NUMBER){ - float cran = ((float)m_shell->m_dimension.y/(float)m_shell->m_buffer.size()); - int indexCursor = m_shell->m_buffer.size()-(m_shell->m_index+SCROLLBAR_PIXEL_WIDTH); - m_position.y += (int)(cran * indexCursor); - m_dimension.y = (int)(cran * BUFFER_DISPLAYED_NUMBER); + float cran = ((float)m_shell->m_dimension.y/(float)m_shell->m_buffer.size()); + int indexCursor = m_shell->m_buffer.size()-(m_shell->m_index+BUFFER_DISPLAYED_NUMBER); + glm::ivec2 new_pos((int)m_position.x, (int) cran * indexCursor); + + if (m_shell->m_resizeScrollBar){ + glm::ivec2 new_dim(m_dimension.x,(int)(cran * BUFFER_DISPLAYED_NUMBER)); + utils::resize2D(m_mesh,m_dimension,new_dim); + m_shell->m_resizeScrollBar = false; } + utils::setPosition2D(m_mesh,new_pos); } diff --git a/src/sparrowshell.h b/src/sparrowshell.h index 64ac46a..414d03e 100644 --- a/src/sparrowshell.h +++ b/src/sparrowshell.h @@ -41,7 +41,7 @@ private: sf::Window* m_window; Input* m_input; int m_index = 0; - + bool m_resizeScrollBar = false; glm::ivec2 m_position; glm::ivec2 m_dimension; diff --git a/src/test/main.cpp b/src/test/main.cpp index b0d0af4..b1b725a 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -14,6 +14,7 @@ #include #include +#include #include @@ -27,14 +28,16 @@ int main(){ /* Exemple creation mesh 2D * - +*/ Mesh* mesh = new Mesh(); - mesh->addRectangle2D(50,50,100,100); + mesh->addRectangle2D(180, 400,5,5); PhongMaterial *mat = new PhongMaterial(); mat->diffuse = glm::vec3(1, 0.5, 0); mesh->setMaterial(mat); + mesh->setDepth(1); mesh->initGL(); -*/ + scene.addObject(scene.getRootObject(),new MeshNode(mesh)); +/* */ /* Exemple ajout d'un objet a la scene * @@ -54,11 +57,14 @@ int main(){ MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!")); scene.addObject(scene.getRootObject(),mnode)*/; + mnode = new MeshNode(fonte_des_neiges->getTextMesh("WOW", 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))); +// 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); + - 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); @@ -70,6 +76,13 @@ int main(){ 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 :"); + + for(int i = 0; i < 15; i++){ + engine.outputShell(std::to_string(i)); + } engine.setScene(&scene); engine.start(); diff --git a/src/tools/utils.cpp b/src/tools/utils.cpp index d777a7f..8bfc75f 100644 --- a/src/tools/utils.cpp +++ b/src/tools/utils.cpp @@ -1,4 +1,5 @@ #include "utils.h" +#include "scenetree.h" std::vector utils::split(const std::string &line, char sep){ std::vector tokens; @@ -10,3 +11,20 @@ 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){ + 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); +} + +void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){ + glm::mat4 tr = mnode->getTransform(); + glm::vec3 pos(tr[3]); + glm::vec2 ratio = new_dim / dim; + tr = glm::scale(tr, glm::vec3(1,ratio.y,1)); + glm::vec3 new_pos(tr[3]); + tr = glm::translate(tr,pos-new_pos); + mnode->setTransform(tr); +} diff --git a/src/tools/utils.h b/src/tools/utils.h index 7a2454c..eefd153 100644 --- a/src/tools/utils.h +++ b/src/tools/utils.h @@ -3,10 +3,15 @@ #include #include +#include + +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); } #endif // UTILS_H