Réimplémentation du compte à rebours pour éditeur & jeu
This commit is contained in:
parent
c9b6ce93ea
commit
231aee482e
|
@ -4,32 +4,31 @@
|
||||||
#include <SFGUI/Widgets.hpp>
|
#include <SFGUI/Widgets.hpp>
|
||||||
#include <SFML/Graphics.hpp>
|
#include <SFML/Graphics.hpp>
|
||||||
#include "../objects/object.hpp"
|
#include "../objects/object.hpp"
|
||||||
|
#include "../utility.hpp"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Barre d'outils pour les actions en jeu
|
* Barre d'outils pour les boutons d'actions en jeu
|
||||||
*/
|
*/
|
||||||
class ActionToolbar {
|
class ActionToolbar {
|
||||||
private:
|
private:
|
||||||
// widgets de la barre
|
// widgets de la barre
|
||||||
sfg::Window::Ptr toolbar_window;
|
sfg::Window::Ptr toolbar_window;
|
||||||
sfg::Box::Ptr toolbar_box;
|
sfg::Box::Ptr toolbar_box;
|
||||||
|
sfg::Label::Ptr timer_label;
|
||||||
|
|
||||||
|
int left_buttons_count;
|
||||||
|
int time;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ActionToolbar();
|
ActionToolbar();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ajoute un nouveau bouton d'action à la barre d'outils
|
* Ajoute un nouveau bouton d'action à gauche ou
|
||||||
|
* à droite de la barre d'action d'outils
|
||||||
*/
|
*/
|
||||||
sfg::Button::Ptr addButton(
|
sfg::Button::Ptr addButton(
|
||||||
sf::Image image,
|
std::string name, Utility::Direction direction,
|
||||||
std::function<void()> callback = std::function<void()>()
|
int position, std::function<void()> callback = std::function<void()>()
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ajoute un nouvel espaceur
|
|
||||||
*/
|
|
||||||
sfg::Alignment::Ptr addSpacer(
|
|
||||||
float width, bool expand, bool fill
|
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -41,6 +40,16 @@ public:
|
||||||
* Récupère la taille désirée par la barre d'outils
|
* Récupère la taille désirée par la barre d'outils
|
||||||
*/
|
*/
|
||||||
float getHeight();
|
float getHeight();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère le temps restant
|
||||||
|
*/
|
||||||
|
int getTime();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifie le temps restant
|
||||||
|
*/
|
||||||
|
void setTime(int set_time);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -11,6 +11,11 @@
|
||||||
Color: #141414ff;
|
Color: #141414ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.timer {
|
||||||
|
FontName: monoid;
|
||||||
|
FontSize: 18;
|
||||||
|
}
|
||||||
|
|
||||||
Window {
|
Window {
|
||||||
BackgroundColor: #FFFFFFff;
|
BackgroundColor: #FFFFFFff;
|
||||||
BorderWidth: 0;
|
BorderWidth: 0;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
#include "resource_manager.hpp"
|
||||||
#include "gui/action_toolbar.hpp"
|
#include "gui/action_toolbar.hpp"
|
||||||
|
|
||||||
ActionToolbar::ActionToolbar() {
|
ActionToolbar::ActionToolbar() : left_buttons_count(0) {
|
||||||
// création de la boîte de la barre d'outils
|
// création de la boîte de la barre d'outils
|
||||||
toolbar_box = sfg::Box::Create(sfg::Box::Orientation::HORIZONTAL, 5.f);
|
toolbar_box = sfg::Box::Create(sfg::Box::Orientation::HORIZONTAL, 5.f);
|
||||||
|
|
||||||
|
@ -8,37 +9,50 @@ ActionToolbar::ActionToolbar() {
|
||||||
toolbar_window = sfg::Window::Create(sfg::Window::Style::BACKGROUND);
|
toolbar_window = sfg::Window::Create(sfg::Window::Style::BACKGROUND);
|
||||||
toolbar_window->Add(toolbar_box);
|
toolbar_window->Add(toolbar_box);
|
||||||
|
|
||||||
|
// ajout du timer et des espaceurs
|
||||||
|
sfg::Alignment::Ptr left_spacer = sfg::Alignment::Create();
|
||||||
|
sfg::Alignment::Ptr right_spacer = sfg::Alignment::Create();
|
||||||
|
timer_label = sfg::Label::Create("00:00");
|
||||||
|
|
||||||
|
left_spacer->SetRequisition(sf::Vector2f(5.f, 1.f));
|
||||||
|
timer_label->SetClass("timer");
|
||||||
|
right_spacer->SetRequisition(sf::Vector2f(5.f, 1.f));
|
||||||
|
|
||||||
|
toolbar_box->PackEnd(left_spacer, true, false);
|
||||||
|
toolbar_box->PackEnd(timer_label);
|
||||||
|
toolbar_box->PackEnd(right_spacer, true, false);
|
||||||
|
|
||||||
// pour les styles
|
// pour les styles
|
||||||
toolbar_window->SetId("action_toolbar");
|
toolbar_window->SetId("action_toolbar");
|
||||||
}
|
}
|
||||||
|
|
||||||
sfg::Button::Ptr ActionToolbar::addButton(
|
sfg::Button::Ptr ActionToolbar::addButton(
|
||||||
sf::Image image, std::function<void()> callback
|
std::string name, Utility::Direction direction,
|
||||||
|
int position, std::function<void()> callback
|
||||||
) {
|
) {
|
||||||
// création d'un bouton avec pour image l'image passée
|
// création d'un bouton avec pour image l'image passée
|
||||||
sfg::Button::Ptr button = sfg::Button::Create("");
|
sfg::Button::Ptr button = sfg::Button::Create("");
|
||||||
button->SetImage(sfg::Image::Create(image));
|
|
||||||
button->SetClass("notext");
|
button->SetClass("notext");
|
||||||
|
button->SetImage(sfg::Image::Create(
|
||||||
|
*ResourceManager::get().getImage("toolbar/icon_" + name + ".tga")
|
||||||
|
));
|
||||||
|
|
||||||
// liaison du bouton avec la callback, s'il y en a une
|
// liaison du bouton avec la callback, s'il y en a une
|
||||||
if (callback) {
|
if (callback) {
|
||||||
button->GetSignal(sfg::Widget::OnLeftClick).Connect(callback);
|
button->GetSignal(sfg::Widget::OnLeftClick).Connect(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ajout du bouton à la barre
|
// ajout du bouton à la barre selon la position donnée
|
||||||
toolbar_box->PackEnd(button, false, false);
|
if (direction == Utility::Direction::WEST) {
|
||||||
return button;
|
position += left_buttons_count + 3;
|
||||||
|
} else {
|
||||||
|
left_buttons_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
sfg::Alignment::Ptr ActionToolbar::addSpacer(
|
toolbar_box->PackEnd(button, false, false);
|
||||||
float width, bool expand, bool fill
|
toolbar_box->ReorderChild(button, position);
|
||||||
) {
|
|
||||||
sfg::Alignment::Ptr spacer = sfg::Alignment::Create();
|
|
||||||
spacer->SetRequisition(sf::Vector2f(width, 1.f));
|
|
||||||
|
|
||||||
// ajout de l'espaceur à la barre
|
return button;
|
||||||
toolbar_box->PackEnd(spacer, expand, fill);
|
|
||||||
return spacer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sfg::Window::Ptr ActionToolbar::getWindow() {
|
sfg::Window::Ptr ActionToolbar::getWindow() {
|
||||||
|
@ -48,3 +62,26 @@ sfg::Window::Ptr ActionToolbar::getWindow() {
|
||||||
float ActionToolbar::getHeight() {
|
float ActionToolbar::getHeight() {
|
||||||
return toolbar_window->GetRequisition().y;
|
return toolbar_window->GetRequisition().y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ActionToolbar::getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActionToolbar::setTime(int set_time) {
|
||||||
|
time = set_time;
|
||||||
|
|
||||||
|
// mise à jour du temps affiché sur le label
|
||||||
|
sf::String minutes = std::to_string(time / 60);
|
||||||
|
sf::String seconds = std::to_string(time % 60);
|
||||||
|
|
||||||
|
// ajout d'un zéro devant les secondes si nécessaire
|
||||||
|
if (minutes.getSize() == 1) {
|
||||||
|
minutes = "0" + minutes;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (seconds.getSize() == 1) {
|
||||||
|
seconds = "0" + seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer_label->SetText(minutes + ":" + seconds);
|
||||||
|
}
|
||||||
|
|
|
@ -36,14 +36,14 @@ ObjectToolbar::ObjectToolbar() {
|
||||||
&ObjectToolbar::createGravityBlock, this, Utility::Direction::EAST
|
&ObjectToolbar::createGravityBlock, this, Utility::Direction::EAST
|
||||||
));
|
));
|
||||||
|
|
||||||
addCreator("gravity_block_south", std::bind(
|
|
||||||
&ObjectToolbar::createGravityBlock, this, Utility::Direction::SOUTH
|
|
||||||
));
|
|
||||||
|
|
||||||
addCreator("gravity_block_west", std::bind(
|
addCreator("gravity_block_west", std::bind(
|
||||||
&ObjectToolbar::createGravityBlock, this, Utility::Direction::WEST
|
&ObjectToolbar::createGravityBlock, this, Utility::Direction::WEST
|
||||||
));
|
));
|
||||||
|
|
||||||
|
addCreator("gravity_block_south", std::bind(
|
||||||
|
&ObjectToolbar::createGravityBlock, this, Utility::Direction::SOUTH
|
||||||
|
));
|
||||||
|
|
||||||
// attachement de la liste des créateurs à l'interface
|
// attachement de la liste des créateurs à l'interface
|
||||||
toolbar_box->PackEnd(creators_table);
|
toolbar_box->PackEnd(creators_table);
|
||||||
|
|
||||||
|
|
|
@ -36,21 +36,18 @@ Editor::Editor(Manager& manager) : Level(manager),
|
||||||
drag_control_point(nullptr), drag_mode(Editor::DragMode::NONE) {
|
drag_control_point(nullptr), drag_mode(Editor::DragMode::NONE) {
|
||||||
|
|
||||||
// ajout des boutons d'action de la barre d'action
|
// ajout des boutons d'action de la barre d'action
|
||||||
|
action_toolbar.addButton("gear", Utility::Direction::WEST, 0);
|
||||||
action_toolbar.addButton(
|
action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_gear.tga")
|
"save", Utility::Direction::WEST, 1,
|
||||||
);
|
|
||||||
|
|
||||||
action_toolbar.addButton(
|
|
||||||
*ResourceManager::get().getImage("toolbar/icon_save.tga"),
|
|
||||||
std::bind(&Editor::save, this)
|
std::bind(&Editor::save, this)
|
||||||
);
|
);
|
||||||
|
|
||||||
action_toolbar.addButton(
|
action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_test.tga"),
|
"test", Utility::Direction::WEST, 2,
|
||||||
std::bind(&Editor::test, this)
|
std::bind(&Editor::test, this)
|
||||||
);
|
);
|
||||||
|
|
||||||
// ajout de la barre d'objets
|
// ajout de la barre d'objets à l'écran
|
||||||
getManager().addWidget(object_toolbar.getWindow());
|
getManager().addWidget(object_toolbar.getWindow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,6 +268,9 @@ void Editor::frame() {
|
||||||
// dessin de la frame
|
// dessin de la frame
|
||||||
draw();
|
draw();
|
||||||
|
|
||||||
|
// màj du temps du timer
|
||||||
|
action_toolbar.setTime(total_time);
|
||||||
|
|
||||||
// scroll de la caméra lorsque la souris se situe sur les bords
|
// scroll de la caméra lorsque la souris se situe sur les bords
|
||||||
if (window.hasFocus()) {
|
if (window.hasFocus()) {
|
||||||
sf::Vector2f cur_center = getCenterGoal();
|
sf::Vector2f cur_center = getCenterGoal();
|
||||||
|
|
|
@ -25,12 +25,12 @@ Game::Game(Manager& manager, bool test) : Level(manager),
|
||||||
// ajout des boutons d'action de la barre d'action
|
// ajout des boutons d'action de la barre d'action
|
||||||
if (!isTest()) {
|
if (!isTest()) {
|
||||||
action_toolbar.addButton(
|
action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_restart.tga"),
|
"restart", Utility::Direction::WEST, 0,
|
||||||
std::bind(&Game::restart, this)
|
std::bind(&Game::restart, this)
|
||||||
);
|
);
|
||||||
|
|
||||||
action_toolbar.addButton(
|
action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_pause.tga"),
|
"pause", Utility::Direction::WEST, 1,
|
||||||
std::bind(&Game::switchPause, this)
|
std::bind(&Game::switchPause, this)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -197,6 +197,8 @@ void Game::update() {
|
||||||
time_left -= Manager::FRAME_TIME.asSeconds();
|
time_left -= Manager::FRAME_TIME.asSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
action_toolbar.setTime(std::ceil(time_left));
|
||||||
|
|
||||||
// on tue les objets qui étaient déjà planifiés pour mourir
|
// on tue les objets qui étaient déjà planifiés pour mourir
|
||||||
for (auto it = pending_kill.begin(); it != pending_kill.end(); it++) {
|
for (auto it = pending_kill.begin(); it != pending_kill.end(); it++) {
|
||||||
removeObject(*it);
|
removeObject(*it);
|
||||||
|
|
|
@ -70,27 +70,21 @@ Level::Level(Manager& manager) : State(manager),
|
||||||
|
|
||||||
// ajout des boutons d'action de la barre d'action
|
// ajout des boutons d'action de la barre d'action
|
||||||
action_toolbar.addButton(
|
action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_back.tga"),
|
"back", Utility::Direction::EAST, 0,
|
||||||
std::bind(&Manager::popState, &getManager())
|
std::bind(&Manager::popState, &getManager())
|
||||||
);
|
);
|
||||||
|
|
||||||
mute_button = action_toolbar.addButton(
|
mute_button = action_toolbar.addButton(
|
||||||
*ResourceManager::get().getImage("toolbar/icon_music.tga"),
|
"music", Utility::Direction::EAST, 1,
|
||||||
[]() {
|
[]() {
|
||||||
// on inverse le drapeau de muet
|
// on inverse l'état muet ou non
|
||||||
ResourceManager::get().setMuted(
|
ResourceManager::get().setMuted(
|
||||||
!ResourceManager::get().isMuted()
|
!ResourceManager::get().isMuted()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
action_toolbar.addSpacer(5, true, false);
|
// ajout de la barre d'objets à l'écran
|
||||||
|
|
||||||
action_toolbar.addButton(
|
|
||||||
*ResourceManager::get().getImage("toolbar/icon_no_music.tga")
|
|
||||||
);
|
|
||||||
|
|
||||||
action_toolbar.addSpacer(5, true, false);
|
|
||||||
getManager().addWidget(action_toolbar.getWindow());
|
getManager().addWidget(action_toolbar.getWindow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue