toggle working for textnode (TODO: check relative positioning)

This commit is contained in:
Lendemor 2016-12-13 00:42:07 +01:00
parent c105feeee9
commit 2c451a8892
10 changed files with 88 additions and 49 deletions

View File

@ -96,8 +96,8 @@ void Engine::update()
void Engine::start() void Engine::start()
{ {
m_running = true; m_running = true;
for(int i = 0;i<5;i++) // for(int i = 0;i<5;i++)
m_sparrowshell->scrollUp(); // m_sparrowshell->scrollUp();
while(!m_input->isCloseRequested() && m_running) while(!m_input->isCloseRequested() && m_running)
update(); update();
} }

View File

@ -2,6 +2,7 @@
#define GRAPHICALCONTAINERNODE_H #define GRAPHICALCONTAINERNODE_H
#include "graphicalnode.h" #include "graphicalnode.h"
#include "glm/vec2.hpp"
#include "glm/mat4x4.hpp" #include "glm/mat4x4.hpp"
#include <vector> #include <vector>

View File

@ -46,6 +46,31 @@ void GraphicalNode::scale(const glm::vec3 &scaleFactor)
m_transformChanged = true; 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 &center, 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 // setters
void GraphicalNode::setTransform(const glm::mat4 &transform) void GraphicalNode::setTransform(const glm::mat4 &transform)
{ {

View File

@ -66,6 +66,13 @@ public:
void rotate(float angle, const glm::vec3 &vector); void rotate(float angle, const glm::vec3 &vector);
void scale(const glm::vec3 &scaleFactor); void scale(const glm::vec3 &scaleFactor);
//2D tools:
void moveTo2D(const glm::vec2 &position);
void rotate2D(const glm::vec2 &center, 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 // this is used to synchronize a bullet rigidbody's transform with a GraphicalNode transform
SparrowMotionState* getMotionState() { return &m_motionState; } SparrowMotionState* getMotionState() { return &m_motionState; }
}; };

View File

@ -13,34 +13,39 @@ void ShellBuffer::toggleBuffer(){
void ShellBuffer::update() void ShellBuffer::update()
{ {
TextNode* tnode; TextNode* tnode;
glm::vec2 text_pos(0); glm::vec2 text_pos(0,0);
// std::cout << m_children.size() << std::endl; SparrowShell* shell = dynamic_cast<SparrowShell*>(m_parent);
if(shell->isEnabled())
// if (m_parent){ {
// SparrowShell* shell = dynamic_cast<SparrowShell*>(m_parent); for(unsigned int i = 0; i< size();i++)
// if(shell && shell->isEnabled()) {
// { tnode = (TextNode*) (*this)[i];
// for(unsigned int i = 0; i< size();i++) if (i >= m_index && i < m_index+SparrowShell::BUFFER_DISPLAYED_NUMBER)
// { {
// tnode = (TextNode*) (*this)[i]; tnode->moveTo2D(text_pos);
// std::cout << tnode->getString() << std::endl; text_pos.y += m_font_size;
// if (i >= m_index && i < m_index+SparrowShell::BUFFER_DISPLAYED_NUMBER) // std::cout << tnode->getString() << ": " << text_pos.x << " " << text_pos.y << std::endl;
// { }
// tnode->moveTo(glm::vec3(text_pos,0)); else
// text_pos.y += m_font_size; tnode->moveTo2D(glm::vec2(-100,-100));
// } }
// else }
// tnode->moveTo(glm::vec3(-100,-100,0));
// }
// }
// }
} }
void ShellBuffer::push(TextNode* s){ void ShellBuffer::push(TextNode* tnode){
if (m_children.size() >= m_max_size){ if(tnode != nullptr)
m_children[m_zero_offset++] = s; {
m_zero_offset %= m_max_size; if(m_scene != nullptr)
}else tnode->setSceneTree(m_scene);
m_children.push_back(s);
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());
}
} }

View File

@ -3,6 +3,7 @@
#include "scene/graphicalcontainernode.h" #include "scene/graphicalcontainernode.h"
class TextNode; class TextNode;
class ShellBuffer : public GraphicalContainerNode { class ShellBuffer : public GraphicalContainerNode {
@ -12,7 +13,10 @@ private:
float m_font_size; float m_font_size;
unsigned int m_index = 0; unsigned int m_index = 0;
public: 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];} GraphicalNode* operator[](int i){return m_children[(m_zero_offset+i)%m_max_size];}
void push(TextNode*); void push(TextNode*);
unsigned int size(){return m_children.size();} unsigned int size(){return m_children.size();}

View File

@ -20,13 +20,15 @@ const float SparrowShell::SHELL_DEPTH = 10;
SparrowShell::SparrowShell(sf::Window* window, Input* input): SparrowShell::SparrowShell(sf::Window* window, Input* input):
m_window(window), m_window(window),
m_input(input), m_input(input),
m_position(glm::ivec2(0,0)), m_position(glm::ivec2(10,0)),
m_buffer(new ShellBuffer(BUFFER_MAX_LENGTH)) m_buffer(new ShellBuffer(BUFFER_MAX_LENGTH))
{ {
sf::Vector2u size = m_window->getSize(); sf::Vector2u size = m_window->getSize();
m_dimension = glm::ivec2(size.x,size.y/2); m_dimension = glm::ivec2(size.x,size.y/2);
m_buffer->setFontSize(16.f); m_buffer->setFontSize(16.f);
moveTo2D(glm::vec2(m_position));
Font* fonte_des_neiges = Loader::loadFont("../data/consolas.fnt","../data/consolas.png"); Font* fonte_des_neiges = Loader::loadFont("../data/consolas.fnt","../data/consolas.png");
RESOURCE_ADD(fonte_des_neiges,Font,"shellfont"); 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); TextNode* tnode = shellfont->getTextNode(s,glm::vec3(0.7,1,0.3),m_buffer->getFontSize(),false);
tnode->setDepth(SHELL_DEPTH+1); tnode->setDepth(SHELL_DEPTH+1);
m_buffer->push(tnode); m_buffer->push(tnode);
// if(m_shellEnabled) if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_NUMBER)
// m_scene->addToIndex(tnode); m_resizeBuffer = true;
// if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_NUMBER)
// m_resizeBuffer = true;
} }
void SparrowShell::scrollUp(){ void SparrowShell::scrollUp(){

View File

@ -165,15 +165,15 @@ int main(){
scene->getRootObject()->addChild(sunLight); scene->getRootObject()->addChild(sunLight);
// terrain // terrain
generateTerrain(scene, engine.getPhysics()); // generateTerrain(scene, engine.getPhysics());
// shell output tests // shell output tests
engine.outputShell("Hello World!"); engine.outputShell("Hello World!");
engine.outputShell("Starting test :"); engine.outputShell("Starting test :");
for(int i = 0; i < 17; i++){ // for(int i = 0; i < 17; i++){
engine.outputShell(std::to_string(i)); // engine.outputShell(std::to_string(i));
} // }
// preparing shaders and launching the engine // preparing shaders and launching the engine
scene->updateShaders(); scene->updateShaders();

View File

@ -14,14 +14,10 @@ std::vector<std::string> utils::split(const std::string &line, char sep){
tokens.push_back(line.substr(start)); tokens.push_back(line.substr(start));
return tokens; return tokens;
} }
/*
void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){ void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){
const glm::mat4 &tr = mnode->getTransform(); 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,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){ 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* mesh; //= getMesh here
//mesh.setDepth(depth); //mesh.setDepth(depth);
} }
*/

View File

@ -10,11 +10,11 @@ class MeshNode;
namespace utils namespace utils
{ {
std::vector<std::string> split(const std::string &line, char sep); std::vector<std::string> split(const std::string &line, char sep);
void setPosition2D(MeshNode*, glm::vec2); //void setPosition2D(MeshNode*, glm::vec2);
void resize2D(MeshNode*, glm::vec2, glm::vec2); //void resize2D(MeshNode*, glm::vec2, glm::vec2);
void scale2D(MeshNode*, glm::vec2); //void scale2D(MeshNode*, glm::vec2);
void rotate2D(MeshNode* mnode, glm::vec2 center, float angle); //void rotate2D(MeshNode* mnode, glm::vec2 center, float angle);
void setDepth2D(MeshNode* mnode, float depth); //void setDepth2D(MeshNode* mnode, float depth);
} }
#endif // UTILS_H #endif // UTILS_H