diff --git a/VaporWaveWars/actor.cpp b/VaporWaveWars/actor.cpp index b5ffa03..df6ee96 100644 --- a/VaporWaveWars/actor.cpp +++ b/VaporWaveWars/actor.cpp @@ -1,15 +1,18 @@ #include "actor.hpp" - Actor::Actor() {} +Actor::Actor(int num) { + this->character = new Character(num); +} + void Actor::draw(sf::RenderWindow *window) { - window->draw(character); + window->draw(*character); } bool Actor::update(float deltaTime, sf::RenderWindow *window) { - character.update(deltaTime); + character->update(deltaTime); if (animate) { - character.setState(PlayerState::attacking); + character->setState(PlayerState::attacking); animate = false; } return this->updateLogic(deltaTime, window); diff --git a/VaporWaveWars/actor.hpp b/VaporWaveWars/actor.hpp index cbf08e9..158a763 100644 --- a/VaporWaveWars/actor.hpp +++ b/VaporWaveWars/actor.hpp @@ -7,6 +7,7 @@ class Actor { public: Actor(); + Actor(int num); bool update(float deltaTime, sf::RenderWindow *window); void draw(sf::RenderWindow *window) ; virtual bool event(sf::Event e) = 0; @@ -14,7 +15,7 @@ protected: bool animate; virtual bool updateLogic(float deltaTime, sf::RenderWindow *window) = 0; private: - Character character; + Character *character; }; #endif // ENEMY_H diff --git a/VaporWaveWars/character.cpp b/VaporWaveWars/character.cpp index cf12d83..6be6e65 100644 --- a/VaporWaveWars/character.cpp +++ b/VaporWaveWars/character.cpp @@ -1,36 +1,34 @@ #include "character.hpp" -Character::Character(){ - sf::Texture texture; +Character::Character(int player){ + playerNum = player; ASSERT(texture.loadFromFile(spriteFile)); - height = texture.getSize().y; - width = texture.getSize().x; - next = 0; + height = texture.getSize().y/5; + width = texture.getSize().x/5; + next = timestamp = indexX = indexY = 0; setTexture(texture); + sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height); + setTextureRect(rect); + actualState = previousState = PlayerState::idle; + + if (playerNum == 0){ + setPosition(posX1, posY1); + } + else{ + setPosition(posX2, posY2); + } } void Character::update(float deltaTime){ timestamp += deltaTime; if (timestamp >= frameTime){ timestamp = 0; - if (actualState == previousState){ - if (actualState == PlayerState::idle){ - indexX = (indexX+1)%numFrames; - } - else if (actualState == PlayerState::attacking){ - if (indexX == width){ - indexX = 0; - actualState = PlayerState::idle; - } - } + + if (actualState == PlayerState::attacking and indexX >= 3){ + setState(PlayerState::idle); } else { - indexX = 0; - if (actualState == PlayerState::idle) - actualState = PlayerState::attacking; - - else if (actualState == PlayerState::attacking) - actualState = PlayerState::idle; + indexX = (indexX+1)%4; } sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height); @@ -38,3 +36,16 @@ void Character::update(float deltaTime){ } } +void Character::setState(PlayerState::playerState state){ + previousState = actualState; + actualState = state; + if (state == PlayerState::idle){ + indexX = 0; + indexY = 0; + } + else{ + indexX = 0; + indexY = 1; + } +} + diff --git a/VaporWaveWars/character.hpp b/VaporWaveWars/character.hpp index 3f84c1a..95e401b 100644 --- a/VaporWaveWars/character.hpp +++ b/VaporWaveWars/character.hpp @@ -8,16 +8,21 @@ private: const double frameTime = 0.2; const int numFrames = 4; const std::string spriteFile = "./Resources/spreadsheet.png"; + //POSICIO PLAYER 1 + float posX1 = 0, posY1 = 0; + //POSICIO PLAYER 2 + float posX2 = 300, posY2 = 0; //END CONFIG sf::Texture texture; int indexX, indexY, width, height; - int posX, posY; + int playerNum; PlayerState::playerState actualState, previousState; float timestamp, next; public: Character(); + Character(int player); void update(float deltaTime); void setState(PlayerState::playerState state); diff --git a/VaporWaveWars/combat.cpp b/VaporWaveWars/combat.cpp index 262640b..ce56cd3 100644 --- a/VaporWaveWars/combat.cpp +++ b/VaporWaveWars/combat.cpp @@ -2,15 +2,17 @@ Combat::Combat() { ia = playerOneTurn = true; - enemy = new IaEnemy(); + player = new Player(0); + enemy = new IaEnemy(1); initShader(); } Combat::Combat(bool ia) { this->ia = ia; + player = new Player(0); playerOneTurn = true; - if (ia) enemy = new IaEnemy(); - else enemy = new Player(); + if (ia) enemy = new IaEnemy(1); + else enemy = new Player(1); } void Combat::initShader() { @@ -22,19 +24,19 @@ void Combat::initShader() { } void Combat::update(float deltaTime, sf::RenderWindow *window) { - if (playerOneTurn) player.update(deltaTime, window); - else if (ia) playerOneTurn = enemy->update(deltaTime, window); + player->update(deltaTime, window); + enemy->update(deltaTime, window); time += deltaTime; _shader.setParameter("time", time); } void Combat::draw(sf::RenderWindow *window) { - player.draw(window); + player->draw(window); enemy->draw(window); window->draw(_background, &_shader); } void Combat::updateEvents(sf::Event e) { - if (playerOneTurn) playerOneTurn = player.event(e); + if (playerOneTurn) playerOneTurn = player->event(e); else if (!ia) playerOneTurn = !enemy->event(e); } diff --git a/VaporWaveWars/combat.hpp b/VaporWaveWars/combat.hpp index c4b610f..cb0d9be 100644 --- a/VaporWaveWars/combat.hpp +++ b/VaporWaveWars/combat.hpp @@ -21,7 +21,7 @@ public: void updateEvents(sf::Event e) final override; private: bool playerOneTurn, ia; - Player player; + Actor *player; Actor *enemy; float time; sf::Texture _text; diff --git a/VaporWaveWars/iaenemy.cpp b/VaporWaveWars/iaenemy.cpp index ce3bf4c..1b1a8c0 100644 --- a/VaporWaveWars/iaenemy.cpp +++ b/VaporWaveWars/iaenemy.cpp @@ -1,7 +1,7 @@ #include "iaenemy.hpp" -IaEnemy::IaEnemy() {} - +IaEnemy::IaEnemy() : Actor(1) {} +IaEnemy::IaEnemy(int numplayer): Actor(numplayer) {} bool IaEnemy::updateLogic(float deltaTime, sf::RenderWindow *window) { //some playe return true return true; diff --git a/VaporWaveWars/iaenemy.hpp b/VaporWaveWars/iaenemy.hpp index bcd1a64..8b40f3e 100644 --- a/VaporWaveWars/iaenemy.hpp +++ b/VaporWaveWars/iaenemy.hpp @@ -6,6 +6,7 @@ class IaEnemy : public Actor { public: IaEnemy(); + IaEnemy(int player); bool event(sf::Event e) final override; protected: bool updateLogic(float deltaTime, sf::RenderWindow *window); diff --git a/VaporWaveWars/player.cpp b/VaporWaveWars/player.cpp index c68fdba..d5e82e9 100644 --- a/VaporWaveWars/player.cpp +++ b/VaporWaveWars/player.cpp @@ -1,6 +1,11 @@ #include "player.hpp" -Player::Player() { +Player::Player(int num) : Actor(num) { + animate = false; + compas = Compas(); +} + +Player::Player() : Actor(1) { animate = false; compas = Compas(); } diff --git a/VaporWaveWars/player.hpp b/VaporWaveWars/player.hpp index 1a853d9..3e9a992 100644 --- a/VaporWaveWars/player.hpp +++ b/VaporWaveWars/player.hpp @@ -7,6 +7,7 @@ class Player : public Actor { public: Player(); + Player(int num); bool event(sf::Event e) final override; private: Compas compas; diff --git a/build-VaporWaveWars-Desktop_Qt_5_7_0_GCC_64bit-Debug/VaporWaveWars b/build-VaporWaveWars-Desktop_Qt_5_7_0_GCC_64bit-Debug/VaporWaveWars index caf5d43..714c3a9 100755 Binary files a/build-VaporWaveWars-Desktop_Qt_5_7_0_GCC_64bit-Debug/VaporWaveWars and b/build-VaporWaveWars-Desktop_Qt_5_7_0_GCC_64bit-Debug/VaporWaveWars differ