Bonjour,
Voici un peu de code.
Ma classe Menu:
#include <SFML/Graphics/RenderStates.hpp>
#include <iostream>
#include <SFML/Window/Mouse.hpp>
#include "Image.hh"
#include "Menu.hh"
#include "ClicExit.hh"
#include "ClicOptions.hh"
#include "ClicParties.hh"
#include "Sound.hh"
Menu::Menu()
{
window.create(sf::VideoMode(800, 600), "Do you want a R-TYPE ? You'll have soon");
action[0] = PositionAction(350, 150, new ClicParties);
action[1] = PositionAction(350, 250, new ClicOptions);
action[2] = PositionAction(350, 350, new ClicExit);
nav = new Sound("../utils/sound/Nav.ogg");
sound = new Sound("../utils/sound/Intro.ogg");
lSound.push_back(nav);
lSound.push_back(sound);
}
Menu::~Menu()
{
lWidget.clear();
lSound.clear();
delete nav;
delete sound;
}
void Menu::load()
{
lWidget.push_back(new Image("../utils/pictures/rType.png", sf::Vector2f(150, 0)));
lWidget.push_back(new Image("../utils/pictures/fondMob.jpg", sf::Vector2f(600, 360)));
lWidget.push_back(new Bouton("../utils/pictures/BoutonParties.png", sf::Vector2f(350, 150)));
lWidget.push_back(new Bouton("../utils/pictures/BoutonOptions.png", sf::Vector2f(350, 250)));
lWidget.push_back(new Bouton("../utils/pictures/BoutonExit.png", sf::Vector2f(350, 350)));
}
void Menu::displayWidget()
{
std::list<AWidget*>::iterator it;
for (it = lWidget.begin();it != lWidget.end();++it)
(*it)->Draw(window);
}
void Menu::start()
{
window.setActive(true);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (sound->getStatus() == sf::Music::Stopped && sound->getPlaying() == true)
sound->play();
if (sound->getStatus() == sf::Music::Playing && sound->getPlaying() == false)
sound->stop();
if (event.type == sf::Event::Closed)
window.close();
if (event.type == event.MouseButtonPressed)
for (int i = 0;i < 3;++i)
{
if ((sf::Mouse::getPosition(window).x >= action[i].x1 && sf::Mouse::getPosition(window).x <= action[i].x2)
&& (sf::Mouse::getPosition(window).y >= action[i].y1 && sf::Mouse::getPosition(window).y <= action[i].y2))
{
if (nav->getPlaying() == true)
nav->play();
(*this->action[i].func)(window, lSound);
}
}
displayWidget();
window.display();
}
}
}
Ma classe Options:
#include <iostream>
#include <SFML/Graphics/Font.hpp>
#include "ClicOptions.hh"
#include "Bouton.hh"
#include "BoutonSwitch.hh"
ClicOptions::ClicOptions()
{
loaded = false;
}
ClicOptions::~ClicOptions()
{
}
void ClicOptions::load()
{
lWidget.push_back(new Bouton("../utils/pictures/BoutonOptions.png", sf::Vector2f(350, 50)));
lWidget.push_back(new Bouton("../utils/pictures/BoutonMenu.png", sf::Vector2f(150, 50)));
b = new BoutonSwitch("../utils/pictures/BoutonSOn.png", "../utils/pictures/BoutonSOff.png", sf::Vector2f(350, 200));
lWidget.push_back(b);
lWidget.push_back(new Bouton("../utils/pictures/ImgMoins.png", sf::Vector2f(100, 300)));
lWidget.push_back(new Bouton("../utils/pictures/ImgPlus.png", sf::Vector2f(650, 300)));
for (int i = 0;i < 10;++i)
lVol.push_back(new Bouton("../utils/pictures/ImgVol.png", sf::Vector2f((i * 50) + 150, 300)));
loaded = true;
}
void ClicOptions::displayWidget(sf::RenderWindow &window)
{
std::list<AWidget*>::iterator it;
std::list<Bouton*>::iterator itt;
for (it = lWidget.begin();it != lWidget.end();++it)
(*it)->Draw(window);
for (itt = lVol.begin();itt != lVol.end();++itt)
(*itt)->Draw(window);
}
void ClicOptions::changeSound(sf::Event &event, sf::RenderWindow &window, std::list<Sound*> &lSound)
{
if (event.type == event.MouseButtonPressed &&
(sf::Mouse::getPosition(window).x >= 350 && sf::Mouse::getPosition(window).y <= 350 +80) &&
(sf::Mouse::getPosition(window).y >= 200 && sf::Mouse::getPosition(window).y <= 200 + 30))
b->switchImage(lSound);
}
void ClicOptions::changeVolume(sf::Event &event, sf::RenderWindow &window, std::list<Sound*> &lSound)
{
std::list<Bouton*>::reverse_iterator it;
std::list<Bouton*>::iterator itt;
if (event.type == event.MouseButtonPressed &&
(sf::Mouse::getPosition(window).x >= 100 && sf::Mouse::getPosition(window).x <= 100 + 40) &&
(sf::Mouse::getPosition(window).y >= 300 && sf::Mouse::getPosition(window).y <= 300 + 40))
{
int i = 0;
for (it = lVol.rbegin();it != lVol.rend() && i == 0;++it)
{
if ((*it)->isUse() == true)
{
(*it)->changeUse();
i = 1;
}
}
}
if (event.type == event.MouseButtonPressed &&
(sf::Mouse::getPosition(window).x >= 650 && sf::Mouse::getPosition(window).x <= 650 + 40) &&
(sf::Mouse::getPosition(window).y >= 300 && sf::Mouse::getPosition(window).y <= 300 + 40))
{
int i = 0;
for (itt = lVol.begin();itt != lVol.end() && i == 0;++itt)
{
if ((*itt)->isUse() == false)
{
(*itt)->changeUse();
i = 1;
}
}
}
std::list<Sound*>::iterator ite;
float vol = 0;
for (itt = lVol.begin();itt != lVol.end();++itt)
{
if ((*itt)->isUse() == true)
vol += 1.0;
}
vol *= 10.0;
for (ite = lSound.begin();ite != lSound.end();++ite)
(*ite)->volume(vol);
}
void ClicOptions::operator ()(sf::RenderWindow &window, std::list<Sound*> &lSound)
{
sf::Font f;
f.loadFromFile("../utils/police/Alien-Encounters.ttf");
sf::Text *bText = new sf::Text("Sound :", f);
bText->setPosition(150, 200);
sf::Text *bT = new sf::Text("Volume", f);
bT->setPosition(300, 250);
if (loaded == false)
load();
int i = 1;
while (window.isOpen() && i != 0)
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == event.MouseButtonPressed &&
(sf::Mouse::getPosition(window).x >= 150 && sf::Mouse::getPosition(window).x <= 150 + 80) &&
(sf::Mouse::getPosition(window).y >= 50 && sf::Mouse::getPosition(window).y <= 50 + 30))
i = 0;
changeSound(event, window, lSound);
changeVolume(event, window, lSound);
}
window.clear();
window.draw(*bText);
window.draw(*bT);
displayWidget(window);
window.display();
if (i == 0)
window.clear();
}
}