diff --git a/Resources/Sounds/Samples/1.wav b/Resources/Sounds/Samples/1.wav new file mode 100644 index 0000000..b536c93 Binary files /dev/null and b/Resources/Sounds/Samples/1.wav differ diff --git a/Resources/Sounds/Samples/10.wav b/Resources/Sounds/Samples/10.wav new file mode 100644 index 0000000..58b94a2 Binary files /dev/null and b/Resources/Sounds/Samples/10.wav differ diff --git a/Resources/Sounds/Samples/11.wav b/Resources/Sounds/Samples/11.wav new file mode 100644 index 0000000..36878c8 Binary files /dev/null and b/Resources/Sounds/Samples/11.wav differ diff --git a/Resources/Sounds/Samples/12.wav b/Resources/Sounds/Samples/12.wav new file mode 100644 index 0000000..fb733b6 Binary files /dev/null and b/Resources/Sounds/Samples/12.wav differ diff --git a/Resources/Sounds/Samples/13.wav b/Resources/Sounds/Samples/13.wav new file mode 100644 index 0000000..eed1eb3 Binary files /dev/null and b/Resources/Sounds/Samples/13.wav differ diff --git a/Resources/Sounds/Samples/14.wav b/Resources/Sounds/Samples/14.wav new file mode 100644 index 0000000..cefb93b Binary files /dev/null and b/Resources/Sounds/Samples/14.wav differ diff --git a/Resources/Sounds/Samples/15.wav b/Resources/Sounds/Samples/15.wav new file mode 100644 index 0000000..b005f74 Binary files /dev/null and b/Resources/Sounds/Samples/15.wav differ diff --git a/Resources/Sounds/Samples/16.wav b/Resources/Sounds/Samples/16.wav new file mode 100644 index 0000000..92d76f8 Binary files /dev/null and b/Resources/Sounds/Samples/16.wav differ diff --git a/Resources/Sounds/Samples/17.wav b/Resources/Sounds/Samples/17.wav new file mode 100644 index 0000000..ede0b8d Binary files /dev/null and b/Resources/Sounds/Samples/17.wav differ diff --git a/Resources/Sounds/Samples/18.wav b/Resources/Sounds/Samples/18.wav new file mode 100644 index 0000000..fc20f13 Binary files /dev/null and b/Resources/Sounds/Samples/18.wav differ diff --git a/Resources/Sounds/Samples/19.wav b/Resources/Sounds/Samples/19.wav new file mode 100644 index 0000000..efc9cf9 Binary files /dev/null and b/Resources/Sounds/Samples/19.wav differ diff --git a/Resources/Sounds/Samples/2.wav b/Resources/Sounds/Samples/2.wav new file mode 100644 index 0000000..ade2369 Binary files /dev/null and b/Resources/Sounds/Samples/2.wav differ diff --git a/Resources/Sounds/Samples/20.wav b/Resources/Sounds/Samples/20.wav new file mode 100644 index 0000000..eb2982f Binary files /dev/null and b/Resources/Sounds/Samples/20.wav differ diff --git a/Resources/Sounds/Samples/3.wav b/Resources/Sounds/Samples/3.wav new file mode 100644 index 0000000..d3127a5 Binary files /dev/null and b/Resources/Sounds/Samples/3.wav differ diff --git a/Resources/Sounds/Samples/4.wav b/Resources/Sounds/Samples/4.wav new file mode 100644 index 0000000..b1d4624 Binary files /dev/null and b/Resources/Sounds/Samples/4.wav differ diff --git a/Resources/Sounds/Samples/5.wav b/Resources/Sounds/Samples/5.wav new file mode 100644 index 0000000..fd0b946 Binary files /dev/null and b/Resources/Sounds/Samples/5.wav differ diff --git a/Resources/Sounds/Samples/6.wav b/Resources/Sounds/Samples/6.wav new file mode 100644 index 0000000..49c3394 Binary files /dev/null and b/Resources/Sounds/Samples/6.wav differ diff --git a/Resources/Sounds/Samples/7.wav b/Resources/Sounds/Samples/7.wav new file mode 100644 index 0000000..89318b9 Binary files /dev/null and b/Resources/Sounds/Samples/7.wav differ diff --git a/Resources/Sounds/Samples/8.wav b/Resources/Sounds/Samples/8.wav new file mode 100644 index 0000000..7795784 Binary files /dev/null and b/Resources/Sounds/Samples/8.wav differ diff --git a/Resources/Sounds/Samples/9.wav b/Resources/Sounds/Samples/9.wav new file mode 100644 index 0000000..a7953b0 Binary files /dev/null and b/Resources/Sounds/Samples/9.wav differ diff --git a/Resources/Sounds/wave.wav b/Resources/Sounds/wave.wav new file mode 100644 index 0000000..aa32d29 Binary files /dev/null and b/Resources/Sounds/wave.wav differ diff --git a/Resources/button-spreadsheet.png b/Resources/button-spreadsheet.png new file mode 100644 index 0000000..69ceb04 Binary files /dev/null and b/Resources/button-spreadsheet.png differ diff --git a/Resources/numbers-spreadsheet.png b/Resources/numbers-spreadsheet.png new file mode 100644 index 0000000..88ecc07 Binary files /dev/null and b/Resources/numbers-spreadsheet.png differ diff --git a/Resources/shader.frag b/Resources/shader.frag index e9eb5b6..7844480 100644 --- a/Resources/shader.frag +++ b/Resources/shader.frag @@ -6,7 +6,7 @@ float rand(vec2 n) { } float line(float p, float x, float glow) { - if (abs(p - x) < 0.025) return 1; + if (abs(p - x) < 0.025) return 1.; return 1. - pow(abs(p - x), glow); } diff --git a/Resources/spreadsheet-alt.png b/Resources/spreadsheet-alt.png deleted file mode 100644 index 4512742..0000000 Binary files a/Resources/spreadsheet-alt.png and /dev/null differ diff --git a/VaporWaveWars/VaporWaveWars.pro b/VaporWaveWars/VaporWaveWars.pro index f34d67f..d529735 100644 --- a/VaporWaveWars/VaporWaveWars.pro +++ b/VaporWaveWars/VaporWaveWars.pro @@ -15,7 +15,8 @@ SOURCES += main.cpp \ combat.cpp \ player.cpp \ iaenemy.cpp \ - actor.cpp + actor.cpp \ + soundmanager.cpp HEADERS += \ game.hpp \ @@ -29,4 +30,5 @@ HEADERS += \ combat.hpp \ player.hpp \ iaenemy.hpp \ - actor.hpp + actor.hpp \ + soundmanager.hpp diff --git a/VaporWaveWars/actor.cpp b/VaporWaveWars/actor.cpp index 5a3b5bc..cbd6f6d 100644 --- a/VaporWaveWars/actor.cpp +++ b/VaporWaveWars/actor.cpp @@ -1,8 +1,13 @@ #include "actor.hpp" -Actor::Actor() {} +Actor::Actor() { + score = 0; + animate = PlayerState::attacking; + this->character = new Character(0); +} Actor::Actor(int num) { - animate = true; + score = 0; + animate = PlayerState::attacking; this->character = new Character(num); } @@ -12,18 +17,30 @@ void Actor::draw(sf::RenderWindow *window) { bool Actor::update(float deltaTime, sf::RenderWindow *window) { character->update(deltaTime); - if (animate) { + if (animate == PlayerState::attacking) { character->setState(PlayerState::attacking); - animate = false; + animate = PlayerState::inMidle; + } + else if (animate == PlayerState::inMidle) { + if (character->isLastFrame()) animate = PlayerState::idle; } return this->updateLogic(deltaTime, window); } -void Actor::hitBy(Compas enemy) const { +bool Actor::hitBy(Compas enemy) const { if (enemy == compas) std::cout << "dodge" << std::endl; else std::cout << "hit" << std::endl; + return enemy == compas; } Compas Actor::getAttack() const { return compas; } + +void Actor::upScore() { + ++score; +} + +int Actor::getScore() const { + return score; +} diff --git a/VaporWaveWars/actor.hpp b/VaporWaveWars/actor.hpp index f876f70..6d465ac 100644 --- a/VaporWaveWars/actor.hpp +++ b/VaporWaveWars/actor.hpp @@ -12,12 +12,15 @@ public: Actor(int num); bool update(float deltaTime, sf::RenderWindow *window); void draw(sf::RenderWindow *window); - void hitBy(Compas enemy) const; + bool hitBy(Compas enemy) const; Compas getAttack() const; virtual bool event(sf::Event e) = 0; + void upScore(); + int getScore() const; protected: + int score; Compas compas; - bool animate; + PlayerState::playerState animate; virtual bool updateLogic(float deltaTime, sf::RenderWindow *window) = 0; private: Character *character; diff --git a/VaporWaveWars/combat.cpp b/VaporWaveWars/combat.cpp index bd904b3..6ea3627 100644 --- a/VaporWaveWars/combat.cpp +++ b/VaporWaveWars/combat.cpp @@ -8,6 +8,8 @@ Combat::Combat() { // enemy = new IaEnemy(1); enemy = new Player(1); initShader(); + SoundManager::load(); + SoundManager::playMusic("music"); } Combat::Combat(bool ia) { @@ -45,7 +47,11 @@ void Combat::updateEvents(sf::Event e) { if (playerOneTurn) { bool aux = player->event(e); if (!aux) { //end of player one ritm - if (!attacking) player->hitBy(enemy->getAttack()); + if (!attacking) { + if(!player->hitBy(enemy->getAttack())) enemy->upScore(); + std::cout << "player1: " << player->getScore() << std::endl; + std::cout << "player2: " << enemy->getScore() << std::endl; + } else playerOneTurn = aux; attacking = !attacking; } @@ -58,7 +64,11 @@ void Combat::updateEvents(sf::Event e) { void Combat::enemyManager(bool aux) { if (aux) { - if (!attacking) enemy->hitBy(player->getAttack()); + if (!attacking) { + if(!enemy->hitBy(player->getAttack())) player->upScore(); + std::cout << "player1: " << player->getScore() << std::endl; + std::cout << "player2: " << enemy->getScore() << std::endl; + } else playerOneTurn = aux; attacking = !attacking; } diff --git a/VaporWaveWars/combat.hpp b/VaporWaveWars/combat.hpp index 557011e..3764fc1 100644 --- a/VaporWaveWars/combat.hpp +++ b/VaporWaveWars/combat.hpp @@ -7,6 +7,7 @@ #include "player.hpp" #include "iaenemy.hpp" #include "actor.hpp" +#include "soundmanager.hpp" class Combat : public Scene { public: diff --git a/VaporWaveWars/commons.hpp b/VaporWaveWars/commons.hpp index 77f8c44..56bd793 100644 --- a/VaporWaveWars/commons.hpp +++ b/VaporWaveWars/commons.hpp @@ -11,8 +11,8 @@ const int SCENE_NUM = 4; -#define MARGEERR 0.30f -#define BLACKVALUE 0.00025f +#define MARGEERR 0.05f +#define BLACKVALUE 0.60f #define W_WIDTH 800 #define W_HEIGHT 600 const std::string WORK_DIR(getenv("WORK_DIR")); @@ -41,7 +41,7 @@ namespace GameScene { } namespace PlayerState { - enum playerState{idle, attacking}; + enum playerState{idle, attacking, inMidle}; } #endif // COMMONS_HPP diff --git a/VaporWaveWars/iaenemy.cpp b/VaporWaveWars/iaenemy.cpp index 45b41bb..36944f3 100644 --- a/VaporWaveWars/iaenemy.cpp +++ b/VaporWaveWars/iaenemy.cpp @@ -1,6 +1,6 @@ #include "iaenemy.hpp" -IaEnemy::IaEnemy() : Actor(1) {} +IaEnemy::IaEnemy() : Actor() {} IaEnemy::IaEnemy(int numplayer): Actor(numplayer) {} bool IaEnemy::updateLogic(float deltaTime, sf::RenderWindow *window) { diff --git a/VaporWaveWars/mygame.cpp b/VaporWaveWars/mygame.cpp index 6a07b9c..b7fda60 100644 --- a/VaporWaveWars/mygame.cpp +++ b/VaporWaveWars/mygame.cpp @@ -3,14 +3,17 @@ MyGame::MyGame() { _scene = GameScene::menu; _scenes = std::vector(SCENE_NUM); - _scenes[GameScene::menu] = &_menu; - _scenes[GameScene::inGame] = &_combat; - _scenes[GameScene::help] = &_menu; - _scenes[GameScene::credits] = &_menu; + _menu = new Menu; + _scenes[GameScene::menu] = _menu; + _scenes[GameScene::inGame] = _combat; + _scenes[GameScene::help] = _menu; + _scenes[GameScene::credits] = _menu; std::cout << "in menu" << std::endl; } MyGame::~MyGame() { + delete _menu; + delete _combat; } MyGame* i(){ @@ -18,6 +21,12 @@ MyGame* i(){ void MyGame::changeScene(GameScene::gameScene n){ _scene = n; + if(_scenes[_scene] == NULL){ + if(_scene == GameScene::inGame){ + _combat = new Combat; + _scenes[_scene] = _combat; + } + } } // Main game loop diff --git a/VaporWaveWars/mygame.hpp b/VaporWaveWars/mygame.hpp index 469e30f..dad9ad3 100644 --- a/VaporWaveWars/mygame.hpp +++ b/VaporWaveWars/mygame.hpp @@ -4,19 +4,21 @@ #include "menu.hpp" #include "combat.hpp" +#include "soundmanager.hpp" + class MyGame : public Game{ -public: - MyGame(); - virtual ~MyGame(); - static MyGame* i(); - void changeScene(GameScene::gameScene n); -private: - GameScene::gameScene _scene; - std::vector _scenes; - Menu _menu; - Combat _combat; - virtual void update(float deltaTime, sf::RenderWindow *window) final override; - virtual void draw(sf::RenderWindow *window) final override; + public: + MyGame(); + virtual ~MyGame(); + static MyGame* i(); + void changeScene(GameScene::gameScene n); + private: + GameScene::gameScene _scene; + std::vector _scenes; + Menu* _menu = NULL; + Combat* _combat = NULL; + virtual void update(float deltaTime, sf::RenderWindow *window) final override; + virtual void draw(sf::RenderWindow *window) final override; }; #endif // MYGAME_HPP diff --git a/VaporWaveWars/player.cpp b/VaporWaveWars/player.cpp index d1c8520..5b17cb7 100644 --- a/VaporWaveWars/player.cpp +++ b/VaporWaveWars/player.cpp @@ -2,10 +2,12 @@ Player::Player(int num) : Actor(num) { compas = Compas(); + error = false; } -Player::Player() : Actor(1) { +Player::Player() : Actor() { compas = Compas(); + error = false; } bool Player::updateLogic(float deltaTime, sf::RenderWindow *window) { @@ -16,10 +18,19 @@ bool Player::updateLogic(float deltaTime, sf::RenderWindow *window) { bool Player::event(sf::Event e) { switch(e.type) { case (sf::Event::KeyPressed): - if(e.key.code == sf::Keyboard::C) compas.start(); + if(e.key.code == sf::Keyboard::C) { + compas.start(); + error = false; + } if(e.key.code == sf::Keyboard::Space) { - compas.add(); - if (compas.isPressed() && !animate) animate = true; + if (animate == PlayerState::idle && !error) { + compas.add(); + if (compas.isPressed()) animate = PlayerState::attacking; + } + else { + compas.end(); + error = true; //weird? + } } break; case (sf::Event::KeyReleased): diff --git a/VaporWaveWars/player.hpp b/VaporWaveWars/player.hpp index 50f3d80..c3883aa 100644 --- a/VaporWaveWars/player.hpp +++ b/VaporWaveWars/player.hpp @@ -12,6 +12,8 @@ public: protected: bool updateLogic(float deltaTime, sf::RenderWindow *window); +private: + bool error; }; #endif // PLAYER_H diff --git a/VaporWaveWars/soundmanager.cpp b/VaporWaveWars/soundmanager.cpp new file mode 100644 index 0000000..5e0ff9c --- /dev/null +++ b/VaporWaveWars/soundmanager.cpp @@ -0,0 +1,140 @@ +#include "soundmanager.hpp" + +//PLACE HERE A FORWARD DECLARATION OF YOUR STATIC VARIABLES +//sf::SoundBuffer SoundManager::SOUND_NAME; +//sf::Music SoundManager::MUSIC_NAME; + +/* Example: +sf::Music SoundManager::overWorldMusic;*/ +sf::Music SoundManager::worldMusic; +sf::SoundBuffer SoundManager::atk1; +sf::SoundBuffer SoundManager::atk2; +sf::SoundBuffer SoundManager::atk3; +sf::SoundBuffer SoundManager::atk4; +sf::SoundBuffer SoundManager::atk5; +sf::SoundBuffer SoundManager::atk6; +sf::SoundBuffer SoundManager::atk7; +sf::SoundBuffer SoundManager::atk8; +sf::SoundBuffer SoundManager::atk9; +sf::SoundBuffer SoundManager::atk10; +sf::SoundBuffer SoundManager::atk11; +sf::SoundBuffer SoundManager::atk12; +sf::SoundBuffer SoundManager::atk13; +sf::SoundBuffer SoundManager::atk14; +sf::SoundBuffer SoundManager::atk15; +sf::SoundBuffer SoundManager::atk16; +sf::SoundBuffer SoundManager::atk17; +sf::SoundBuffer SoundManager::atk18; +sf::SoundBuffer SoundManager::atk19; +sf::SoundBuffer SoundManager::atk20; + + +std::map SoundManager::soundMap; +std::map SoundManager::musicMap; +std::map::iterator SoundManager::sit; +std::map::iterator SoundManager::mit; + + +void SoundManager::load(){ + + //LOAD HERE YOUR SOUNDS AND MUSIC + /* Example: */ + musicMap["music"].openFromFile(WORK_DIR+"Resources/Sounds/wave.wav"); + + ASSERT(atk1.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/1.wav")); + soundMap["atk1"].setBuffer(atk1); + ASSERT(atk2.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/2.wav")); + soundMap["atk2"].setBuffer(atk2); + ASSERT(atk3.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/3.wav")); + soundMap["atk3"].setBuffer(atk3); + ASSERT(atk4.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/4.wav")); + soundMap["atk4"].setBuffer(atk4); + ASSERT(atk5.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/5.wav")); + soundMap["atk5"].setBuffer(atk5); + ASSERT(atk6.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/6.wav")); + soundMap["atk6"].setBuffer(atk6); + ASSERT(atk7.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/7.wav")); + soundMap["atk7"].setBuffer(atk7); + ASSERT(atk8.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/8.wav")); + soundMap["atk8"].setBuffer(atk8); + ASSERT(atk9.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/9.wav")); + soundMap["atk9"].setBuffer(atk9); + ASSERT(atk10.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/10.wav")); + soundMap["atk10"].setBuffer(atk10); + ASSERT(atk11.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/11.wav")); + soundMap["atk11"].setBuffer(atk11); + ASSERT(atk12.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/12.wav")); + soundMap["atk12"].setBuffer(atk12); + ASSERT(atk13.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/13.wav")); + soundMap["atk13"].setBuffer(atk13); + ASSERT(atk14.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/14.wav")); + soundMap["atk14"].setBuffer(atk14); + ASSERT(atk15.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/15.wav")); + soundMap["atk15"].setBuffer(atk15); + ASSERT(atk16.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/16.wav")); + soundMap["atk16"].setBuffer(atk16); + ASSERT(atk17.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/17.wav")); + soundMap["atk17"].setBuffer(atk17); + ASSERT(atk18.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/18.wav")); + soundMap["atk18"].setBuffer(atk18); + ASSERT(atk19.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/19.wav")); + soundMap["atk19"].setBuffer(atk19); + ASSERT(atk20.loadFromFile(WORK_DIR+"Resources/Sounds/Samples/20.wav")); + soundMap["atk20"].setBuffer(atk20); + +} + + + +void SoundManager::playSound(std::string name){ + sit = soundMap.find(name); + if (sit != soundMap.end()) (sit->second).play(); +} + +void SoundManager::playMusic(std::string name){ +mit = musicMap.find(name); +if (mit != musicMap.end()) (mit->second).play(); + +} + +void SoundManager::stopMusic(std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).stop(); + +} + +void SoundManager::pauseMusic(std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).pause(); + +} + +void SoundManager::setLoop(bool loop, std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).setLoop(loop); + +} + +void SoundManager::setPitch(float pitch, std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).setPitch(pitch); +} + +void SoundManager::setVolume(float volume, std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).setVolume(volume); +} + +void SoundManager::setPosition(float x, float y, float z, std::string name){ + mit = musicMap.find(name); + if (mit != musicMap.end()) (mit->second).setPosition(x,y,z); +} + + +void SoundManager::setGlobalSoundVolumen(float volume) { + for (auto it = soundMap.begin(); it != soundMap.end(); ++it) (it->second).setVolume(volume); +} + +void SoundManager::setGlobalMusicVolumen(float volume) { + for (auto it = musicMap.begin(); it != musicMap.end(); ++it) (it->second).setVolume(volume); +} diff --git a/VaporWaveWars/soundmanager.hpp b/VaporWaveWars/soundmanager.hpp new file mode 100644 index 0000000..8c8a3ac --- /dev/null +++ b/VaporWaveWars/soundmanager.hpp @@ -0,0 +1,62 @@ +#ifndef SOUNDMANAGER_HPP +#define SOUNDMANAGER_HPP + +#include +#include +#include "commons.hpp" +//#define SOUND static sf::Sound + +class SoundManager { + + public: + static void load(); + + static void playSound(std::string name); + static void playMusic(std::string name); + static void stopMusic(std::string name); + static void pauseMusic(std::string name); + static void setLoop(bool loop, std::string name); + static void setPitch(float pitch, std::string name); + static void setVolume(float volume, std::string name); + static void setPosition(float x, float y, float z, std::string name); + static void setGlobalSoundVolumen(float volume); + static void setGlobalMusicVolumen(float volume); + + private: + + + //INITIALIZE YOUR VARIABLES AS STATIC sf::Music or sf::SoundBuffer + /* Example:*/ + static sf::Music worldMusic; + static sf::SoundBuffer atk1; + static sf::SoundBuffer atk2; + static sf::SoundBuffer atk3; + static sf::SoundBuffer atk4; + static sf::SoundBuffer atk5; + static sf::SoundBuffer atk6; + static sf::SoundBuffer atk7; + static sf::SoundBuffer atk8; + static sf::SoundBuffer atk9; + static sf::SoundBuffer atk10; + static sf::SoundBuffer atk11; + static sf::SoundBuffer atk12; + static sf::SoundBuffer atk13; + static sf::SoundBuffer atk14; + static sf::SoundBuffer atk15; + static sf::SoundBuffer atk16; + static sf::SoundBuffer atk17; + static sf::SoundBuffer atk18; + static sf::SoundBuffer atk19; + static sf::SoundBuffer atk20; + + + + + static std::map soundMap; + static std::map musicMap; + static std::map::iterator sit; + static std::map::iterator mit; + +}; + +#endif // SOUNDMANAGER_HPP