Création du menu et de AnimatedMain

This commit is contained in:
terry-dango 2015-03-05 19:24:37 +01:00
parent c20c5e3ac2
commit 1c0ed7daad
5 changed files with 168 additions and 2 deletions

BIN
Code/data/font/arial.ttf Normal file

Binary file not shown.

View File

@ -0,0 +1,26 @@
#ifndef MENU_HPP
#define MENU_HPP
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
class Menu : public sf::Drawable
{
public:
Menu(unsigned int nbPatellas = 3, std::string const& path = "data/font/arial.ttf", float rotationSpped = 1.0f, unsigned int fontSize = 20);
bool manageEvent(sf::Event const& event);
void draw(sf::RenderTarget& target, sf::RenderStates states) const;
std::vector<std::vector<sf::Text>> textsMenu;
unsigned int patellaIndex;
unsigned int nbPatellas;
unsigned int angleIndex;
std::vector<std::vector<float>> angles;
float rotationSpeed;
sf::Font font;
unsigned int fontSize;
};
#endif // MENU_HPP

View File

@ -14,6 +14,7 @@
#include "Geometry/Point.hpp"
#include "Spline/Skeleton3D.hpp"
#include "Animation/AnimatedMesh.hpp"
#include "Animation/Menu.hpp"
// Full hd : 1920x1080
constexpr auto WIDTH = 1920;
@ -46,6 +47,8 @@ int main(int argc, char *argv[])
auto mesh = pae::AnimatedMesh{skeleton};
auto menu = Menu{};
// Création de la fenêtre
sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT),
"pae",
@ -78,18 +81,21 @@ int main(int argc, char *argv[])
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glFlush();
// Camera
// Camera
auto camera = sft::FreeFlyCamera{};
// la boucle principale
auto running = true;
auto captureRequired = false;
while (running)
{
// gestion des évènements
sf::Event event;
while (window.pollEvent(event))
{
menu.manageEvent(event);
if (event.type == sf::Event::Closed)
{
// on stoppe le programme
@ -131,6 +137,9 @@ int main(int argc, char *argv[])
captureRequired = false;
}
// Draw the texts
window.draw(menu);
// termine la trame courante (en interne, échange les deux tampons de rendu)
window.display();
}

View File

@ -1,2 +1,2 @@
add_executable(AnimatedMain AnimatedMain.cpp AnimatedMesh.cpp ../Spline/Click.cpp)
add_executable(AnimatedMain AnimatedMain.cpp AnimatedMesh.cpp ../Spline/Click.cpp Menu.cpp)
target_link_libraries(AnimatedMain Geometry SFMLTools ${SFML_LIBRARIES} ${OPENGL_LIBRARIES})

131
Code/src/Animation/Menu.cpp Normal file
View File

@ -0,0 +1,131 @@
#include <iostream>
#include <cmath>
#include <boost/lexical_cast.hpp>
#include <Animation/Menu.hpp>
Menu::Menu(unsigned int nbPatellas, std::string const& path, float rotationSpeed, unsigned int fontSize) :
textsMenu{},
patellaIndex{0},
nbPatellas{nbPatellas},
angleIndex{0},
rotationSpeed{rotationSpeed},
fontSize{fontSize}
{
if (!font.loadFromFile(path))
std::cerr << "Error when loading the font" << std::endl;
for (unsigned int i = 0; i < nbPatellas; i++)
{
angles.push_back({});
for (unsigned int j = 0; j < 3; j++)
angles[i].push_back(0.0f);
textsMenu.push_back({});
textsMenu[i].push_back(sf::Text{std::to_string(i+1)+")", font, 20});
textsMenu[i][0].setPosition(fontSize, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{L"θ =", font, 20});
textsMenu[i][1].setPosition(fontSize*3, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{boost::lexical_cast<std::string>(angles[i][0]), font, 20});
textsMenu[i][2].setPosition(fontSize*5, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{L"φ =", font, 20});
textsMenu[i][3].setPosition(fontSize*7, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{boost::lexical_cast<std::string>(angles[i][1]), font, 20});
textsMenu[i][4].setPosition(fontSize*9, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{L"ψ =", font, 20});
textsMenu[i][5].setPosition(fontSize*11, (fontSize+10)*(1+i));
textsMenu[i].push_back(sf::Text{boost::lexical_cast<std::string>(angles[i][2]), font, 20});
textsMenu[i][6].setPosition(fontSize*13, (fontSize+10)*(1+i));
angles.push_back({});
for (unsigned int k = 0; k < 7; k++)
textsMenu[i][k].setColor(sf::Color(50, 50, 50, 170));
textsMenu[0][0].setColor(sf::Color(200, 200, 200, 170));
textsMenu[0][1].setColor(sf::Color(200, 200, 200, 170));
textsMenu[0][2].setColor(sf::Color(200, 200, 200, 170));
}
}
bool Menu::manageEvent(sf::Event const& event)
{
if (event.type == sf::Event::KeyPressed)
{
switch (event.key.code)
{
case sf::Keyboard::Right:
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
angleIndex = (angleIndex+1)%3;
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
case sf::Keyboard::Up:
textsMenu[patellaIndex][0].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
patellaIndex = (patellaIndex+nbPatellas-1)%nbPatellas;
textsMenu[patellaIndex][0].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
case sf::Keyboard::Left:
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
angleIndex = (angleIndex+2)%3;
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
case sf::Keyboard::Down:
textsMenu[patellaIndex][0].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
patellaIndex = (patellaIndex+1)%nbPatellas;
textsMenu[patellaIndex][0].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][1+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
case sf::Keyboard::Add:
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
angles[patellaIndex][angleIndex] = std::fmod((angles[patellaIndex][angleIndex]+rotationSpeed),360);
textsMenu[patellaIndex][2+2*angleIndex].setString(boost::lexical_cast<std::string>(angles[patellaIndex][angleIndex]));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
case sf::Keyboard::Subtract:
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(50, 50, 50, 170));
angles[patellaIndex][angleIndex] = std::fmod((angles[patellaIndex][angleIndex]+360-rotationSpeed),360);
textsMenu[patellaIndex][2+2*angleIndex].setString(boost::lexical_cast<std::string>(angles[patellaIndex][angleIndex]));
textsMenu[patellaIndex][2+2*angleIndex].setColor(sf::Color(200, 200, 200, 170));
break;
default:
break;
}
}
return false;
}
void Menu::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
target.pushGLStates();
for (unsigned int i = 0; i < textsMenu.size(); i++)
{
for (unsigned int j = 0; j < textsMenu[i].size(); j++)
{
target.draw(textsMenu[i][j]);
}
}
target.popGLStates();
}