Trabajando en el jugador
This commit is contained in:
@@ -27,14 +27,14 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
|||||||
// Vector de jugadores
|
// Vector de jugadores
|
||||||
if (mNumPlayers == 1)
|
if (mNumPlayers == 1)
|
||||||
{
|
{
|
||||||
Player *player = new Player(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
|
Player *player = new Player(mRenderer, mAsset, PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24);
|
||||||
players.push_back(player);
|
players.push_back(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (mNumPlayers == 2)
|
else if (mNumPlayers == 2)
|
||||||
{
|
{
|
||||||
Player *player1 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
|
Player *player1 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||||
Player *player2 = new Player((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer2Legs, mTexturePlayer2Body, mTexturePlayer2Head, mTexturePlayer2Death, mRenderer);
|
Player *player2 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||||
players.push_back(player1);
|
players.push_back(player1);
|
||||||
players.push_back(player2);
|
players.push_back(player2);
|
||||||
}
|
}
|
||||||
@@ -45,16 +45,6 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
|||||||
mTextureGameText = new LTexture(mRenderer, mAsset->get("game_text.png"));
|
mTextureGameText = new LTexture(mRenderer, mAsset->get("game_text.png"));
|
||||||
mTextureItems = new LTexture(mRenderer, mAsset->get("items.png"));
|
mTextureItems = new LTexture(mRenderer, mAsset->get("items.png"));
|
||||||
|
|
||||||
mTexturePlayer1Head = new LTexture(mRenderer, mAsset->get("player1_head.png"));
|
|
||||||
mTexturePlayer1Body = new LTexture(mRenderer, mAsset->get("player1_body.png"));
|
|
||||||
mTexturePlayer1Legs = new LTexture(mRenderer, mAsset->get("player1_legs.png"));
|
|
||||||
mTexturePlayer1Death = new LTexture(mRenderer, mAsset->get("player1_death.png"));
|
|
||||||
|
|
||||||
mTexturePlayer2Head = new LTexture(mRenderer, mAsset->get("player2_head.png"));
|
|
||||||
mTexturePlayer2Body = new LTexture(mRenderer, mAsset->get("player2_body.png"));
|
|
||||||
mTexturePlayer2Legs = new LTexture(mRenderer, mAsset->get("player2_legs.png"));
|
|
||||||
mTexturePlayer2Death = new LTexture(mRenderer, mAsset->get("player2_death.png"));
|
|
||||||
|
|
||||||
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer);
|
||||||
mTextScoreBoard = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
|
mTextScoreBoard = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer);
|
||||||
mTextBig = new Text(mAsset->get("smb2_big.png"), mAsset->get("smb2_big.txt"), mRenderer);
|
mTextBig = new Text(mAsset->get("smb2_big.png"), mAsset->get("smb2_big.txt"), mRenderer);
|
||||||
@@ -142,38 +132,6 @@ Game::~Game()
|
|||||||
delete mTextureItems;
|
delete mTextureItems;
|
||||||
mTextureItems = nullptr;
|
mTextureItems = nullptr;
|
||||||
|
|
||||||
mTexturePlayer1Head->unload();
|
|
||||||
delete mTexturePlayer1Head;
|
|
||||||
mTexturePlayer1Head = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer1Body->unload();
|
|
||||||
delete mTexturePlayer1Body;
|
|
||||||
mTexturePlayer1Body = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer1Death->unload();
|
|
||||||
delete mTexturePlayer1Death;
|
|
||||||
mTexturePlayer1Death = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer1Legs->unload();
|
|
||||||
delete mTexturePlayer1Legs;
|
|
||||||
mTexturePlayer1Legs = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer2Head->unload();
|
|
||||||
delete mTexturePlayer2Head;
|
|
||||||
mTexturePlayer2Head = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer2Body->unload();
|
|
||||||
delete mTexturePlayer2Body;
|
|
||||||
mTexturePlayer2Body = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer2Death->unload();
|
|
||||||
delete mTexturePlayer2Death;
|
|
||||||
mTexturePlayer2Death = nullptr;
|
|
||||||
|
|
||||||
mTexturePlayer2Legs->unload();
|
|
||||||
delete mTexturePlayer2Legs;
|
|
||||||
mTexturePlayer2Legs = nullptr;
|
|
||||||
|
|
||||||
delete mText;
|
delete mText;
|
||||||
mText = nullptr;
|
mText = nullptr;
|
||||||
|
|
||||||
@@ -1670,46 +1628,46 @@ void Game::updateDeath()
|
|||||||
{
|
{
|
||||||
allAreDead &= (!player->isAlive());
|
allAreDead &= (!player->isAlive());
|
||||||
|
|
||||||
if (!player->isAlive())
|
/*if (!player->isAlive())
|
||||||
{
|
{
|
||||||
// Animación
|
// Animación
|
||||||
if ((player->getDeathCounter() / 5) % 4 == 0)
|
if ((player->getDeathCounter() / 5) % 4 == 0)
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24);
|
smartSprites[player->deathIndex]->setSpriteClip(24 * 0, 24, 24, 24);
|
||||||
}
|
}
|
||||||
else if ((player->getDeathCounter() / 5) % 4 == 1)
|
else if ((player->getDeathCounter() / 5) % 4 == 1)
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24);
|
smartSprites[player->deathIndex]->setSpriteClip(24 * 1, 24, 24, 24);
|
||||||
}
|
}
|
||||||
else if ((player->getDeathCounter() / 5) % 4 == 2)
|
else if ((player->getDeathCounter() / 5) % 4 == 2)
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24);
|
smartSprites[player->deathIndex]->setSpriteClip(24 * 2, 24, 24, 24);
|
||||||
}
|
}
|
||||||
else if ((player->getDeathCounter() / 5) % 4 == 3)
|
else if ((player->getDeathCounter() / 5) % 4 == 3)
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24);
|
smartSprites[player->deathIndex]->setSpriteClip(24 * 3, 24, 24, 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rebote en los laterales
|
// Rebote en los laterales
|
||||||
if (smartSprites[player->mDeathIndex]->getVelX() > 0)
|
if (smartSprites[player->deathIndex]->getVelX() > 0)
|
||||||
{
|
{
|
||||||
if (smartSprites[player->mDeathIndex]->getPosX() > (GAME_WIDTH - smartSprites[player->mDeathIndex]->getWidth()))
|
if (smartSprites[player->deathIndex]->getPosX() > (GAME_WIDTH - smartSprites[player->deathIndex]->getWidth()))
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setPosX(GAME_WIDTH - smartSprites[player->mDeathIndex]->getWidth());
|
smartSprites[player->deathIndex]->setPosX(GAME_WIDTH - smartSprites[player->deathIndex]->getWidth());
|
||||||
smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
|
smartSprites[player->deathIndex]->setVelX(smartSprites[player->deathIndex]->getVelX() * (-1));
|
||||||
smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
|
smartSprites[player->deathIndex]->setDestX(smartSprites[player->deathIndex]->getDestX() * (-1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (smartSprites[player->mDeathIndex]->getPosX() < 0)
|
if (smartSprites[player->deathIndex]->getPosX() < 0)
|
||||||
{
|
{
|
||||||
smartSprites[player->mDeathIndex]->setPosX(0);
|
smartSprites[player->deathIndex]->setPosX(0);
|
||||||
smartSprites[player->mDeathIndex]->setVelX(smartSprites[player->mDeathIndex]->getVelX() * (-1));
|
smartSprites[player->deathIndex]->setVelX(smartSprites[player->deathIndex]->getVelX() * (-1));
|
||||||
smartSprites[player->mDeathIndex]->setDestX(smartSprites[player->mDeathIndex]->getDestX() * (-1));
|
smartSprites[player->deathIndex]->setDestX(smartSprites[player->deathIndex]->getDestX() * (-1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allAreDead)
|
if (allAreDead)
|
||||||
@@ -1719,7 +1677,7 @@ void Game::updateDeath()
|
|||||||
mDeathCounter--;
|
mDeathCounter--;
|
||||||
if ((mDeathCounter == 250) || (mDeathCounter == 200) || (mDeathCounter == 180) || (mDeathCounter == 120) || (mDeathCounter == 60))
|
if ((mDeathCounter == 250) || (mDeathCounter == 200) || (mDeathCounter == 180) || (mDeathCounter == 120) || (mDeathCounter == 60))
|
||||||
{
|
{
|
||||||
Uint8 sound = rand() % 4;
|
const Uint8 sound = rand() % 4;
|
||||||
switch (sound)
|
switch (sound)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -2440,7 +2398,7 @@ void Game::throwPlayer(int x, int y, Player *player)
|
|||||||
{
|
{
|
||||||
const int sentit = ((rand() % 2) ? 1 : -1);
|
const int sentit = ((rand() % 2) ? 1 : -1);
|
||||||
|
|
||||||
//player->mDeathIndex = getSmartSpriteFreeIndex();
|
//player->deathIndex = getSmartSpriteFreeIndex();
|
||||||
|
|
||||||
SmartSprite *ss = new SmartSprite(nullptr, mRenderer);
|
SmartSprite *ss = new SmartSprite(nullptr, mRenderer);
|
||||||
smartSprites.push_back(ss);
|
smartSprites.push_back(ss);
|
||||||
|
|||||||
@@ -146,14 +146,6 @@ private:
|
|||||||
LTexture *mTextureGameBG; // Textura para el fondo del juego
|
LTexture *mTextureGameBG; // Textura para el fondo del juego
|
||||||
LTexture *mTextureGameText; // Textura para los sprites con textos
|
LTexture *mTextureGameText; // Textura para los sprites con textos
|
||||||
LTexture *mTextureItems; // Textura para los items
|
LTexture *mTextureItems; // Textura para los items
|
||||||
LTexture *mTexturePlayer1Head; // Textura para la cabeza del jugador1
|
|
||||||
LTexture *mTexturePlayer1Body; // Textura para el cuerpo del jugador1
|
|
||||||
LTexture *mTexturePlayer1Death; // Textura para la animación de muerte del jugador1
|
|
||||||
LTexture *mTexturePlayer1Legs; // Textura para las piernas del jugador
|
|
||||||
LTexture *mTexturePlayer2Head; // Textura para la cabeza del jugador2
|
|
||||||
LTexture *mTexturePlayer2Body; // Textura para el cuerpo del jugador2
|
|
||||||
LTexture *mTexturePlayer2Death; // Textura para la animación de muerte del jugador2
|
|
||||||
LTexture *mTexturePlayer2Legs; // Textura para las piernas del jugador
|
|
||||||
|
|
||||||
Text *mText; // Fuente para los textos del juego
|
Text *mText; // Fuente para los textos del juego
|
||||||
Text *mTextBig; // Fuente de texto grande
|
Text *mTextBig; // Fuente de texto grande
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,8 @@
|
|||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
#include "asset.h"
|
||||||
|
#include "ltexture.h"
|
||||||
#include "animatedsprite.h"
|
#include "animatedsprite.h"
|
||||||
|
|
||||||
#ifndef PLAYER_H
|
#ifndef PLAYER_H
|
||||||
@@ -47,41 +49,49 @@
|
|||||||
class Player
|
class Player
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
float mPosX; // Posicion en el eje X
|
// Objetos
|
||||||
int mPosY; // Posicion en el eje Y
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
|
Asset *asset; // Objeto que gestiona todos los ficheros de recursos
|
||||||
|
LTexture *headTexture; // Textura para la cabeza del jugador
|
||||||
|
LTexture *bodyTexture; // Textura para el cuerpo del jugador
|
||||||
|
LTexture *deathTexture; // Textura para la animación de muerte del jugador
|
||||||
|
LTexture *legsTexture; // Textura para las piernas del jugador
|
||||||
|
AnimatedSprite *legsSprite; // Sprite para dibujar las piernas
|
||||||
|
AnimatedSprite *bodySprite; // Sprite para dibujar el cuerpo
|
||||||
|
AnimatedSprite *headSprite; // Sprite para dibujar la cabeza
|
||||||
|
|
||||||
Uint8 mWidth; // Anchura
|
// Variables
|
||||||
Uint8 mHeight; // Altura
|
float posX; // Posicion en el eje X
|
||||||
|
int posY; // Posicion en el eje Y
|
||||||
|
|
||||||
float mVelX; // Cantidad de pixeles a desplazarse en el eje X
|
Uint8 width; // Anchura
|
||||||
int mVelY; // Cantidad de pixeles a desplazarse en el eje Y
|
Uint8 height; // Altura
|
||||||
|
|
||||||
float mBaseSpeed; // Velocidad base del jugador
|
float velX; // Cantidad de pixeles a desplazarse en el eje X
|
||||||
int mCooldown; // Contador durante el cual no puede disparar
|
int velY; // Cantidad de pixeles a desplazarse en el eje Y
|
||||||
|
|
||||||
Uint32 mScore; // Puntos del jugador
|
float baseSpeed; // Velocidad base del jugador
|
||||||
float mScoreMultiplier; // Multiplicador de puntos
|
int cooldown; // Contador durante el cual no puede disparar
|
||||||
|
|
||||||
Uint8 mStatusWalking; // Estado del jugador
|
Uint32 score; // Puntos del jugador
|
||||||
Uint8 mStatusFiring; // Estado del jugador
|
float scoreMultiplier; // Multiplicador de puntos
|
||||||
|
|
||||||
bool mAlive; // Indica si el jugador está vivo
|
Uint8 statusWalking; // Estado del jugador
|
||||||
Uint16 mDeathCounter; // Contador para la animación de morirse
|
Uint8 statusFiring; // Estado del jugador
|
||||||
bool mInvulnerable; // Indica si el jugador es invulnerable
|
|
||||||
Uint16 mInvulnerableCounter; // Contador para la invulnerabilidad
|
|
||||||
bool mExtraHit; // Indica si el jugador tiene un toque extra
|
|
||||||
Uint8 mCoffees; // Indica cuantos cafes lleva acumulados
|
|
||||||
bool mPowerUp; // Indica si el jugador tiene activo el modo PowerUp
|
|
||||||
Uint8 mPowerUpHeadOffset; // Variable para dibujar la cabeza normal o la del powerup
|
|
||||||
bool mInput; // Indica si puede recibir ordenes de entrada
|
|
||||||
|
|
||||||
AnimatedSprite *mSpriteLegs; // Sprite para dibujar las piernas
|
bool alive; // Indica si el jugador está vivo
|
||||||
AnimatedSprite *mSpriteBody; // Sprite para dibujar el cuerpo
|
Uint16 deathCounter; // Contador para la animación de morirse
|
||||||
AnimatedSprite *mSpriteHead; // Sprite para dibujar la cabeza
|
bool invulnerable; // Indica si el jugador es invulnerable
|
||||||
LTexture *mPlayerDeadTexture; // Textura con los gráficos para la animación de muerte
|
Uint16 invulnerableCounter; // Contador para la invulnerabilidad
|
||||||
|
bool extraHit; // Indica si el jugador tiene un toque extra
|
||||||
|
Uint8 coffees; // Indica cuantos cafes lleva acumulados
|
||||||
|
bool powerUp; // Indica si el jugador tiene activo el modo PowerUp
|
||||||
|
Uint8 powerUpHeadOffset; // Variable para dibujar la cabeza normal o la del powerup
|
||||||
|
bool input; // Indica si puede recibir ordenes de entrada
|
||||||
|
circle_t mCollider; // Circulo de colisión del jugador
|
||||||
|
|
||||||
circle_t mCollider; // Circulo de colisión del jugador
|
// Actualiza el circulo de colisión a la posición del jugador
|
||||||
void shiftColliders(); // Actualiza el circulo de colisión a la posición del jugador
|
void shiftColliders();
|
||||||
|
|
||||||
// Actualiza el valor de la variable
|
// Actualiza el valor de la variable
|
||||||
void updateInvulnerableCounter();
|
void updateInvulnerableCounter();
|
||||||
@@ -93,11 +103,11 @@ private:
|
|||||||
void updatePowerUpHeadOffset();
|
void updatePowerUpHeadOffset();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Uint8 mDeathIndex; // Apaño rapidito. Indice de SmartSprite donde esta ubicado el sprite de morirse
|
Uint8 deathIndex; // Apaño rapidito. Indice de SmartSprite donde esta ubicado el sprite de morirse
|
||||||
Uint16 mPowerUpCounter; // Temporizador para el modo PowerUp
|
Uint16 powerUpCounter; // Temporizador para el modo PowerUp
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Player(float x, int y, LTexture *textureLegs, LTexture *textureBody, LTexture *textureHead, LTexture *textureDead, SDL_Renderer *renderer);
|
Player(SDL_Renderer *renderer, Asset *asset, float x, int y);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Player();
|
~Player();
|
||||||
@@ -105,15 +115,18 @@ public:
|
|||||||
// Iniciador
|
// Iniciador
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
|
// Actualiza al jugador a su posicion, animación y controla los contadores
|
||||||
|
void update();
|
||||||
|
|
||||||
|
// Pinta el jugador en pantalla
|
||||||
|
void render();
|
||||||
|
|
||||||
// Actua en consecuencia de la entrada recibida
|
// Actua en consecuencia de la entrada recibida
|
||||||
void setInput(Uint8 input);
|
void setInput(Uint8 input);
|
||||||
|
|
||||||
// Mueve el jugador a la posición y animación que le corresponde
|
// Mueve el jugador a la posición y animación que le corresponde
|
||||||
void move();
|
void move();
|
||||||
|
|
||||||
// Pinta el jugador en pantalla
|
|
||||||
void render();
|
|
||||||
|
|
||||||
// Establece el estado del jugador
|
// Establece el estado del jugador
|
||||||
void setWalkingStatus(Uint8 status);
|
void setWalkingStatus(Uint8 status);
|
||||||
|
|
||||||
@@ -144,9 +157,6 @@ public:
|
|||||||
// Actualiza el valor de la variable
|
// Actualiza el valor de la variable
|
||||||
void updateCooldown();
|
void updateCooldown();
|
||||||
|
|
||||||
// Actualiza al jugador a su posicion, animación y controla los contadores
|
|
||||||
void update();
|
|
||||||
|
|
||||||
// Obtiene la puntuación del jugador
|
// Obtiene la puntuación del jugador
|
||||||
Uint32 getScore();
|
Uint32 getScore();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user