text doesn't appear in sparrowshell

This commit is contained in:
Lendemor 2016-07-26 19:11:37 +02:00
parent 1d9fc6bc54
commit 7eb5994405
6 changed files with 95 additions and 37 deletions

View File

@ -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<MeshNode*> textMeshes;
for(auto textMesh: m_textMeshes)
removeChild(textMesh);
m_textMeshes.clear();
for(unsigned int i = m_index;i<m_index+BUFFER_DISPLAYED_NUMBER;i++){
mnode = new MeshNode(shellfont->getTextMesh(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);

View File

@ -28,22 +28,36 @@ private:
//TODO : Add rectangle mesh
public:
ScrollBar();
ScrollBar(){}
ScrollBar(SparrowShell* shell);
void update();
};
class ShellBuffer{
private:
std::vector<std::string> 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<std::string> 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<MeshNode*> m_textMeshes;
ShellBuffer m_buffer;
int m_index = 0;
bool m_resizeScrollBar = false;
//textMesh
MeshNode* m_background;

View File

@ -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 :");

View File

@ -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;}

View File

@ -13,19 +13,28 @@ std::vector<std::string> 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);
}

View File

@ -13,6 +13,8 @@ std::vector<std::string> 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