Le menu à la souris ? C'est pas possible...
Mais si, c'est possible ! avec la carte kiwi : l'enfant de moins de 16 ans - et ceux qui l'accompagnent, jusqu'à 4 personnes - payent tous moitié prix ! Un enfant, une carte kiwi, et on voyage à moitié prix !
This commit is contained in:
parent
dc8a0e05d8
commit
0057debdfe
|
@ -14,6 +14,7 @@
|
||||||
class Menu : public View {
|
class Menu : public View {
|
||||||
private:
|
private:
|
||||||
std::vector<sf::String> choices;
|
std::vector<sf::String> choices;
|
||||||
|
std::vector<sf::Text> labels;
|
||||||
std::vector<std::function<void(void)>> actions;
|
std::vector<std::function<void(void)>> actions;
|
||||||
unsigned int selection;
|
unsigned int selection;
|
||||||
|
|
||||||
|
@ -23,6 +24,26 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual void processEvent(const sf::Event& event);
|
virtual void processEvent(const sf::Event& event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affiche les règles du jeu
|
||||||
|
*/
|
||||||
|
void loadRules();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Démarre l'éditeur
|
||||||
|
*/
|
||||||
|
void launchEditor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Démarre le jeu avec le niveau donné
|
||||||
|
*/
|
||||||
|
void launchGame(std::string name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Quitte le jeu et le menu
|
||||||
|
*/
|
||||||
|
void quit();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Menu(Manager& manager);
|
Menu(Manager& manager);
|
||||||
virtual ~Menu();
|
virtual ~Menu();
|
||||||
|
@ -47,26 +68,6 @@ public:
|
||||||
* Affiche le menu de choix des niveaux
|
* Affiche le menu de choix des niveaux
|
||||||
*/
|
*/
|
||||||
void loadLevelMenu();
|
void loadLevelMenu();
|
||||||
|
|
||||||
/**
|
|
||||||
* Affiche les règles du jeu
|
|
||||||
*/
|
|
||||||
void loadRules();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Démarre l'éditeur
|
|
||||||
*/
|
|
||||||
void launchEditor();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Démarre le jeu avec le niveau donné
|
|
||||||
*/
|
|
||||||
void launchGame(std::string name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Quitte le jeu et le menu
|
|
||||||
*/
|
|
||||||
void quit();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,8 @@ void Level::begin() {
|
||||||
if (music_name != "") {
|
if (music_name != "") {
|
||||||
resources.setMusic(music_name);
|
resources.setMusic(music_name);
|
||||||
resources.playMusic();
|
resources.playMusic();
|
||||||
|
} else {
|
||||||
|
resources.stopMusic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
56
src/menu.cpp
56
src/menu.cpp
|
@ -4,7 +4,6 @@
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
const float MAX_WIDTH_PROPORTION = 1.f / 3.f;
|
const float MAX_WIDTH_PROPORTION = 1.f / 3.f;
|
||||||
const float PADDING = 24.f;
|
|
||||||
|
|
||||||
Menu::Menu(Manager& manager) : View(manager) {}
|
Menu::Menu(Manager& manager) : View(manager) {}
|
||||||
Menu::~Menu() {}
|
Menu::~Menu() {}
|
||||||
|
@ -31,32 +30,42 @@ void Menu::frame(const std::vector<sf::Event>& events) {
|
||||||
sf::Vector2f size = (sf::Vector2f) window.getSize();
|
sf::Vector2f size = (sf::Vector2f) window.getSize();
|
||||||
sf::Font font = manager.getResourceManager().getFont("raleway.ttf");
|
sf::Font font = manager.getResourceManager().getFont("raleway.ttf");
|
||||||
|
|
||||||
|
manager.resetDefaultView();
|
||||||
window.clear(sf::Color(66, 40, 245));
|
window.clear(sf::Color(66, 40, 245));
|
||||||
// TODO: dessiner l'image du fond
|
// TODO: dessiner l'image du fond
|
||||||
|
|
||||||
// on crée les textes pour chaque choix et on les dessine
|
// on crée les textes pour chaque choix et on les dessine
|
||||||
float step = size.y / (choices.size() + 1);
|
float step = size.y / (choices.size() + 1);
|
||||||
int font_size = std::max((int) std::floor(step - PADDING), 12);
|
int font_size = std::max((int) step / 3, 12);
|
||||||
|
|
||||||
|
labels.clear();
|
||||||
|
|
||||||
for (unsigned int i = 0; i < choices.size(); i++) {
|
for (unsigned int i = 0; i < choices.size(); i++) {
|
||||||
sf::Text label(choices[i], font, 32);
|
sf::Text label(choices[i], font, font_size);
|
||||||
sf::Vector2f position(
|
sf::FloatRect text_size = label.getLocalBounds();
|
||||||
(1 - MAX_WIDTH_PROPORTION) * size.x,
|
|
||||||
step * (i + 1) - font_size / 2
|
sf::Vector2f base_position(
|
||||||
|
size.x - (font_size * 8),
|
||||||
|
step * (i + 1)
|
||||||
);
|
);
|
||||||
|
|
||||||
float width = label.getGlobalBounds().width;
|
|
||||||
label.setPosition(position);
|
|
||||||
label.setColor(sf::Color::White);
|
label.setColor(sf::Color::White);
|
||||||
|
label.setPosition(base_position - sf::Vector2f(
|
||||||
|
text_size.left, text_size.top + text_size.height / 2
|
||||||
|
));
|
||||||
|
|
||||||
// si c'est le choix sélecitonné, on le souligne
|
// si c'est le choix sélectionné, on le souligne
|
||||||
if (selection == i) {
|
if (selection == i) {
|
||||||
sf::RectangleShape underline(sf::Vector2f(width, 2.f));
|
sf::RectangleShape underline(sf::Vector2f(text_size.width, 2.f));
|
||||||
underline.setPosition(position.x, position.y + font_size / 2 + 6);
|
|
||||||
underline.setFillColor(sf::Color::White);
|
underline.setFillColor(sf::Color::White);
|
||||||
|
underline.setPosition(base_position + sf::Vector2f(
|
||||||
|
0, text_size.height / 2 + 8
|
||||||
|
));
|
||||||
|
|
||||||
window.draw(underline);
|
window.draw(underline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
labels.push_back(label);
|
||||||
window.draw(label);
|
window.draw(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +86,7 @@ void Menu::processEvent(const sf::Event& event) {
|
||||||
|
|
||||||
// touche flèche bas : on passe au choix suivant
|
// touche flèche bas : on passe au choix suivant
|
||||||
if (event.key.code == sf::Keyboard::Down) {
|
if (event.key.code == sf::Keyboard::Down) {
|
||||||
if (selection == choices.size()) {
|
if (selection == choices.size() - 1) {
|
||||||
selection = 0;
|
selection = 0;
|
||||||
} else {
|
} else {
|
||||||
selection++;
|
selection++;
|
||||||
|
@ -89,6 +98,29 @@ void Menu::processEvent(const sf::Event& event) {
|
||||||
actions[selection]();
|
actions[selection]();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// au clic, on exécute le choix pointé s'il y a lieu
|
||||||
|
if (event.type == sf::Event::MouseButtonPressed) {
|
||||||
|
sf::Vector2f position(event.mouseButton.x, event.mouseButton.y);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < labels.size(); i++) {
|
||||||
|
if (labels[i].getGlobalBounds().contains(position)) {
|
||||||
|
actions[i]();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// au déplacement de souris, on sélectionne le choix pointé s'il y a lieu
|
||||||
|
if (event.type == sf::Event::MouseMoved) {
|
||||||
|
sf::Vector2f position(event.mouseMove.x, event.mouseMove.y);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < labels.size(); i++) {
|
||||||
|
if (labels[i].getGlobalBounds().contains(position)) {
|
||||||
|
selection = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::loadMainMenu() {
|
void Menu::loadMainMenu() {
|
||||||
|
|
Loading…
Reference in New Issue