text doesn't appear in sparrowshell
This commit is contained in:
parent
1d9fc6bc54
commit
7eb5994405
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 :");
|
||||
|
||||
|
@ -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;}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user