text doesn't appear in sparrowshell
This commit is contained in:
parent
1d9fc6bc54
commit
7eb5994405
@ -6,13 +6,18 @@
|
|||||||
#include "mesh.h"
|
#include "mesh.h"
|
||||||
#include "phongmaterial.h"
|
#include "phongmaterial.h"
|
||||||
#include "tools/utils.h"
|
#include "tools/utils.h"
|
||||||
|
#include "tools/font.h"
|
||||||
|
|
||||||
const unsigned int SparrowShell::BUFFER_MAX_LENGTH = 50;
|
const unsigned int SparrowShell::BUFFER_MAX_LENGTH = 50;
|
||||||
const unsigned int SparrowShell::BUFFER_DISPLAYED_NUMBER = 10;
|
const unsigned int SparrowShell::BUFFER_DISPLAYED_NUMBER = 10;
|
||||||
const unsigned int SparrowShell::SCROLLBAR_PIXEL_WIDTH = 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();
|
sf::Vector2u size = m_window->getSize();
|
||||||
m_dimension = glm::ivec2(size.x,size.y/2);
|
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);
|
mesh->addRectangle2D(m_position,m_dimension);
|
||||||
PhongMaterial *mat = new PhongMaterial();
|
PhongMaterial *mat = new PhongMaterial();
|
||||||
mat->diffuse = glm::vec3(0.1,0.1,0.1);
|
mat->diffuse = glm::vec3(0.1,0.1,0.1);
|
||||||
|
mat->m_opacity = 0.5;
|
||||||
mesh->setMaterial(mat);
|
mesh->setMaterial(mat);
|
||||||
mesh->setDepth(-0.5);
|
mesh->setDepth(SHELL_DEPTH);
|
||||||
mesh->initGL();
|
mesh->initGL();
|
||||||
m_background = new MeshNode(mesh);
|
m_background = new MeshNode(mesh);
|
||||||
this->addChild(m_background);
|
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)
|
void SparrowShell::out(std::string s)
|
||||||
{
|
{
|
||||||
if (m_buffer.size() == BUFFER_MAX_LENGTH)
|
m_buffer.push(s);
|
||||||
m_buffer.pop_back();
|
|
||||||
m_buffer.push_front(s);
|
|
||||||
if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER)
|
if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER)
|
||||||
m_resizeScrollBar = true;
|
m_resizeScrollBar = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparrowShell::scrollUp(){
|
void SparrowShell::scrollUp(){
|
||||||
if (m_index + BUFFER_DISPLAYED_NUMBER < m_buffer.size()) m_index++;
|
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(){
|
void SparrowShell::scrollDown(){
|
||||||
if (m_index > 0) m_index--;
|
if (m_index > 0) m_index--;
|
||||||
std::cout << "scroll up" << std::endl;
|
// std::cout << "scroll down" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparrowShell::update()
|
void SparrowShell::update()
|
||||||
{
|
{
|
||||||
//TODO : update TextMesh
|
//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();
|
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){
|
SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){
|
||||||
m_position = glm::ivec2(m_shell->m_dimension.x - SparrowShell::SCROLLBAR_PIXEL_WIDTH,0);
|
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);
|
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);
|
mesh->addRectangle2D(glm::vec2(0),m_dimension);
|
||||||
PhongMaterial *mat = new PhongMaterial();
|
PhongMaterial *mat = new PhongMaterial();
|
||||||
mat->diffuse = glm::vec3(0,0,0.5);
|
mat->diffuse = glm::vec3(0,0,0.5);
|
||||||
mesh->setDepth(-0.4);
|
mesh->setDepth(SHELL_DEPTH+1);
|
||||||
mesh->setMaterial(mat);
|
mesh->setMaterial(mat);
|
||||||
mesh->initGL();
|
mesh->initGL();
|
||||||
m_mesh = new MeshNode(mesh);
|
m_mesh = new MeshNode(mesh);
|
||||||
|
@ -28,22 +28,36 @@ private:
|
|||||||
//TODO : Add rectangle mesh
|
//TODO : Add rectangle mesh
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ScrollBar();
|
ScrollBar(){}
|
||||||
ScrollBar(SparrowShell* shell);
|
ScrollBar(SparrowShell* shell);
|
||||||
void update();
|
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_MAX_LENGTH;
|
||||||
static const unsigned int BUFFER_DISPLAYED_NUMBER;
|
static const unsigned int BUFFER_DISPLAYED_NUMBER;
|
||||||
static const unsigned int SCROLLBAR_PIXEL_WIDTH;
|
static const unsigned int SCROLLBAR_PIXEL_WIDTH;
|
||||||
|
static const float SHELL_DEPTH;
|
||||||
|
|
||||||
std::list<std::string> m_buffer;
|
|
||||||
sf::Window* m_window;
|
sf::Window* m_window;
|
||||||
Input* m_input;
|
Input* m_input;
|
||||||
int m_index = 0;
|
|
||||||
bool m_resizeScrollBar = false;
|
|
||||||
glm::ivec2 m_position;
|
glm::ivec2 m_position;
|
||||||
glm::ivec2 m_dimension;
|
glm::ivec2 m_dimension;
|
||||||
|
std::vector<MeshNode*> m_textMeshes;
|
||||||
|
ShellBuffer m_buffer;
|
||||||
|
int m_index = 0;
|
||||||
|
bool m_resizeScrollBar = false;
|
||||||
|
|
||||||
//textMesh
|
//textMesh
|
||||||
MeshNode* m_background;
|
MeshNode* m_background;
|
||||||
|
@ -27,7 +27,7 @@ int main(){
|
|||||||
SceneTree scene;
|
SceneTree scene;
|
||||||
|
|
||||||
/* Exemple creation mesh 2D
|
/* Exemple creation mesh 2D
|
||||||
**/
|
*
|
||||||
Mesh* mesh = new Mesh();
|
Mesh* mesh = new Mesh();
|
||||||
mesh->addRectangle2D(180, 400,10,64);
|
mesh->addRectangle2D(180, 400,10,64);
|
||||||
PhongMaterial *mat = new PhongMaterial();
|
PhongMaterial *mat = new PhongMaterial();
|
||||||
@ -36,7 +36,7 @@ int main(){
|
|||||||
mesh->setDepth(1);
|
mesh->setDepth(1);
|
||||||
mesh->initGL();
|
mesh->initGL();
|
||||||
scene.addObject(scene.getRootObject(),new MeshNode(mesh));
|
scene.addObject(scene.getRootObject(),new MeshNode(mesh));
|
||||||
/**/
|
*/
|
||||||
|
|
||||||
/* Exemple ajout d'un objet a la scene
|
/* Exemple ajout d'un objet a la scene
|
||||||
*
|
*
|
||||||
@ -55,25 +55,34 @@ int main(){
|
|||||||
MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
|
||||||
scene.addObject(scene.getRootObject(),mnode)*/;
|
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)));
|
// 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));
|
// utils::setPosition2D(mnode,glm::vec2(0, 400));
|
||||||
scene.addObject(scene.getRootObject(),mnode);
|
// 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)));
|
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);
|
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 = new MeshNode(fonte_des_neiges->getTextMesh("Much animation", glm::vec3(0.3, 0.3, 0.8)));
|
||||||
mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(180, 400, 0)), 0.1f, glm::vec3(0, 0, 1)));
|
// mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0)));
|
||||||
scene.addObject(scene.getRootObject(),mnode);
|
// 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("Hello World!");
|
||||||
engine.outputShell("Starting test :");
|
engine.outputShell("Starting test :");
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ public:
|
|||||||
void addCharInfo(wchar_t character, CharInfo character_info){ m_charTable[character] = character_info; }
|
void addCharInfo(wchar_t character, CharInfo character_info){ m_charTable[character] = character_info; }
|
||||||
void setNbChar(int nbchar){m_nbChar =nbchar;}
|
void setNbChar(int nbchar){m_nbChar =nbchar;}
|
||||||
void setLineHeight(int line_h){m_lineHeight = line_h;}
|
void setLineHeight(int line_h){m_lineHeight = line_h;}
|
||||||
|
int getLineHeight(){return m_lineHeight;}
|
||||||
void setBase(int base){m_base = base;}
|
void setBase(int base){m_base = base;}
|
||||||
void setAntiAnliasing(bool antialiasing){m_antiAliasing = antialiasing;}
|
void setAntiAnliasing(bool antialiasing){m_antiAliasing = antialiasing;}
|
||||||
void setScale(glm::vec2 scale){m_scale = scale;}
|
void setScale(glm::vec2 scale){m_scale = scale;}
|
||||||
|
@ -13,19 +13,28 @@ std::vector<std::string> utils::split(const std::string &line, char sep){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){
|
void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){
|
||||||
glm::mat4 tr = mnode->getTransform();
|
const glm::mat4 &tr = mnode->getTransform();
|
||||||
glm::vec3 vpos(pos.x,pos.y,0);
|
mnode->setTransform(glm::translate(tr,glm::vec3(pos.x,pos.y,0) - glm::vec3(tr[3])));
|
||||||
tr = glm::translate(tr,vpos - glm::vec3(tr[3]));
|
|
||||||
mnode->setTransform(tr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){
|
void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){
|
||||||
glm::vec2 ratio(new_dim / dim);
|
scale2D(mnode,glm::vec2(new_dim / dim));
|
||||||
scale2D(mnode,ratio);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void utils::scale2D(MeshNode* mnode, glm::vec2 ratio){
|
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();
|
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);
|
mnode->setTransform(tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setDepth2D(MeshNode* mnode, float depth){
|
||||||
|
//Mesh* mesh; //= getMesh here
|
||||||
|
//mesh.setDepth(depth);
|
||||||
|
}
|
||||||
|
@ -13,6 +13,8 @@ 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 setDepth2D(MeshNode* mnode, float depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // UTILS_H
|
#endif // UTILS_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user