Text dissapeared

This commit is contained in:
Lendemor 2016-12-04 15:40:34 +01:00
parent ea06b027f8
commit 2e4af8852d
8 changed files with 74 additions and 55 deletions

View File

@ -6,10 +6,12 @@
class TextNode : public MeshNode
{
private:
std::string m_string;
float m_fontSize;
public:
TextNode(Mesh* mesh,float fontSize) : MeshNode(mesh),m_fontSize(fontSize) {}
TextNode(Mesh* mesh,std::string s,float fontSize) : MeshNode(mesh),m_string(s),m_fontSize(fontSize) {}
float getFontSize(){return m_fontSize;}
std::string getString(){return m_string;}
};
#endif // TEXTNODE_H

View File

@ -24,6 +24,7 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input):
sf::Vector2u size = m_window->getSize();
m_dimension = glm::ivec2(size.x,size.y/2);
Mesh* mesh = new Mesh();
m_buffer.setFontSize(12.f);
mesh->addRectangle2D(m_position,m_dimension);
PhongMaterial *mat = new PhongMaterial();
mat->diffuse = glm::vec3(0.1,0.1,0.1);
@ -38,7 +39,11 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input):
void SparrowShell::out(std::string s)
{
m_buffer.push(s);
Font *shellfont = RESOURCE_GET(Font,"shellfont");
TextNode* tnode = shellfont->getTextNode(s,glm::vec3(0.7,1,0.3),m_buffer.getFontSize());
tnode->setDepth(SHELL_DEPTH+1);
// m_currentScene->addToIndex(tnode);
m_buffer.push(tnode);
if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER)
m_resizeScrollBar = true;
}
@ -59,34 +64,35 @@ void SparrowShell::scrollDown(){
void SparrowShell::update()
{
Font *shellfont = RESOURCE_GET(Font,"shellfont");
TextNode* mnode;
//Font *shellfont = RESOURCE_GET(Font,"shellfont");
TextNode* tnode;
glm::vec2 text_pos(0);
//std::vector<MeshNode*> textMeshes;
if(m_indexMoved){
for(auto textMesh: m_textMeshes)
m_currentScene->removeObject(this,textMesh);
m_textMeshes.clear();
for(unsigned int i = m_index;i<m_index+BUFFER_DISPLAYED_NUMBER;i++){
mnode = shellfont->getTextNode(m_buffer[i],glm::vec3(0.7,1,0.3),12.f);
utils::setPosition2D((TextNode*)mnode,text_pos);
text_pos.y += shellfont->getLineHeight();
mnode->setDepth(SHELL_DEPTH+1);
m_textMeshes.push_back(mnode);
m_currentScene->addObject(this,mnode);
// 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_buffer.size(); i++){
tnode = (TextNode*)m_buffer[i];
if (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);
}
m_indexMoved = false;
}
// m_indexMoved = false;
// }
m_scrollbar.update();
}
void SparrowShell::ShellBuffer::push(std::string s){
if (m_buffer.size() >= m_size){
m_buffer[m_zero_offset++] = s;
m_zero_offset %= m_size;
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
m_buffer.push_back(s);
m_children.push_back(s);
}
SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){

View File

@ -9,6 +9,7 @@
class Input;
class MeshNode;
class TextNode;
namespace sf {
class Window;
@ -17,33 +18,30 @@ class Window;
class SparrowShell : public ContainerNode
{
private:
//class BackGround : public MeshNode {
// };
class ScrollBar{
SparrowShell* m_shell;
glm::ivec2 m_position;
glm::ivec2 m_dimension;
MeshNode *m_mesh;
//TODO : Add rectangle mesh
public:
ScrollBar(){}
ScrollBar(SparrowShell* shell);
void update();
};
class ShellBuffer{
class ShellBuffer : public ContainerNode {
private:
std::vector<std::string> m_buffer;
int m_zero_offset = 0;
unsigned int m_size;
unsigned int m_max_size;
float m_font_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;}
ShellBuffer(int buffer_size):m_max_size(buffer_size){}
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 setFontSize(float font_size){m_font_size = font_size;}
float getFontSize(){return m_font_size;}
};
static const unsigned int BUFFER_MAX_LENGTH;
@ -57,11 +55,11 @@ private:
glm::ivec2 m_position;
glm::ivec2 m_dimension;
std::vector<MeshNode*> m_textMeshes;
ShellBuffer m_buffer;
int m_index = 0;
unsigned int m_index = 0;
bool m_resizeScrollBar = false;
bool m_indexMoved = false;
//textMesh
MeshNode* m_background;
ScrollBar m_scrollbar;

View File

@ -62,7 +62,7 @@ int main(){
// utils::rotate2D(mnode, glm::vec2(10,10),0.5);
// scene.addObject(scene.getRootObject(),mnode);
tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2));
tnode = fonte_des_neiges->getTextNode("Such Text", glm::vec3(0.7, 0.4, 0.2),12.f);
utils::setPosition2D((MeshNode*)tnode,glm::vec2(200, 170));
utils::rotate2D((MeshNode*)tnode, glm::vec2(0),-0.5);
@ -84,14 +84,16 @@ int main(){
// 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.setScene(&scene);
engine.outputShell("Hello World!");
engine.outputShell("Starting test :");
for(int i = 0; i < 23; i++){
for(int i = 0; i < 17; i++){
engine.outputShell(std::to_string(i));
}
engine.setScene(&scene);
engine.start();
/* GraphNode n1 = GraphNode();

View File

@ -10,22 +10,29 @@ Font::Font()
TextNode* Font::getTextNode(std::string s, glm::vec3 color, float font_size)
{
Mesh* textmesh = new Mesh();
glm::ivec2 current_pos;
glm::vec2 current_pos;
float sizeRatio = font_size / m_defaultLineHeight;
for(char c : s){
if(c == '\n')
{
current_pos.x = 0; // left alignment -> TODO : be able to center or align right
current_pos.y += m_lineHeight;
current_pos.y += m_defaultLineHeight;
}
else
{
CharInfo charInfo = m_charTable[c];
textmesh->addRectangle2D(current_pos + charInfo.offset,
charInfo.dim,
glm::vec2(charInfo.pos)/m_scale,
glm::vec2(charInfo.dim)/m_scale);
current_pos.x += charInfo.xadvance;
glm::vec2 font_offset = glm::vec2(charInfo.offset) * sizeRatio;
textmesh->addRectangle2D((current_pos + font_offset)* sizeRatio,
charInfo.dim * sizeRatio,
charInfo.pos/m_scale,
charInfo.dim/m_scale
);
current_pos.x += (charInfo.xadvance);
}
}
PhongMaterial *mat = new PhongMaterial();
@ -34,6 +41,6 @@ TextNode* Font::getTextNode(std::string s, glm::vec3 color, float font_size)
mat->diffuse = color;
textmesh->setMaterial((Material*)mat);
textmesh->initGL();
TextNode *text = new TextNode(textmesh,font_size);
TextNode *text = new TextNode(textmesh,s,font_size);
return text;
}

View File

@ -13,10 +13,10 @@ class Font
public:
struct CharInfo
{
glm::ivec2 pos;
glm::ivec2 dim;
glm::ivec2 offset;
int xadvance;
glm::vec2 pos;
glm::vec2 dim;
glm::vec2 offset;
float xadvance;
};
Font();
@ -24,8 +24,8 @@ public:
void setName(std::string name){m_name = name;}
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 setLineHeight(int line_h){m_defaultLineHeight = line_h;}
int getLineHeight(){return m_defaultLineHeight;}
void setBase(int base){m_base = base;}
void setAntiAnliasing(bool antialiasing){m_antiAliasing = antialiasing;}
void setScale(glm::vec2 scale){m_scale = scale;}
@ -39,7 +39,7 @@ private:
glm::vec2 m_scale;
bool m_antiAliasing;
int m_nbChar;
int m_lineHeight;
int m_defaultLineHeight;
int m_base;
};

View File

@ -92,7 +92,7 @@ Font* Loader::loadFont(const std::string &description_file, const std::string &t
std::getline(file, line);
Font::CharInfo char_info;
int id;
sscanf(line.c_str(),"char id=%d x=%d y=%d width=%d height=%d xoffset=%d yoffset=%d xadvance=%d",
sscanf(line.c_str(),"char id=%f x=%f y=%f width=%f height=%f xoffset=%f yoffset=%f xadvance=%f",
&id, &(char_info.pos.x),&(char_info.pos.y),&(char_info.dim.x), &(char_info.dim.y),
&(char_info.offset.x), &(char_info.offset.y), &(char_info.xadvance));
font->addCharInfo(id,char_info);

View File

@ -2,6 +2,7 @@
#include "glm/ext.hpp"
//#include "scene/scenetree.h"
#include "scene/meshnode.h"
#include "iostream"
std::vector<std::string> utils::split(const std::string &line, char sep){
std::vector<std::string> tokens;
@ -16,7 +17,10 @@ std::vector<std::string> utils::split(const std::string &line, char sep){
void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){
const glm::mat4 &tr = mnode->getTransform();
// 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){