Supporte aussi bien le Ctrl/Shift/Alt/System gauche que droit

This commit is contained in:
Mattéo Delabre 2016-04-10 01:29:42 +02:00
parent 1b14d4084d
commit ef5ecc810d
6 changed files with 58 additions and 11 deletions

View File

@ -25,6 +25,11 @@ private:
bool running;
public:
/**
* Énumération des modificateurs
*/
enum class Modifier {CONTROL, ALT, SHIFT, SYSTEM};
Manager();
/**
@ -82,6 +87,12 @@ public:
* touche donnée ou non
*/
bool isKeyPressed(sf::Keyboard::Key key) const;
/**
* Renvoie un booléen attestant de l'appui sur le
* modificateur
*/
bool isKeyPressed(Modifier modifier) const;
};
#endif

View File

@ -4,8 +4,8 @@
#include <SFML/Graphics.hpp>
class ResourceManager;
class Manager;
class Object;
class Manager;
/**
* Classe abstraite pour les états de jeu
@ -38,20 +38,30 @@ public:
*/
Manager& getManager();
/**
* Récupère le gestionnaire (version constante)
*/
const Manager& getManager() const;
/**
* Récupère le gestionnaire de ressources
*/
ResourceManager& getResourceManager();
/**
* Récupère le gestionnaire de ressources (version constante)
*/
const ResourceManager& getResourceManager() const;
/**
* Récupère la fenêtre
*/
sf::RenderWindow& getWindow();
/**
* Récupère si une touche est pressée
* Récupère la fenêtre (version constante)
*/
bool isKeyPressed(sf::Keyboard::Key key) const;
const sf::RenderWindow& getWindow() const;
};
#endif

View File

@ -65,7 +65,7 @@ void Editor::processEvent(const sf::Event& event) {
if (event.mouseButton.button == sf::Mouse::Left) {
// clic + shift : sélection par rectangle de sélection
if (isKeyPressed(sf::Keyboard::LShift)) {
if (getManager().isKeyPressed(Manager::Modifier::SHIFT)) {
drag_start = mouse_position;
drag_end = mouse_position;
drag_mode = DragMode::SELECT_RECT;
@ -73,7 +73,7 @@ void Editor::processEvent(const sf::Event& event) {
// clic sur un objet : démarrage de la sélection libre
else if (pointed_object != nullptr) {
if (isKeyPressed(sf::Keyboard::LControl)) {
if (getManager().isKeyPressed(Manager::Modifier::CONTROL)) {
drag_start = mouse_position;
drag_end = mouse_position;
drag_mode = DragMode::SELECT_BULK;

View File

@ -98,3 +98,21 @@ void Manager::setTitle(sf::String set_title) {
bool Manager::isKeyPressed(sf::Keyboard::Key key) const {
return sf::Keyboard::isKeyPressed(key) && window.hasFocus();
}
bool Manager::isKeyPressed(Manager::Modifier modifier) const {
switch (modifier) {
case Manager::Modifier::CONTROL:
return isKeyPressed(sf::Keyboard::LControl) || isKeyPressed(sf::Keyboard::RControl);
case Manager::Modifier::ALT:
return isKeyPressed(sf::Keyboard::LAlt) || isKeyPressed(sf::Keyboard::RAlt);
case Manager::Modifier::SYSTEM:
return isKeyPressed(sf::Keyboard::LSystem) || isKeyPressed(sf::Keyboard::RSystem);
case Manager::Modifier::SHIFT:
return isKeyPressed(sf::Keyboard::LShift) || isKeyPressed(sf::Keyboard::RShift);
}
return false;
}

View File

@ -41,21 +41,21 @@ sf::Vector2f Player::getForces(const Level& level) const {
// déplacement de la balle après appui sur les touches de direction
if (getPlayerNumber() == 0) {
if (level.isKeyPressed(sf::Keyboard::Left)) {
if (level.getManager().isKeyPressed(sf::Keyboard::Left)) {
forces += level.getLeftDirection();
}
if (level.isKeyPressed(sf::Keyboard::Right)) {
if (level.getManager().isKeyPressed(sf::Keyboard::Right)) {
forces += level.getRightDirection();
}
}
if (getPlayerNumber() == 1) {
if (level.isKeyPressed(sf::Keyboard::Q)) {
if (level.getManager().isKeyPressed(sf::Keyboard::Q)) {
forces += level.getLeftDirection();
}
if (level.isKeyPressed(sf::Keyboard::D)) {
if (level.getManager().isKeyPressed(sf::Keyboard::D)) {
forces += level.getRightDirection();
}
}

View File

@ -8,14 +8,22 @@ Manager& State::getManager() {
return manager;
}
const Manager& State::getManager() const {
return manager;
}
ResourceManager& State::getResourceManager() {
return manager.getResourceManager();
}
const ResourceManager& State::getResourceManager() const {
return manager.getResourceManager();
}
sf::RenderWindow& State::getWindow() {
return manager.getWindow();
}
bool State::isKeyPressed(sf::Keyboard::Key key) const {
return manager.isKeyPressed(key);
const sf::RenderWindow& State::getWindow() const {
return manager.getWindow();
}