From b9a52e6192871b2e20f970fd92c024c61931dd7c Mon Sep 17 00:00:00 2001 From: vylion Date: Sun, 22 Jan 2017 00:56:42 +0100 Subject: [PATCH] Refactor of turn managing --- VaporWaveWars/combat.cpp | 89 +++++++++++++++++++++++++-------------- VaporWaveWars/combat.hpp | 6 ++- VaporWaveWars/commons.hpp | 4 ++ VaporWaveWars/compas.cpp | 11 +++++ VaporWaveWars/compas.hpp | 3 ++ VaporWaveWars/player.cpp | 5 ++- 6 files changed, 83 insertions(+), 35 deletions(-) diff --git a/VaporWaveWars/combat.cpp b/VaporWaveWars/combat.cpp index 1f0a8a1..dc2ffc6 100644 --- a/VaporWaveWars/combat.cpp +++ b/VaporWaveWars/combat.cpp @@ -3,7 +3,7 @@ Combat::Combat() { ia = false; // ia = true; - attacking = playerOneTurn = true; + state = CombatState::player_atk; player = new Player(0); // enemy = new IaEnemy(1); enemy = new Player(1); @@ -18,12 +18,38 @@ Combat::Combat() { Combat::Combat(bool ia) { this->ia = ia; player = new Player(0); - attacking = playerOneTurn = true; + state = CombatState::player_atk; if (ia) enemy = new IaEnemy(1); else enemy = new Player(1); initShader(); } +bool Combat::isAttack() const { + return state == CombatState::player_atk or state == CombatState::enemy_atk; +} + +bool Combat::isPlayerOne() const { + return state == CombatState::player_def or state == CombatState::player_atk; +} + +void Combat::updateHalo() { + switch(state) { + case CombatState::player_def: + case CombatState::enemy_def: + _shaderHalo.setParameter("type", 0.0f); + break; + case CombatState::enemy_atk: + _shaderHalo.setParameter("type", 1.0f); + break; + case CombatState::player_atk: + _shaderHalo.setParameter("type", 2.0f); + break; + default: + break; + } + +} + void Combat::initShader() { time = 0; _text.create(W_WIDTH, W_HEIGHT); @@ -42,9 +68,8 @@ void Combat::initShader() { sf::IntRect rect = sf::IntRect(0, 0, _plataformT.getSize().x/2, _plataformT.getSize().y); _plataform.setTextureRect(rect); _shaderHalo.loadFromFile(WORK_DIR+"Resources/halo.frag", sf::Shader::Fragment); - _shaderHalo.setParameter("type", 0.0f); _shaderHalo.setParameter("time", time); - + updateHalo(); } void Combat::update(float deltaTime, sf::RenderWindow *window) { @@ -58,7 +83,7 @@ void Combat::update(float deltaTime, sf::RenderWindow *window) { - if (playerOneTurn) { + if (isPlayerOne()) { if(_halo.getPosition().x != W_WIDTH*0.05f) animationTo(false, deltaTime); } @@ -67,14 +92,10 @@ void Combat::update(float deltaTime, sf::RenderWindow *window) { animationTo(true, deltaTime); } - if (!attacking) _shaderHalo.setParameter("type", 0.0f); - else { - if (playerOneTurn)_shaderHalo.setParameter("type", 2.0f); - else _shaderHalo.setParameter("type", 1.0f); - } + updateHalo(); sf::IntRect rect; - if (playerOneTurn) + if (isPlayerOne()) rect = sf::IntRect(0, 0, _plataformT.getSize().x/2, _plataformT.getSize().y); else rect = sf::IntRect(_plataformT.getSize().x/2, 0, _plataformT.getSize().x/2, _plataformT.getSize().y); @@ -93,34 +114,38 @@ void Combat::draw(sf::RenderWindow *window) { } void Combat::updateEvents(sf::Event e) { - if (playerOneTurn) { - bool aux = player->event(e); - if (!aux) { //end of player one ritm - - if (!attacking && !ia) { - if(!player->hitBy(enemy->getAttack())) { - scoreEnemy->incrisScore(); - } - } - else playerOneTurn = aux; - attacking = !attacking; - } + if (isPlayerOne()) { + bool compasFinish = !player->event(e); + enemyManager(compasFinish); } else if (!ia) { - bool aux = !enemy->event(e); - enemyManager(aux); //end of player two not ia ritm + bool compasFinish = !enemy->event(e); + enemyManager(compasFinish); } } -void Combat::enemyManager(bool aux) { - if (aux) { - if (!attacking) { - if(!enemy->hitBy(player->getAttack())) { - scorePlayer->incrisScore(); +void Combat::enemyManager(bool compasFinish) { + if(compasFinish) { + Compas compas; + if(isPlayerOne()) compas = player->getAttack(); + else compas = enemy->getAttack(); + + if(!isAttack()) { + if(!ia) { + bool hit; + if(isPlayerOne()) hit = !player->hitBy(compas); + else hit = !enemy->hitBy(compas); + if(!hit) { + if(isPlayerOne()) + scoreEnemy->incrisScore(); + else + scorePlayer->incrisScore(); + } } } - else playerOneTurn = aux; - attacking = !attacking; + else if(compas.isFailed()) + state = (CombatState::combatState) ((((int) state)+1) % 4); + state = (CombatState::combatState) ((((int) state)+1) % 4); } } diff --git a/VaporWaveWars/combat.hpp b/VaporWaveWars/combat.hpp index 0ddb82f..c7ae50a 100644 --- a/VaporWaveWars/combat.hpp +++ b/VaporWaveWars/combat.hpp @@ -22,7 +22,8 @@ public: void draw(sf::RenderWindow *window) final override; void updateEvents(sf::Event e) final override; private: - bool playerOneTurn, ia, attacking; + bool ia; + CombatState::combatState state; Actor *player, *enemy; float time; @@ -34,6 +35,9 @@ private: void initShader(); void enemyManager(bool aux); void animationTo(bool toEnemy, float deltaTime); + bool isAttack() const; + bool isPlayerOne() const; + void updateHalo(); }; #endif // COMBAT_H diff --git a/VaporWaveWars/commons.hpp b/VaporWaveWars/commons.hpp index d5dd879..7025f3d 100644 --- a/VaporWaveWars/commons.hpp +++ b/VaporWaveWars/commons.hpp @@ -45,4 +45,8 @@ namespace PlayerState { enum playerState{idle, attacking, inMidle, hurt}; } +namespace CombatState { +enum combatState{player_def = 0, player_atk = 1, enemy_def = 2, enemy_atk = 3}; +} + #endif // COMMONS_HPP diff --git a/VaporWaveWars/compas.cpp b/VaporWaveWars/compas.cpp index 18a2253..4db4626 100644 --- a/VaporWaveWars/compas.cpp +++ b/VaporWaveWars/compas.cpp @@ -3,9 +3,11 @@ Compas::Compas() { spaceTime = 1; isPress = false; + failed = false; } void Compas::start() { + failed = false; if (not isPress) { // std::cout << "start" << std::endl; isPress = true; @@ -32,6 +34,11 @@ void Compas::end() { } } +void Compas::fail() { + failed = true; + end(); +} + void Compas::incraeseTime() { ++spaceTime; } @@ -40,6 +47,10 @@ bool Compas::isPressed() const { return isPress; } +bool Compas::isFailed() const { + return failed; +} + int Compas::get (int i) const { return notes[i]; } diff --git a/VaporWaveWars/compas.hpp b/VaporWaveWars/compas.hpp index 5afb2ff..373d6e9 100644 --- a/VaporWaveWars/compas.hpp +++ b/VaporWaveWars/compas.hpp @@ -9,6 +9,7 @@ class Compas { private: bool isPress; + bool failed; int spaceTime; std::vector notes; int get(int i) const; @@ -19,8 +20,10 @@ public: void start(); void add(); void end(); + void fail(); void incraeseTime(); bool isPressed() const; + bool isFailed() const; bool operator ==(const Compas& d) const; }; diff --git a/VaporWaveWars/player.cpp b/VaporWaveWars/player.cpp index 666ca3c..c95d668 100644 --- a/VaporWaveWars/player.cpp +++ b/VaporWaveWars/player.cpp @@ -35,15 +35,16 @@ bool Player::event(sf::Event e) { } else { if (!error) { - compas.end(); + compas.fail(); animate = PlayerState::hurt; error = true; + return false; } } } break; case (sf::Event::KeyReleased): - if (e.key.code == sf::Keyboard::C) { + if (compas.isPressed() and e.key.code == sf::Keyboard::C) { compas.end(); return false; }