Correction bug de chargement musiques

This commit is contained in:
Mattéo Delabre 2016-04-12 15:48:06 +02:00
parent 7e74ba7393
commit fd20287966
7 changed files with 39 additions and 30 deletions

View File

@ -90,11 +90,6 @@ public:
* Modifie le temps total du niveau
*/
virtual void setTotalTime(int set_total_time);
/**
* Modifie la musique du niveau
*/
virtual void setMusic(std::string set_music);
};
#endif

View File

@ -27,8 +27,10 @@ private:
boost::filesystem::path levels_path;
boost::filesystem::path musics_path;
float music_volume;
sf::Music music;
float music_volume;
bool playing_state;
std::string current_music;
public:
ResourceManager();

View File

@ -29,11 +29,7 @@ inline sf::Vector2f roundVectorToGrid(sf::Vector2f input) {
Editor::Editor(Manager& manager) : Level(manager),
drag_control_point(nullptr), drag_mode(Editor::DragMode::NONE),
widget_timer(manager, true, std::bind(&Editor::setTotalTime, this, std::placeholders::_1)),
widget_toolbar(manager) {
getResourceManager().playMusic("editor.ogg");
getWindow().setFramerateLimit(Manager::FPS);
}
widget_toolbar(manager) {}
Editor::~Editor() {}
@ -241,6 +237,8 @@ void Editor::processEvent(const sf::Event& event) {
void Editor::frame() {
// titre de la fenêtre
getManager().setTitle(sf::String(L"Édition de ") + getName());
getResourceManager().playMusic("editor.ogg");
getWindow().setFramerateLimit(Manager::FPS);
// dessin de la frame
draw();

View File

@ -9,8 +9,6 @@ Game::Game(Manager& manager) : Level(manager),
next_frame_time(manager.getCurrentTime()) {
mode = Game::Mode::NORMAL;
death_cause = Game::DeathCause::NONE;
getWindow().setFramerateLimit(0);
}
Game::~Game() {}
@ -39,6 +37,15 @@ void Game::processEvent(const sf::Event& event) {
void Game::frame() {
// titre de la fenêtre
getManager().setTitle(getName());
getWindow().setFramerateLimit(0);
// si musique il y a, on la joue
if (getMusic() != "") {
getResourceManager().playMusic(getMusic());
} else {
getResourceManager().stopMusic();
}
sf::Time current_time = getManager().getCurrentTime();
if (current_time >= next_frame_time) {
@ -257,15 +264,3 @@ void Game::setTotalTime(int set_total_time) {
Level::setTotalTime(set_total_time);
time_left = getTotalTime();
}
void Game::setMusic(std::string set_music) {
Level::setMusic(set_music);
// lorsqu'on change la musique, on commence à la jouer
// si toutefois il y en a une
if (getMusic() != "") {
getResourceManager().playMusic(getMusic());
} else {
getResourceManager().stopMusic();
}
}

View File

@ -9,9 +9,6 @@ const float MAX_WIDTH_PROPORTION = 1.f / 3.f;
Menu::Menu(Manager& manager) : State(manager) {
background.setTexture(getResourceManager().getTexture("bg_menu.tga"));
loadMainMenu();
getResourceManager().playMusic("menu.ogg");
getWindow().setFramerateLimit(Manager::FPS);
}
Menu::~Menu() {}
@ -77,6 +74,8 @@ void Menu::processEvent(const sf::Event& event) {
void Menu::frame() {
// titre de la fenêtre
getManager().setTitle("");
getResourceManager().playMusic("menu.ogg");
getWindow().setFramerateLimit(Manager::FPS);
// affichage du menu
sf::RenderWindow& window = getWindow();

View File

@ -5,7 +5,8 @@
using dir_iter = boost::filesystem::directory_iterator;
using fs_path = boost::filesystem::path;
ResourceManager::ResourceManager() : preloaded(false), music_volume(20) {
ResourceManager::ResourceManager() : preloaded(false),
music_volume(20), playing_state(false), current_music("") {
// initialisation de la musique en bouclage et au volume par défaut
music.setLoop(true);
music.setVolume(music_volume);
@ -114,6 +115,17 @@ std::vector<std::string> ResourceManager::getLevelList() {
}
void ResourceManager::playMusic(std::string name) {
// si la musique est déjà chargée, on la relance si elle
// est en pause, sinon on ne fait rien
if (current_music == name) {
if (!playing_state) {
playing_state = true;
music.play();
}
return;
}
// tente de charger la musique depuis le dossier "res/musics"
std::string full_path = boost::filesystem::canonical(musics_path / name).string();
std::cout << "Lecture de la musique " << name << "... ";
@ -124,11 +136,17 @@ void ResourceManager::playMusic(std::string name) {
std::cout << "OK!" << std::endl;
}
current_music = name;
playing_state = true;
music.play();
}
void ResourceManager::stopMusic() {
music.stop();
// on n'arrête la musique que si elle ne l'est pas déjà
if (playing_state) {
playing_state = false;
music.stop();
}
}
float ResourceManager::getMusicVolume() {

View File

@ -26,6 +26,8 @@ void Rules::frame() {
// titre de la fenêtre
getManager().setTitle(L"Règles");
getResourceManager().playMusic("menu.ogg");
getWindow().setFramerateLimit(Manager::FPS);
// on s'assure d'être dans la vue par défaut (pas de zoom, 0x0 en haut gauche)
getManager().useGUIView();