diff --git a/data/gfx/player1_pal2.gif b/data/gfx/player1_pal2.gif new file mode 100644 index 0000000..58a13f6 Binary files /dev/null and b/data/gfx/player1_pal2.gif differ diff --git a/data/gfx/player1_pal3.gif b/data/gfx/player1_pal3.gif new file mode 100644 index 0000000..8adecb7 Binary files /dev/null and b/data/gfx/player1_pal3.gif differ diff --git a/source/common/texture.cpp b/source/common/texture.cpp index 13fdc67..5229523 100644 --- a/source/common/texture.cpp +++ b/source/common/texture.cpp @@ -38,7 +38,8 @@ Texture::Texture(SDL_Renderer *renderer, std::string path, bool verbose) surface = loadSurface(path.c_str()); addPalette(path.c_str()); setPaletteColor(0, 0, 0x00000000); - createBlank(renderer, width, height); + createBlank(renderer, width, height, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING); + SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); flipSurface(); } } @@ -76,7 +77,7 @@ bool Texture::loadFromFile(std::string path, SDL_Renderer *renderer, bool verbos if (req_format == STBI_rgb) { depth = 24; - pitch = 3 * width; // 3 bytes por pixel * pixels per linea + pitch = 3 * width; // 3 bytes por pixel * pixels por linea pixel_format = SDL_PIXELFORMAT_RGB24; } else diff --git a/source/director.cpp b/source/director.cpp index 7836925..f9198f3 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -365,6 +365,8 @@ bool Director::setFileList() asset->add(prefix + "/data/gfx/player1.gif", t_bitmap); asset->add(prefix + "/data/gfx/player1_pal1.gif", t_bitmap); + asset->add(prefix + "/data/gfx/player1_pal2.gif", t_bitmap); + asset->add(prefix + "/data/gfx/player1_pal3.gif", t_bitmap); asset->add(prefix + "/data/gfx/player2.gif", t_bitmap); asset->add(prefix + "/data/gfx/player.ani", t_data); asset->add(prefix + "/data/gfx/player1_power.gif", t_bitmap); diff --git a/source/game.cpp b/source/game.cpp index 2d80081..504e3ae 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -455,6 +455,8 @@ void Game::loadMedia() // Texturas - Player1 Texture *player1 = new Texture(renderer, asset->get("player1.gif")); player1->addPalette(asset->get("player1_pal1.gif")); + player1->addPalette(asset->get("player1_pal2.gif")); + player1->addPalette(asset->get("player1_pal3.gif")); player1Textures.push_back(player1); Texture *player1Power = new Texture(renderer, asset->get("player1_power.gif")); diff --git a/source/player.cpp b/source/player.cpp index f0e89a6..874e1a3 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -155,32 +155,12 @@ void Player::move() // Pinta el jugador en pantalla void Player::render() { - if (isAlive()) + if (powerUp) { - if (invulnerable) - { - if ((invulnerableCounter % 6) > 2) - { - if (powerUp) - { - powerSprite->render(); - } - playerSprite->render(); - } - } - else - { - if (powerUp) - { - powerSprite->render(); - } - playerSprite->render(); - } - } - else - { - playerSprite->render(); + powerSprite->render(); } + + playerSprite->render(); } // Establece el estado del jugador cuando camina @@ -302,6 +282,10 @@ void Player::update() updateCooldown(); updatePowerUpCounter(); updateInvulnerableCounter(); + if (invulnerable) + { + invulnerableCounter % 8 > 3 ? playerSprite->getTexture()->setPalette(coffees) : playerSprite->getTexture()->setPalette(3); + } } // Obtiene la puntuación del jugador @@ -407,6 +391,7 @@ void Player::updateInvulnerableCounter() { invulnerable = false; invulnerableCounter = PLAYER_INVULNERABLE_COUNTER; + playerSprite->getTexture()->setPalette(0); } } } @@ -464,6 +449,7 @@ void Player::giveExtraHit() { coffees++; } + playerSprite->getTexture()->setPalette(coffees); } // Quita el toque extra al jugador @@ -481,6 +467,7 @@ void Player::removeExtraHit() invulnerable = true; invulnerableCounter = PLAYER_INVULNERABLE_COUNTER; + playerSprite->getTexture()->setPalette(coffees); } // Habilita la entrada de ordenes