diff --git a/Resources/halo.frag b/Resources/halo.frag new file mode 100644 index 0000000..3d1615c --- /dev/null +++ b/Resources/halo.frag @@ -0,0 +1,12 @@ +uniform float time; +uniform bool blue; +uniform sampler2D texture; + +void main(void) { + float transpa = max (sin(time*5.)*100., 50.); + vec4 color = vec4 (246.,111.,231.,transpa)/255.; + if (blue) color = vec4(0.,153.,253.,transpa)/255.; + vec4 pixel = texture2D(texture, gl_TexCoord[0].xy); + + gl_FragColor = pixel * color; +} \ No newline at end of file diff --git a/Resources/shaderHalo.frag b/Resources/shaderHalo.frag new file mode 100644 index 0000000..f276867 --- /dev/null +++ b/Resources/shaderHalo.frag @@ -0,0 +1,9 @@ +// uniform float time2; +uniform bool blue; + +void main(void) { +// float transpa = sin(time2)*255.; + vec4 color = (246,111,231, 255); + if (blue) color = (0,153,253, 255); + gl_FragColor = color; +} \ No newline at end of file diff --git a/Resources/spreadsheet.png b/Resources/spreadsheet.png index a1d42c9..37553da 100644 Binary files a/Resources/spreadsheet.png and b/Resources/spreadsheet.png differ diff --git a/VaporWaveWars/character.hpp b/VaporWaveWars/character.hpp index e0e4065..9e78419 100644 --- a/VaporWaveWars/character.hpp +++ b/VaporWaveWars/character.hpp @@ -9,9 +9,9 @@ private: const int numFrames = 4; const std::string spriteFile = WORK_DIR+"Resources/spreadsheet.png"; //POSICIO PLAYER 1 - float posX1 = W_WIDTH*0.05f, posY1 = W_HEIGHT*0.6f; + float posX1 = W_WIDTH*0.05f, posY1 = W_HEIGHT*0.5f; //POSICIO PLAYER 2 - float posX2 = W_WIDTH*0.65f, posY2 = W_HEIGHT*0.6f; + float posX2 = W_WIDTH*0.65f, posY2 = W_HEIGHT*0.5f; //END CONFIG int magicNumber; diff --git a/VaporWaveWars/combat.cpp b/VaporWaveWars/combat.cpp index 33e6041..7288183 100644 --- a/VaporWaveWars/combat.cpp +++ b/VaporWaveWars/combat.cpp @@ -37,14 +37,23 @@ void Combat::initShader() { _background.setTexture(_text); _shader.loadFromFile(WORK_DIR+"Resources/shader.frag", sf::Shader::Fragment); _shader.setParameter("resolution", sf::Vector2f(W_WIDTH, W_HEIGHT)); + _shader.setParameter("time", time); + + ASSERT(_haloT.loadFromFile(WORK_DIR+"Resources/platform-halo.png")); + _halo.setTexture(_haloT); + _halo.setPosition(W_WIDTH*0.05f, W_HEIGHT*0.5f); + _shaderHalo.loadFromFile(WORK_DIR+"Resources/halo.frag", sf::Shader::Fragment); + _shaderHalo.setParameter("blue", attacking); + _shaderHalo.setParameter("time", time); + } void Combat::update(float deltaTime, sf::RenderWindow *window) { player->update(deltaTime, window); bool aux = enemy->update(deltaTime, window); if (ia) enemyManager(aux); //end of player two ia rythm - time += deltaTime; + time += deltaTime; _shader.setParameter("time", time); for(std::vector::iterator w = waves.begin(); w != waves.end();){ if ((*w)->getDirection() && (*w)->getPosition().x >= 1024) w=waves.erase(w); @@ -55,12 +64,14 @@ void Combat::update(float deltaTime, sf::RenderWindow *window) { ++w; } } + _shaderHalo.setParameter("time", time); } void Combat::draw(sf::RenderWindow *window) { window->draw(_background, &_shader); player->draw(window); enemy->draw(window); + window->draw(_halo, &_shaderHalo); scorePlayer->draw(window); scoreEnemy->draw(window); for(std::vector::iterator w = waves.begin(); w != waves.end(); ++w){ @@ -71,6 +82,7 @@ void Combat::draw(sf::RenderWindow *window) { void Combat::updateEvents(sf::Event e) { if (playerOneTurn) { if(e.type == sf::Event::KeyPressed && e.key.code == sf::Keyboard::C && !attacking) doMahWaves(!playerOneTurn); + _halo.setPosition(W_WIDTH*0.05f, W_HEIGHT*0.5f); bool aux = player->event(e, !attacking); if (!aux) { //end of player one ritm @@ -83,11 +95,13 @@ void Combat::updateEvents(sf::Event e) { } else playerOneTurn = aux; attacking = !attacking; + _shaderHalo.setParameter("blue", attacking); } } else if (!ia) { if(e.type == sf::Event::KeyPressed && e.key.code == sf::Keyboard::C && !attacking) doMahWaves(!playerOneTurn); + _halo.setPosition(W_WIDTH*0.65f, W_HEIGHT*0.5f); bool aux = !enemy->event(e, !attacking); enemyManager(aux); //end of player two not ia ritm } @@ -102,6 +116,7 @@ void Combat::enemyManager(bool aux) { } else playerOneTurn = aux; attacking = !attacking; + _shaderHalo.setParameter("blue", attacking); } } diff --git a/VaporWaveWars/combat.hpp b/VaporWaveWars/combat.hpp index 190b4a2..643f101 100644 --- a/VaporWaveWars/combat.hpp +++ b/VaporWaveWars/combat.hpp @@ -11,30 +11,31 @@ #include "score.hpp" #include "wave.hpp" class Combat : public Scene { -public: - Combat(); - ~Combat(); - Combat(bool ia); - Combat(const Combat& m) = delete; - Combat(const Combat&& m) = delete; - Combat& operator=(Combat& m) = delete; - Combat& operator=(Combat&& m) = delete; - void update(float deltaTime, sf::RenderWindow *window) final override; - void draw(sf::RenderWindow *window) final override; - void updateEvents(sf::Event e) final override; -private: - bool playerOneTurn, ia, attacking; - Actor *player; - Actor *enemy; - float time; - sf::Texture _text; - sf::Sprite _background; - sf::Shader _shader; - std::vector waves; - Score *scoreEnemy, *scorePlayer; - void initShader(); - void enemyManager(bool aux); - void doMahWaves(bool p); + public: + Combat(); + ~Combat(); + Combat(bool ia); + Combat(const Combat& m) = delete; + Combat(const Combat&& m) = delete; + Combat& operator=(Combat& m) = delete; + Combat& operator=(Combat&& m) = delete; + void update(float deltaTime, sf::RenderWindow *window) final override; + void draw(sf::RenderWindow *window) final override; + void updateEvents(sf::Event e) final override; + private: + bool playerOneTurn, ia, attacking; + Actor *player, *enemy; + float time; + + std::vector waves; + sf::Texture _text, _haloT, _plataformT; + sf::Sprite _background, _halo, _plataform; + sf::Shader _shader, _shaderHalo; + + Score *scoreEnemy, *scorePlayer; + void initShader(); + void enemyManager(bool aux); + void doMahWaves(bool p); }; #endif // COMBAT_H diff --git a/VaporWaveWars/player.cpp b/VaporWaveWars/player.cpp index e2042bd..866ec03 100644 --- a/VaporWaveWars/player.cpp +++ b/VaporWaveWars/player.cpp @@ -35,8 +35,9 @@ bool Player::event(sf::Event e, bool def) { } else { compas.end(); + if (!error || (error && animate == PlayerState::idle)) + animate = PlayerState::hurt; error = true; - if (animate != PlayerState::inMidle) animate = PlayerState::hurt; } } break;