añadidos nuevos ficheros de clases
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 585 KiB After Width: | Height: | Size: 670 KiB |
@@ -52,10 +52,10 @@ public:
|
|||||||
SDL_Rect getAnimationClip(Uint8 index, Uint8 frame);
|
SDL_Rect getAnimationClip(Uint8 index, Uint8 frame);
|
||||||
|
|
||||||
// Establece la animación actual
|
// Establece la animación actual
|
||||||
void AnimatedSprite::setCurrentAnimation(Uint8 index);
|
void setCurrentAnimation(Uint8 index);
|
||||||
|
|
||||||
// Obtiene la animación actual
|
// Obtiene la animación actual
|
||||||
Uint8 AnimatedSprite::getCurrentAnimation();
|
Uint8 getCurrentAnimation();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct sAnimation
|
struct sAnimation
|
||||||
|
|||||||
@@ -5,7 +5,10 @@
|
|||||||
#ifndef CONST_H
|
#ifndef CONST_H
|
||||||
#define CONST_H
|
#define CONST_H
|
||||||
|
|
||||||
const Uint8 GAME_SPEED = 24; //16 = normal-rapid, 24 = normal. Quan menor, m<>s r<>pid
|
// Textos
|
||||||
|
#define WINDOW_CAPTION "Volcano (@2016,2021 JailDesigner v0.5)"
|
||||||
|
|
||||||
|
const Uint8 GAME_SPEED = 24; //16 = normal-rapido, 24 = normal. Cuanto mas pequeño, más rápido
|
||||||
|
|
||||||
const Uint8 UP = 0;
|
const Uint8 UP = 0;
|
||||||
const Uint8 DOWN = 2;
|
const Uint8 DOWN = 2;
|
||||||
@@ -121,9 +124,6 @@ const Uint8 MENU_SECTION_ANIMATION = 2;
|
|||||||
const Uint8 ZONE_SURFACE = 0;
|
const Uint8 ZONE_SURFACE = 0;
|
||||||
const Uint8 ZONE_VOLCANO = 1;
|
const Uint8 ZONE_VOLCANO = 1;
|
||||||
|
|
||||||
const std::string WINDOW_TITLE = "Volcano v0005";
|
|
||||||
const std::string BUILD = ".05";
|
|
||||||
|
|
||||||
// Recursos
|
// Recursos
|
||||||
const Uint8 FILE_MAP_VOLCANO = 0;
|
const Uint8 FILE_MAP_VOLCANO = 0;
|
||||||
const Uint8 FILE_CONFIG = 1;
|
const Uint8 FILE_CONFIG = 1;
|
||||||
@@ -159,23 +159,21 @@ const Uint8 MUSIC_VOLCANO = 2;
|
|||||||
const Uint8 TOTAL_MUSIC = 3;
|
const Uint8 TOTAL_MUSIC = 3;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////COFFEE CRISIS///////////////////
|
///////////////////////////////COFFEE CRISIS//////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
// Textos
|
|
||||||
#define WINDOW_CAPTION "Coffee Crisis"
|
|
||||||
#define TEXT_COPYRIGHT "@2016,2021 JAILDESIGNER (V0.5)"
|
|
||||||
|
|
||||||
// Tamaño de bloque
|
// Tamaño de bloque
|
||||||
const Uint8 BLOCK = 8;
|
const Uint8 BLOCK = 8;
|
||||||
const Uint8 HALF_BLOCK = BLOCK / 2;
|
const Uint8 HALF_BLOCK = BLOCK / 2;
|
||||||
|
|
||||||
// Tamaño de la pantalla real
|
// Tamaño de la pantalla real
|
||||||
const int SCREEN_WIDTH = 256;
|
const int SCREEN_WIDTH = 320;
|
||||||
const int SCREEN_HEIGHT = SCREEN_WIDTH * 3 / 4; // 192
|
const int SCREEN_HEIGHT = SCREEN_WIDTH * 3 / 4; // 240
|
||||||
|
|
||||||
// Tamaño de la pantalla que se muestra
|
// Tamaño de la pantalla que se muestra
|
||||||
const int VIEW_WIDTH = SCREEN_WIDTH * 3; // 768
|
const int VIEW_WIDTH = SCREEN_WIDTH * 3; // 960
|
||||||
const int VIEW_HEIGHT = SCREEN_HEIGHT * 3; // 576
|
const int VIEW_HEIGHT = SCREEN_HEIGHT * 3; // 720
|
||||||
|
|
||||||
// Cantidad de enteros a escribir en los ficheros de datos
|
// Cantidad de enteros a escribir en los ficheros de datos
|
||||||
const Uint8 TOTAL_SCORE_DATA = 3;
|
const Uint8 TOTAL_SCORE_DATA = 3;
|
||||||
|
|||||||
685
source/director.cpp
Normal file
685
source/director.cpp
Normal file
@@ -0,0 +1,685 @@
|
|||||||
|
#include "const.h"
|
||||||
|
#include "struct.h"
|
||||||
|
#include "director.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
const Uint8 *keystates;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
Director::Director(std::string _path)
|
||||||
|
{
|
||||||
|
// Crea todos los objetos del juego
|
||||||
|
initObjects();
|
||||||
|
|
||||||
|
// Inicializa todas las variables
|
||||||
|
init(_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
Director::~Director()
|
||||||
|
{
|
||||||
|
// Borra todos los objetos del juego
|
||||||
|
deleteObjects();
|
||||||
|
|
||||||
|
// Destruye la ventana
|
||||||
|
SDL_DestroyRenderer(renderer);
|
||||||
|
SDL_DestroyTexture(backbuffer);
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
backbuffer = nullptr;
|
||||||
|
renderer = nullptr;
|
||||||
|
window = nullptr;
|
||||||
|
|
||||||
|
// Sal del subsistema SDL
|
||||||
|
SDL_Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa todas las variables
|
||||||
|
void Director::init(std::string _path)
|
||||||
|
{
|
||||||
|
setPath(_path);
|
||||||
|
section = NONE;
|
||||||
|
gameControllerFound = false;
|
||||||
|
for (int i = 0; i < 360; i++)
|
||||||
|
sen[i] = sin(i * 3.14 / 180);
|
||||||
|
for (int i = 0; i < TOTAL_SCORE_DATA; i++)
|
||||||
|
scoreData[i] = 0;
|
||||||
|
|
||||||
|
initOptions();
|
||||||
|
quit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa las variables de las opciones
|
||||||
|
void Director::initOptions()
|
||||||
|
{
|
||||||
|
options.fullScreenMode = 0;
|
||||||
|
options.fullScreenModePrevious = 0;
|
||||||
|
options.windowSize = 0;
|
||||||
|
options.windowSizePrevious = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa las variables del juego
|
||||||
|
void Director::initGame()
|
||||||
|
{
|
||||||
|
// Variables
|
||||||
|
game.score = 0;
|
||||||
|
game.section = 0;
|
||||||
|
game.paused = false;
|
||||||
|
game.ticks = 0;
|
||||||
|
game.ticksSpeed = GAME_SPEED;
|
||||||
|
game.counter = 0;
|
||||||
|
|
||||||
|
// Player
|
||||||
|
resource.texture[TEXTURE_PLAYER].texture = new LTexture();
|
||||||
|
loadTextureFromFile(resource.texture[TEXTURE_PLAYER].texture, resource.texture[TEXTURE_PLAYER].file, renderer);
|
||||||
|
player = new Player(renderer, resource.texture[TEXTURE_PLAYER].texture);
|
||||||
|
|
||||||
|
// Map
|
||||||
|
resource.texture[TEXTURE_ACTORS].texture = new LTexture();
|
||||||
|
loadTextureFromFile(resource.texture[TEXTURE_ACTORS].texture, resource.texture[TEXTURE_ACTORS].file, renderer);
|
||||||
|
resource.texture[TEXTURE_BKG_SURFACE].texture = new LTexture();
|
||||||
|
loadTextureFromFile(resource.texture[TEXTURE_BKG_SURFACE].texture, resource.texture[TEXTURE_BKG_SURFACE].file, renderer);
|
||||||
|
resource.texture[TEXTURE_TILES_VOLCANO].texture = new LTexture();
|
||||||
|
loadTextureFromFile(resource.texture[TEXTURE_TILES_VOLCANO].texture, resource.texture[TEXTURE_TILES_VOLCANO].file, renderer);
|
||||||
|
map = new Map(renderer, resource.texture[TEXTURE_TILES_VOLCANO].texture, resource.texture[TEXTURE_ACTORS].texture,
|
||||||
|
resource.texture[TEXTURE_BKG_SURFACE].texture, resource.file[FILE_MAP_VOLCANO].file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Limpia las variables del juego
|
||||||
|
void Director::quitGame()
|
||||||
|
{
|
||||||
|
// Player
|
||||||
|
delete player;
|
||||||
|
player = nullptr;
|
||||||
|
delete resource.texture[TEXTURE_PLAYER].texture;
|
||||||
|
resource.texture[TEXTURE_PLAYER].texture = nullptr;
|
||||||
|
|
||||||
|
// Map
|
||||||
|
delete map;
|
||||||
|
map = nullptr;
|
||||||
|
delete resource.texture[TEXTURE_TILES_VOLCANO].texture;
|
||||||
|
resource.texture[TEXTURE_TILES_VOLCANO].texture = nullptr;
|
||||||
|
delete resource.texture[TEXTURE_ACTORS].texture;
|
||||||
|
resource.texture[TEXTURE_ACTORS].texture = nullptr;
|
||||||
|
delete resource.texture[TEXTURE_BKG_SURFACE].texture;
|
||||||
|
resource.texture[TEXTURE_BKG_SURFACE].texture = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Arranca SDL y crea la ventana
|
||||||
|
bool Director::initSDL()
|
||||||
|
{
|
||||||
|
// Indicador de inicialización
|
||||||
|
bool success = true;
|
||||||
|
|
||||||
|
// Inicializa SDL
|
||||||
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_HAPTIC) < 0)
|
||||||
|
{
|
||||||
|
printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Establece el filtro de la textura a nearest
|
||||||
|
if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"))
|
||||||
|
{
|
||||||
|
printf("Warning: Nearest texture filtering not enabled!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa jail_audio
|
||||||
|
JA_Init(48000, AUDIO_S16, 2);
|
||||||
|
|
||||||
|
// Comprueba si hay algun mando conectado
|
||||||
|
if (SDL_NumJoysticks() < 1)
|
||||||
|
{
|
||||||
|
printf("Warning: No joysticks connected!\n");
|
||||||
|
gameControllerFound = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Carga el mando
|
||||||
|
gameController = SDL_JoystickOpen(0);
|
||||||
|
gameControllerFound = true;
|
||||||
|
|
||||||
|
if (gameController == NULL)
|
||||||
|
{
|
||||||
|
printf("Warning: Unable to open game controller!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
gameControllerFound = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("%i joysticks were found.\n", SDL_NumJoysticks());
|
||||||
|
std::cout << SDL_JoystickNumButtons(gameController) << " buttons\n";
|
||||||
|
|
||||||
|
//Get controller haptic device
|
||||||
|
controllerHaptic = SDL_HapticOpenFromJoystick(gameController);
|
||||||
|
if (controllerHaptic == NULL)
|
||||||
|
{
|
||||||
|
printf("Warning: Controller does not support haptics!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Haptics detected\n");
|
||||||
|
|
||||||
|
//Get initialize rumble
|
||||||
|
if (SDL_HapticRumbleInit(controllerHaptic) < 0)
|
||||||
|
{
|
||||||
|
printf("Warning: Unable to initialize rumble!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea la ventana
|
||||||
|
window = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, VIEW_WIDTH, VIEW_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
||||||
|
if (window == NULL)
|
||||||
|
{
|
||||||
|
printf("Window could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Crea un renderizador para la ventana con vsync
|
||||||
|
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
|
if (renderer == NULL)
|
||||||
|
{
|
||||||
|
printf("Renderer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Inicializa el color de renderizado
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
|
||||||
|
|
||||||
|
// Establece el tamaño del buffer de renderizado
|
||||||
|
SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||||
|
|
||||||
|
// Establece el modo de mezcla
|
||||||
|
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea un backbuffer para el renderizador
|
||||||
|
backbuffer = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||||
|
if (backbuffer == NULL)
|
||||||
|
{
|
||||||
|
printf("Backbuffer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea los objetos del programa
|
||||||
|
void Director::initObjects()
|
||||||
|
{
|
||||||
|
eventHandler = new SDL_Event();
|
||||||
|
text.white = new Text();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Borra los objetos del programa
|
||||||
|
void Director::deleteObjects()
|
||||||
|
{
|
||||||
|
delete eventHandler;
|
||||||
|
delete text.white;
|
||||||
|
eventHandler = nullptr;
|
||||||
|
text.white = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crea el indice de ficheros de recursos
|
||||||
|
void Director::setResourceList()
|
||||||
|
{
|
||||||
|
// Ficheros binarios
|
||||||
|
resource.file[FILE_MAP_VOLCANO].file = path + "/" + "../data/volcano.map";
|
||||||
|
resource.file[FILE_CONFIG].file = path + "/" + "../data/config.bin";
|
||||||
|
|
||||||
|
// Texturas
|
||||||
|
resource.texture[TEXTURE_ACTORS].file = path + "/" + "../media/gfx/actors.png";
|
||||||
|
resource.texture[TEXTURE_BKG_SURFACE].file = path + "/" + "../media/gfx/bkg_surface.png";
|
||||||
|
resource.texture[TEXTURE_FILTER].file = path + "/" + "../media/gfx/filter.png";
|
||||||
|
resource.texture[TEXTURE_HUD].file = path + "/" + "../media/gfx/hud.png";
|
||||||
|
resource.texture[TEXTURE_MENU_ANIMATION].file = path + "/" + "../media/gfx/menu_animation.png";
|
||||||
|
resource.texture[TEXTURE_MENU].file = path + "/" + "../media/gfx/menu.png";
|
||||||
|
resource.texture[TEXTURE_PLAYER].file = path + "/" + "../media/gfx/player.png";
|
||||||
|
resource.texture[TEXTURE_TILES_SURFACE].file = path + "/" + "../media/gfx/tiles_surface.png";
|
||||||
|
resource.texture[TEXTURE_TILES_VOLCANO].file = path + "/" + "../media/gfx/tiles_volcano.png";
|
||||||
|
for (Uint8 i = 0; i < TOTAL_TEXTURE; i++)
|
||||||
|
resource.texture[i].texture = nullptr;
|
||||||
|
|
||||||
|
// Sonidos
|
||||||
|
resource.sound[SOUND_COIN].file = path + "/" + "../media/sound/sound_player_coin.wav";
|
||||||
|
resource.sound[SOUND_DEATH].file = path + "/" + "../media/sound/sound_player_death.wav";
|
||||||
|
resource.sound[SOUND_DROP_ENEMY].file = path + "/" + "../media/sound/sound_drop_enemy.wav";
|
||||||
|
resource.sound[SOUND_DROP_SPLAT].file = path + "/" + "../media/sound/sound_drop_splat.wav";
|
||||||
|
resource.sound[SOUND_JUMP].file = path + "/" + "../media/sound/sound_player_jump.wav";
|
||||||
|
resource.sound[SOUND_MENU_LOGO].file = path + "/" + "../media/sound/sound_menu_logo.wav";
|
||||||
|
resource.sound[SOUND_MENU_START].file = path + "/" + "../media/sound/sound_menu_start.wav";
|
||||||
|
for (Uint8 i = 0; i < TOTAL_SOUND; i++)
|
||||||
|
resource.sound[i].sound = nullptr;
|
||||||
|
|
||||||
|
// Musicas
|
||||||
|
resource.music[MUSIC_MENU].file = path + "/" + "../media/music/music_menu.ogg";
|
||||||
|
resource.music[MUSIC_SURFACE].file = path + "/" + "../media/music/music_surface.ogg";
|
||||||
|
resource.music[MUSIC_VOLCANO].file = path + "/" + "../media/music/music_volcano.ogg";
|
||||||
|
for (Uint8 i = 0; i < TOTAL_TEXTURE; i++)
|
||||||
|
resource.music[i].music = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba que todos los ficheros de recursos existen
|
||||||
|
bool Director::checkResourceList()
|
||||||
|
{
|
||||||
|
bool success = true;
|
||||||
|
std::string p;
|
||||||
|
std::string filename;
|
||||||
|
SDL_RWops *file;
|
||||||
|
|
||||||
|
// Comprueba los ficheros de musica
|
||||||
|
printf("\n>> MUSIC FILES\n");
|
||||||
|
for (Uint8 i = 0; i < TOTAL_MUSIC; i++)
|
||||||
|
{
|
||||||
|
p = resource.music[i].file.c_str();
|
||||||
|
filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
file = SDL_RWFromFile(p.c_str(), "r+b");
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
printf("Checking file %-20s [OK]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
success = false;
|
||||||
|
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba los ficheros de sonidos
|
||||||
|
printf("\n>> SOUND FILES\n");
|
||||||
|
for (Uint8 i = 0; i < TOTAL_SOUND; i++)
|
||||||
|
{
|
||||||
|
p = resource.sound[i].file.c_str();
|
||||||
|
filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
file = SDL_RWFromFile(p.c_str(), "r+b");
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
printf("Checking file %-20s [OK]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
success = false;
|
||||||
|
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba los ficheros con texturas
|
||||||
|
printf("\n>> TEXTURE FILES\n");
|
||||||
|
for (Uint8 i = 0; i < TOTAL_TEXTURE; i++)
|
||||||
|
{
|
||||||
|
p = resource.texture[i].file.c_str();
|
||||||
|
filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
file = SDL_RWFromFile(p.c_str(), "r+b");
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
printf("Checking file %-20s [OK]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
success = false;
|
||||||
|
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
||||||
|
}
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resultado
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
printf("\n** All files OK.\n\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("\n** File is missing. Exiting.\n\n");
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa la variable con los ficheros de recursos
|
||||||
|
bool Director::initResourceList()
|
||||||
|
{
|
||||||
|
setResourceList();
|
||||||
|
return checkResourceList();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carga un archivo de imagen en una textura
|
||||||
|
bool Director::loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer)
|
||||||
|
{
|
||||||
|
bool success = true;
|
||||||
|
if (!texture->loadFromFile(path, renderer))
|
||||||
|
{
|
||||||
|
printf("Failed to load %s texture!\n", path.c_str());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carga los recursos necesarios
|
||||||
|
bool Director::loadMedia(Uint8 section)
|
||||||
|
{
|
||||||
|
// Indicador de éxito en la carga
|
||||||
|
bool success = true;
|
||||||
|
std::string p;
|
||||||
|
|
||||||
|
switch (section)
|
||||||
|
{
|
||||||
|
case GAME_SECTION_INIT:
|
||||||
|
{
|
||||||
|
p = resource.file[FILE_CONFIG].file.c_str();
|
||||||
|
std::string filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
|
||||||
|
// Abre el fichero con la configuracion de las opciones para leer en binario
|
||||||
|
SDL_RWops *file = SDL_RWFromFile(p.c_str(), "r+b");
|
||||||
|
|
||||||
|
// El fichero no existe
|
||||||
|
if (file == NULL)
|
||||||
|
{
|
||||||
|
printf("Warning: Unable to open %s file\n", filename.c_str());
|
||||||
|
|
||||||
|
// Crea el fichero para escribir
|
||||||
|
file = SDL_RWFromFile(p.c_str(), "w+b");
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
printf("New file (%s) created!\n", filename.c_str());
|
||||||
|
|
||||||
|
// Inicializa los datos
|
||||||
|
options.fullScreenMode = 0;
|
||||||
|
SDL_RWwrite(file, &options.fullScreenMode, sizeof(options.fullScreenMode), 1);
|
||||||
|
|
||||||
|
options.windowSize = 3;
|
||||||
|
SDL_RWwrite(file, &options.windowSize, sizeof(options.windowSize), 1);
|
||||||
|
|
||||||
|
// Cierra el fichero
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Error: Unable to create file %s\n", filename.c_str());
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// El fichero existe
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Carga los datos
|
||||||
|
printf("Reading file %s\n", filename.c_str());
|
||||||
|
SDL_RWread(file, &options.fullScreenMode, sizeof(options.fullScreenMode), 1);
|
||||||
|
SDL_SetWindowFullscreen(window, options.fullScreenMode);
|
||||||
|
SDL_RWread(file, &options.windowSize, sizeof(options.windowSize), 1);
|
||||||
|
SDL_SetWindowSize(window, SCREEN_WIDTH * options.windowSize, SCREEN_HEIGHT * options.windowSize);
|
||||||
|
|
||||||
|
// Cierra el fichero
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
// Texturas
|
||||||
|
|
||||||
|
// Sonidos
|
||||||
|
|
||||||
|
// Musicas
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_TITLE:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_PLAYING:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_GAME_OVER_SCREEN:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_INTRO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_DEMO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_INSTRUCTIONS:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_LOGO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descrga los recursos necesarios
|
||||||
|
bool Director::unLoadMedia(Uint8 section)
|
||||||
|
{
|
||||||
|
// Indicador de éxito en la carga
|
||||||
|
bool success = true;
|
||||||
|
std::string p;
|
||||||
|
|
||||||
|
switch (section)
|
||||||
|
{
|
||||||
|
case GAME_SECTION_INIT:
|
||||||
|
{
|
||||||
|
p = resource.file[FILE_CONFIG].file;
|
||||||
|
std::string filename = p.substr(p.find_last_of("\\/") + 1);
|
||||||
|
|
||||||
|
// Abre el fichero de puntuación para escribir
|
||||||
|
SDL_RWops *file = SDL_RWFromFile(p.c_str(), "w+b");
|
||||||
|
|
||||||
|
if (file != NULL)
|
||||||
|
{
|
||||||
|
// Guardamos los datos
|
||||||
|
SDL_RWwrite(file, &options.fullScreenMode, sizeof(Uint32), 1);
|
||||||
|
SDL_RWwrite(file, &options.windowSize, sizeof(Uint8), 1);
|
||||||
|
|
||||||
|
printf("Writing file %s\n", filename.c_str());
|
||||||
|
|
||||||
|
// Cerramos el fichero
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Error: Unable to save %s file! %s\n", filename.c_str(), SDL_GetError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_TITLE:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_PLAYING:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_GAME_OVER_SCREEN:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_INTRO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_DEMO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_INSTRUCTIONS:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GAME_SECTION_LOGO:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void Director::setPath(std::string _path)
|
||||||
|
{
|
||||||
|
path = _path.substr(0, _path.find_last_of("\\/"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
Uint8 Director::getGameSection()
|
||||||
|
{
|
||||||
|
return game.section;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void Director::changeGameSection(_section sectionPrevious, _section sectionNext)
|
||||||
|
{
|
||||||
|
switch (sectionPrevious)
|
||||||
|
{
|
||||||
|
case GAME:
|
||||||
|
quitGame();
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (sectionNext)
|
||||||
|
{
|
||||||
|
case GAME:
|
||||||
|
initGame();
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
game.section = sectionNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cambia el valor de la variable de modo de pantalla completa
|
||||||
|
void Director::changeFullScreenMode()
|
||||||
|
{
|
||||||
|
switch (options.fullScreenMode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
options.fullScreenMode = SDL_WINDOW_FULLSCREEN;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOW_FULLSCREEN:
|
||||||
|
options.fullScreenMode = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOW_FULLSCREEN_DESKTOP:
|
||||||
|
options.fullScreenMode = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
options.fullScreenMode = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba si hay que salir
|
||||||
|
bool Director::isRunning()
|
||||||
|
{
|
||||||
|
return !quit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucle para el logo del juego
|
||||||
|
void Director::runLogo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucle para la intro del juego
|
||||||
|
void Director::runIntro()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucle para el titulo del juego
|
||||||
|
void Director::runTitle()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bucle para el juego
|
||||||
|
void Director::runGame()
|
||||||
|
{
|
||||||
|
// Actualiza la lógica del juego
|
||||||
|
updateGame();
|
||||||
|
|
||||||
|
// Pinta la sección de juego
|
||||||
|
renderGame();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actualiza la lógica del juego
|
||||||
|
void Director::updateGame()
|
||||||
|
{
|
||||||
|
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||||
|
if (SDL_GetTicks() - game.ticks > game.ticksSpeed)
|
||||||
|
{
|
||||||
|
// Actualiza el contador de ticks
|
||||||
|
game.ticks = SDL_GetTicks();
|
||||||
|
|
||||||
|
// Comprueba los eventos que hay en la cola
|
||||||
|
while (SDL_PollEvent(eventHandler) != 0)
|
||||||
|
{
|
||||||
|
// Evento de salida de la aplicación
|
||||||
|
if (eventHandler->type == SDL_QUIT)
|
||||||
|
{
|
||||||
|
quit = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
game.counter++;
|
||||||
|
map->update();
|
||||||
|
player->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pinta la sección de juego
|
||||||
|
void Director::renderGame()
|
||||||
|
{
|
||||||
|
// Limpia la pantalla
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
|
||||||
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
|
// Dibuja los objetos
|
||||||
|
map->render();
|
||||||
|
player->render();
|
||||||
|
|
||||||
|
// Muestra el backbuffer en pantalla
|
||||||
|
SDL_RenderPresent(renderer);
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "movingsprite.h"
|
#include "movingsprite.h"
|
||||||
#include "smartsprite.h"
|
#include "smartsprite.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
#include "map.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
#include "text2.h"
|
#include "text2.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@@ -15,92 +16,20 @@
|
|||||||
#ifndef GAME_H
|
#ifndef GAME_H
|
||||||
#define GAME_H
|
#define GAME_H
|
||||||
|
|
||||||
// GameDirector
|
// director
|
||||||
class Game
|
class Director
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
// Constructor
|
|
||||||
Game();
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
~Game();
|
|
||||||
|
|
||||||
// Iniciador
|
|
||||||
void init();
|
|
||||||
|
|
||||||
// Arranca SDL y crea la ventana
|
|
||||||
bool initSDL();
|
|
||||||
|
|
||||||
// Crea el indice de ficheros
|
|
||||||
void setFileList();
|
|
||||||
|
|
||||||
// Comprueba que todos los ficheros existen
|
|
||||||
bool checkFileList();
|
|
||||||
|
|
||||||
// Carga un archivo de imagen en una textura
|
|
||||||
bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer);
|
|
||||||
|
|
||||||
// Carga los recursos necesarios
|
|
||||||
bool loadMedia(Uint8 section);
|
|
||||||
|
|
||||||
// Descrga los recursos necesarios
|
|
||||||
bool unLoadMedia(Uint8 section);
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setPath(std::string path);
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
Uint8 getGameSection();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setGameSection(Uint8 section);
|
|
||||||
|
|
||||||
// Cambia el valor de la variable de modo de pantalla completa
|
|
||||||
void changeFullScreenMode();
|
|
||||||
|
|
||||||
// Bucle para el logo del juego
|
|
||||||
void runLogo();
|
|
||||||
|
|
||||||
// Bucle para la intro del juego
|
|
||||||
void runIntro();
|
|
||||||
|
|
||||||
// Bucle para el titulo del juego
|
|
||||||
void runTitle();
|
|
||||||
|
|
||||||
// Bucle para el juego
|
|
||||||
void runGame();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SDL_Window *mWindow; // La ventana de la aplicación
|
|
||||||
SDL_Renderer *mRenderer; // El renderizador donde se dibuja todo
|
|
||||||
SDL_Event *mEventHandler; // Manejador de eventos
|
|
||||||
|
|
||||||
SDL_Texture *mBackbuffer; // Texturas
|
|
||||||
|
|
||||||
SDL_Joystick *mGameController; // Manejador para el mando 1
|
|
||||||
bool mGameControllerFound; // Indica si se ha encontrado algun mando conectado
|
|
||||||
SDL_Haptic *mControllerHaptic; // Manejador para la vibración del mando
|
|
||||||
|
|
||||||
Uint32 mScoreData[TOTAL_SCORE_DATA]; // Datos del fichero de puntuación
|
|
||||||
|
|
||||||
Player *mPlayer; // El jugador
|
|
||||||
|
|
||||||
double mSen[360]; // Vector con los valores del seno para 360 grados
|
|
||||||
|
|
||||||
struct _text // Objetos de texto
|
struct _text // Objetos de texto
|
||||||
{
|
{
|
||||||
Text *white;
|
Text *white;
|
||||||
};
|
};
|
||||||
|
|
||||||
_text mText; // Variable con los objetos texto
|
|
||||||
|
|
||||||
struct _menu // Objetos menu
|
struct _menu // Objetos menu
|
||||||
{
|
{
|
||||||
Menu *title; // Menu de la pantalla de título
|
Menu *title; // Menu de la pantalla de título
|
||||||
};
|
};
|
||||||
|
|
||||||
_menu mMenu; // Variable con los objetos menu
|
|
||||||
|
|
||||||
struct _options // Variables relacionadas con las opciones del juego
|
struct _options // Variables relacionadas con las opciones del juego
|
||||||
{
|
{
|
||||||
Uint32 fullScreenMode; // Guarda el valor elegido para el modo de pantalla completa
|
Uint32 fullScreenMode; // Guarda el valor elegido para el modo de pantalla completa
|
||||||
@@ -117,37 +46,29 @@ private:
|
|||||||
Uint32 ticks; // Contador de ticks para ajustar la velocidad del juego
|
Uint32 ticks; // Contador de ticks para ajustar la velocidad del juego
|
||||||
Uint8 ticksSpeed; // Velocidad a la que se repite el bucle de juego
|
Uint8 ticksSpeed; // Velocidad a la que se repite el bucle de juego
|
||||||
Uint32 counter; // Contador para el juego
|
Uint32 counter; // Contador para el juego
|
||||||
_options options; // Contiene todas las opciones del juego
|
|
||||||
std::string path; // Path donde está el ejecutable del juego
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_game mGame;
|
|
||||||
|
|
||||||
// Recursos
|
// Recursos
|
||||||
struct _resourceFile
|
struct _resourceFile
|
||||||
{
|
{
|
||||||
std::string file;
|
std::string file;
|
||||||
bool loaded;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _resourceSound
|
struct _resourceSound
|
||||||
{
|
{
|
||||||
std::string file;
|
std::string file;
|
||||||
bool loaded;
|
|
||||||
JA_Sound sound;
|
JA_Sound sound;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _resourceMusic
|
struct _resourceMusic
|
||||||
{
|
{
|
||||||
std::string file;
|
std::string file;
|
||||||
bool loaded;
|
|
||||||
JA_Music music;
|
JA_Music music;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _resourceTexture
|
struct _resourceTexture
|
||||||
{
|
{
|
||||||
std::string file;
|
std::string file;
|
||||||
bool loaded;
|
|
||||||
LTexture *texture;
|
LTexture *texture;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -159,7 +80,112 @@ private:
|
|||||||
_resourceTexture texture[TOTAL_TEXTURE];
|
_resourceTexture texture[TOTAL_TEXTURE];
|
||||||
};
|
};
|
||||||
|
|
||||||
_resource mResource;
|
SDL_Window *window; // La ventana de la aplicación
|
||||||
|
SDL_Renderer *renderer; // El renderizador donde se dibuja todo
|
||||||
|
SDL_Event *eventHandler; // Manejador de eventos
|
||||||
|
SDL_Texture *backbuffer; // Texturas
|
||||||
|
SDL_Joystick *gameController; // Manejador para el mando 1
|
||||||
|
SDL_Haptic *controllerHaptic; // Manejador para la vibración del mando
|
||||||
|
|
||||||
|
_game game; // Contiene las variables de la sección de juego
|
||||||
|
//_menu menu; // Variable con los objetos menu
|
||||||
|
_resource resource; // Contiene todos los objetos y variables asociados a recursos
|
||||||
|
_options options; // Contiene todas las opciones del programa
|
||||||
|
_text text; // Variable con los objetos texto
|
||||||
|
bool gameControllerFound; // Indica si se ha encontrado algun mando conectado
|
||||||
|
double sen[360]; // Vector con los valores del seno para 360 grados
|
||||||
|
Player *player; // El jugador
|
||||||
|
Map *map; // El mapa del juego
|
||||||
|
Uint32 scoreData[TOTAL_SCORE_DATA]; // Datos del fichero de puntuación
|
||||||
|
std::string path; // Path donde está el ejecutable del juego
|
||||||
|
enum _section // Lista con todas las secciones en las que se divide el programa
|
||||||
|
{
|
||||||
|
GAME,
|
||||||
|
TITLE,
|
||||||
|
QUIT,
|
||||||
|
NONE
|
||||||
|
};
|
||||||
|
_section section; // Seccion actual del programa
|
||||||
|
bool quit; // Indica si hay que terminar el programa
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
Director(std::string _path);
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~Director();
|
||||||
|
|
||||||
|
// Inicializa todas las variables
|
||||||
|
void init(std::string _path);
|
||||||
|
|
||||||
|
// Inicializa las variables de las opciones
|
||||||
|
void initOptions();
|
||||||
|
|
||||||
|
// Inicializa las variables del juego
|
||||||
|
void initGame();
|
||||||
|
|
||||||
|
// Limpia las variables del juego
|
||||||
|
void quitGame();
|
||||||
|
|
||||||
|
// Arranca SDL y crea la ventana
|
||||||
|
bool initSDL();
|
||||||
|
|
||||||
|
// Crea los objetos del programa
|
||||||
|
void initObjects();
|
||||||
|
|
||||||
|
// Borra los objetos del programa
|
||||||
|
void deleteObjects();
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setPath(std::string _path);
|
||||||
|
|
||||||
|
// Crea el indice de ficheros de recursos
|
||||||
|
void setResourceList();
|
||||||
|
|
||||||
|
// Comprueba que todos los ficheros de recursos existen
|
||||||
|
bool checkResourceList();
|
||||||
|
|
||||||
|
// Inicializa la variable con los ficheros de recursos
|
||||||
|
bool initResourceList();
|
||||||
|
|
||||||
|
// Carga un archivo de imagen en una textura
|
||||||
|
bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer);
|
||||||
|
|
||||||
|
// Carga los recursos necesarios
|
||||||
|
bool loadMedia(Uint8 section);
|
||||||
|
|
||||||
|
// Descrga los recursos necesarios
|
||||||
|
bool unLoadMedia(Uint8 section);
|
||||||
|
|
||||||
|
// Obtiene el valor de la variable
|
||||||
|
Uint8 getGameSection();
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void changeGameSection(_section sectionPrevious, _section sectionNext);
|
||||||
|
|
||||||
|
// Cambia el valor de la variable de modo de pantalla completa
|
||||||
|
void changeFullScreenMode();
|
||||||
|
|
||||||
|
// Comprueba si hay que salir
|
||||||
|
bool isRunning();
|
||||||
|
|
||||||
|
// Bucle para el logo del juego
|
||||||
|
void runLogo();
|
||||||
|
|
||||||
|
// Bucle para la intro del juego
|
||||||
|
void runIntro();
|
||||||
|
|
||||||
|
// Bucle para el titulo del juego
|
||||||
|
void runTitle();
|
||||||
|
|
||||||
|
// Bucle para el juego
|
||||||
|
void runGame();
|
||||||
|
|
||||||
|
// Pinta la sección de juego
|
||||||
|
void renderGame();
|
||||||
|
|
||||||
|
// Actualiza la lógica del juego
|
||||||
|
void updateGame();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
500
source/game.cpp
500
source/game.cpp
@@ -1,500 +0,0 @@
|
|||||||
#include "const.h"
|
|
||||||
#include "struct.h"
|
|
||||||
#include "game.h"
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
const Uint8 *keystates;
|
|
||||||
|
|
||||||
// Constructor
|
|
||||||
Game::Game()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Game::~Game()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iniciador
|
|
||||||
void Game::init()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arranca SDL y crea la ventana
|
|
||||||
bool Game::initSDL()
|
|
||||||
{
|
|
||||||
// Indicador de inicialización
|
|
||||||
bool success = true;
|
|
||||||
|
|
||||||
// Inicializa SDL
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_AUDIO | SDL_INIT_HAPTIC) < 0)
|
|
||||||
{
|
|
||||||
printf("SDL could not initialize!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Establece el filtro de la textura a nearest
|
|
||||||
if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"))
|
|
||||||
{
|
|
||||||
printf("Warning: Nearest texture filtering not enabled!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inicializa jail_audio
|
|
||||||
JA_Init(48000, AUDIO_S16, 2);
|
|
||||||
|
|
||||||
// Comprueba si hay algun mando conectado
|
|
||||||
if (SDL_NumJoysticks() < 1)
|
|
||||||
{
|
|
||||||
printf("Warning: No joysticks connected!\n");
|
|
||||||
mGameControllerFound = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Carga el mando
|
|
||||||
mGameController = SDL_JoystickOpen(0);
|
|
||||||
mGameControllerFound = true;
|
|
||||||
|
|
||||||
if (mGameController == NULL)
|
|
||||||
{
|
|
||||||
printf("Warning: Unable to open game controller!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
mGameControllerFound = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("%i joysticks were found.\n", SDL_NumJoysticks());
|
|
||||||
std::cout << SDL_JoystickNumButtons(mGameController) << " buttons\n";
|
|
||||||
|
|
||||||
//Get controller haptic device
|
|
||||||
mControllerHaptic = SDL_HapticOpenFromJoystick(mGameController);
|
|
||||||
if (mControllerHaptic == NULL)
|
|
||||||
{
|
|
||||||
printf("Warning: Controller does not support haptics!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Haptics detected\n");
|
|
||||||
|
|
||||||
//Get initialize rumble
|
|
||||||
if (SDL_HapticRumbleInit(mControllerHaptic) < 0)
|
|
||||||
{
|
|
||||||
printf("Warning: Unable to initialize rumble!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea la ventana
|
|
||||||
mWindow = SDL_CreateWindow(WINDOW_CAPTION, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, VIEW_WIDTH, VIEW_HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
|
||||||
if (mWindow == NULL)
|
|
||||||
{
|
|
||||||
printf("Window could not be created!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Crea un renderizador para la ventana con vsync
|
|
||||||
mRenderer = SDL_CreateRenderer(mWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
|
||||||
if (mRenderer == NULL)
|
|
||||||
{
|
|
||||||
printf("Renderer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Inicializa el color de renderizado
|
|
||||||
SDL_SetRenderDrawColor(mRenderer, 0x00, 0x00, 0x00, 0xFF);
|
|
||||||
|
|
||||||
// Establece el tamaño del buffer de renderizado
|
|
||||||
SDL_RenderSetLogicalSize(mRenderer, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
||||||
|
|
||||||
// Establece el modo de mezcla
|
|
||||||
SDL_SetRenderDrawBlendMode(mRenderer, SDL_BLENDMODE_BLEND);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea un backbuffer para el renderizador
|
|
||||||
mBackbuffer = SDL_CreateTexture(mRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
||||||
if (mBackbuffer == NULL)
|
|
||||||
{
|
|
||||||
printf("Backbuffer could not be created!\nSDL Error: %s\n", SDL_GetError());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crea el indice de ficheros
|
|
||||||
void Game::setFileList()
|
|
||||||
{
|
|
||||||
// Ficheros binarios
|
|
||||||
mResource.file[FILE_MAP_VOLCANO].file = mGame.path + "/" + "../data/volcano.map";
|
|
||||||
mResource.file[FILE_CONFIG].file = mGame.path + "/" + "../data/config.bin";
|
|
||||||
|
|
||||||
// Texturas
|
|
||||||
mResource.texture[TEXTURE_ACTORS].file = mGame.path + "/" + "../media/gfx/actors.png";
|
|
||||||
mResource.texture[TEXTURE_BKG_SURFACE].file = mGame.path + "/" + "../media/gfx/bkg_surface.png";
|
|
||||||
mResource.texture[TEXTURE_FILTER].file = mGame.path + "/" + "../media/gfx/filter.png";
|
|
||||||
mResource.texture[TEXTURE_HUD].file = mGame.path + "/" + "../media/gfx/hud.png";
|
|
||||||
mResource.texture[TEXTURE_MENU_ANIMATION].file = mGame.path + "/" + "../media/gfx/menu_animation.png";
|
|
||||||
mResource.texture[TEXTURE_MENU].file = mGame.path + "/" + "../media/gfx/menu.png";
|
|
||||||
mResource.texture[TEXTURE_PLAYER].file = mGame.path + "/" + "../media/gfx/player.png";
|
|
||||||
mResource.texture[TEXTURE_TILES_SURFACE].file = mGame.path + "/" + "../media/gfx/tiles_surface.png";
|
|
||||||
mResource.texture[TEXTURE_TILES_VOLCANO].file = mGame.path + "/" + "../media/gfx/tiles_volcano.png";
|
|
||||||
|
|
||||||
// Sonidos
|
|
||||||
mResource.sound[SOUND_COIN].file = mGame.path + "/" + "../media/sound/sound_player_coin.wav";
|
|
||||||
mResource.sound[SOUND_DEATH].file = mGame.path + "/" + "../media/sound/sound_player_death.wav";
|
|
||||||
mResource.sound[SOUND_DROP_ENEMY].file = mGame.path + "/" + "../media/sound/sound_drop_enemy.wav";
|
|
||||||
mResource.sound[SOUND_DROP_SPLAT].file = mGame.path + "/" + "../media/sound/sound_drop_splat.wav";
|
|
||||||
mResource.sound[SOUND_JUMP].file = mGame.path + "/" + "../media/sound/sound_player_jump.wav";
|
|
||||||
mResource.sound[SOUND_MENU_LOGO].file = mGame.path + "/" + "../media/sound/sound_menu_logo.wav";
|
|
||||||
mResource.sound[SOUND_MENU_START].file = mGame.path + "/" + "../media/sound/sound_menu_start.wav";
|
|
||||||
|
|
||||||
// Musicas
|
|
||||||
mResource.music[MUSIC_MENU].file = mGame.path + "/" + "../media/music/music_menu.ogg";
|
|
||||||
mResource.music[MUSIC_SURFACE].file = mGame.path + "/" + "../media/music/music_surface.ogg";
|
|
||||||
mResource.music[MUSIC_VOLCANO].file = mGame.path + "/" + "../media/music/music_volcano.ogg";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comprueba que todos los ficheros existen
|
|
||||||
bool Game::checkFileList()
|
|
||||||
{
|
|
||||||
bool success = true;
|
|
||||||
std::string p;
|
|
||||||
std::string filename;
|
|
||||||
SDL_RWops *file;
|
|
||||||
|
|
||||||
// Comprueba los ficheros de musica
|
|
||||||
printf("\n>> MUSIC FILES\n");
|
|
||||||
for (Uint8 i = 0; i < TOTAL_MUSIC; i++)
|
|
||||||
{
|
|
||||||
p = mResource.music[i].file.c_str();
|
|
||||||
filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
file = SDL_RWFromFile(p.c_str(), "r+b");
|
|
||||||
if (file != NULL)
|
|
||||||
{
|
|
||||||
printf("Checking file %-20s [OK]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
success = false;
|
|
||||||
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comprueba los ficheros de sonidos
|
|
||||||
printf("\n>> SOUND FILES\n");
|
|
||||||
for (Uint8 i = 0; i < TOTAL_SOUND; i++)
|
|
||||||
{
|
|
||||||
p = mResource.sound[i].file.c_str();
|
|
||||||
filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
file = SDL_RWFromFile(p.c_str(), "r+b");
|
|
||||||
if (file != NULL)
|
|
||||||
{
|
|
||||||
printf("Checking file %-20s [OK]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
success = false;
|
|
||||||
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comprueba los ficheros con texturas
|
|
||||||
printf("\n>> TEXTURE FILES\n");
|
|
||||||
for (Uint8 i = 0; i < TOTAL_TEXTURE; i++)
|
|
||||||
{
|
|
||||||
p = mResource.texture[i].file.c_str();
|
|
||||||
filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
file = SDL_RWFromFile(p.c_str(), "r+b");
|
|
||||||
if (file != NULL)
|
|
||||||
{
|
|
||||||
printf("Checking file %-20s [OK]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
success = false;
|
|
||||||
printf("Checking file %-20s [ERROR]\n", filename.c_str());
|
|
||||||
}
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resultado
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
printf("\n** All files OK.\n\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("\n** File is missing. Exiting.\n\n");
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carga un archivo de imagen en una textura
|
|
||||||
bool Game::loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *renderer)
|
|
||||||
{
|
|
||||||
bool success = true;
|
|
||||||
if (!texture->loadFromFile(path, renderer))
|
|
||||||
{
|
|
||||||
printf("Failed to load %s texture!\n", path.c_str());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Carga los recursos necesarios
|
|
||||||
bool Game::loadMedia(Uint8 section)
|
|
||||||
{
|
|
||||||
// Indicador de éxito en la carga
|
|
||||||
bool success = true;
|
|
||||||
std::string path = mGame.path + "/";
|
|
||||||
std::string p;
|
|
||||||
|
|
||||||
switch (section)
|
|
||||||
{
|
|
||||||
case GAME_SECTION_INIT:
|
|
||||||
{
|
|
||||||
p = mResource.file[FILE_CONFIG].file.c_str();
|
|
||||||
std::string filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
|
|
||||||
// Abre el fichero con la configuracion de las opciones para leer en binario
|
|
||||||
SDL_RWops *file = SDL_RWFromFile(p.c_str(), "r+b");
|
|
||||||
|
|
||||||
// El fichero no existe
|
|
||||||
if (file == NULL)
|
|
||||||
{
|
|
||||||
printf("Warning: Unable to open %s file\n", filename.c_str());
|
|
||||||
|
|
||||||
// Crea el fichero para escribir
|
|
||||||
file = SDL_RWFromFile(p.c_str(), "w+b");
|
|
||||||
if (file != NULL)
|
|
||||||
{
|
|
||||||
printf("New file (%s) created!\n", filename.c_str());
|
|
||||||
|
|
||||||
// Inicializa los datos
|
|
||||||
mGame.options.fullScreenMode = 0;
|
|
||||||
SDL_RWwrite(file, &mGame.options.fullScreenMode, sizeof(mGame.options.fullScreenMode), 1);
|
|
||||||
|
|
||||||
mGame.options.windowSize = 3;
|
|
||||||
SDL_RWwrite(file, &mGame.options.windowSize, sizeof(mGame.options.windowSize), 1);
|
|
||||||
|
|
||||||
// Cierra el fichero
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Error: Unable to create file %s\n", filename.c_str());
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// El fichero existe
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Carga los datos
|
|
||||||
printf("Reading file %s\n", filename.c_str());
|
|
||||||
SDL_RWread(file, &mGame.options.fullScreenMode, sizeof(mGame.options.fullScreenMode), 1);
|
|
||||||
SDL_SetWindowFullscreen(mWindow, mGame.options.fullScreenMode);
|
|
||||||
SDL_RWread(file, &mGame.options.windowSize, sizeof(mGame.options.windowSize), 1);
|
|
||||||
SDL_SetWindowSize(mWindow, SCREEN_WIDTH * mGame.options.windowSize, SCREEN_HEIGHT * mGame.options.windowSize);
|
|
||||||
|
|
||||||
// Cierra el fichero
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
// Texturas
|
|
||||||
|
|
||||||
// Sonidos
|
|
||||||
|
|
||||||
// Musicas
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_TITLE:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_PLAYING:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_GAME_OVER_SCREEN:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_INTRO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_DEMO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_INSTRUCTIONS:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_LOGO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Descrga los recursos necesarios
|
|
||||||
bool Game::unLoadMedia(Uint8 section)
|
|
||||||
{
|
|
||||||
// Indicador de éxito en la carga
|
|
||||||
bool success = true;
|
|
||||||
std::string path = mGame.path + "/";
|
|
||||||
std::string p;
|
|
||||||
|
|
||||||
switch (section)
|
|
||||||
{
|
|
||||||
case GAME_SECTION_INIT:
|
|
||||||
{
|
|
||||||
p = mResource.file[FILE_CONFIG].file;
|
|
||||||
std::string filename = p.substr(p.find_last_of("\\/") + 1);
|
|
||||||
|
|
||||||
// Abre el fichero de puntuación para escribir
|
|
||||||
SDL_RWops *file = SDL_RWFromFile(p.c_str(), "w+b");
|
|
||||||
|
|
||||||
if (file != NULL)
|
|
||||||
{
|
|
||||||
// Guardamos los datos
|
|
||||||
SDL_RWwrite(file, &mGame.options.fullScreenMode, sizeof(Uint32), 1);
|
|
||||||
SDL_RWwrite(file, &mGame.options.windowSize, sizeof(Uint8), 1);
|
|
||||||
|
|
||||||
printf("Writing file %s\n", filename.c_str());
|
|
||||||
|
|
||||||
// Cerramos el fichero
|
|
||||||
SDL_RWclose(file);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Error: Unable to save %s file! %s\n", filename.c_str(), SDL_GetError());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_TITLE:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_PLAYING:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_GAME_OVER_SCREEN:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_INTRO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_DEMO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_INSTRUCTIONS:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GAME_SECTION_LOGO:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Game::setPath(std::string path)
|
|
||||||
{
|
|
||||||
mGame.path = path.substr(0, path.find_last_of("\\/"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
Uint8 Game::getGameSection()
|
|
||||||
{
|
|
||||||
return mGame.section;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Game::setGameSection(Uint8 section)
|
|
||||||
{
|
|
||||||
mGame.section = section;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cambia el valor de la variable de modo de pantalla completa
|
|
||||||
void Game::changeFullScreenMode()
|
|
||||||
{
|
|
||||||
switch (mGame.options.fullScreenMode)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
mGame.options.fullScreenMode = SDL_WINDOW_FULLSCREEN;
|
|
||||||
break;
|
|
||||||
case SDL_WINDOW_FULLSCREEN:
|
|
||||||
mGame.options.fullScreenMode = SDL_WINDOW_FULLSCREEN_DESKTOP;
|
|
||||||
break;
|
|
||||||
case SDL_WINDOW_FULLSCREEN_DESKTOP:
|
|
||||||
mGame.options.fullScreenMode = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mGame.options.fullScreenMode = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bucle para el logo del juego
|
|
||||||
void Game::runLogo()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bucle para la intro del juego
|
|
||||||
void Game::runIntro()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bucle para el titulo del juego
|
|
||||||
void Game::runTitle()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// Bucle para el juego
|
|
||||||
void Game::runGame()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -51,7 +51,6 @@ bool LTexture::loadFromFile(std::string path, SDL_Renderer *renderer)
|
|||||||
SDL_Texture *newTexture = NULL;
|
SDL_Texture *newTexture = NULL;
|
||||||
|
|
||||||
// Load image at specified path
|
// Load image at specified path
|
||||||
//SDL_Surface *loadedSurface = IMG_Load(path.c_str());
|
|
||||||
SDL_Surface *loadedSurface = SDL_CreateRGBSurfaceWithFormatFrom((void*)data, width, height, depth, pitch, pixel_format);
|
SDL_Surface *loadedSurface = SDL_CreateRGBSurfaceWithFormatFrom((void*)data, width, height, depth, pitch, pixel_format);
|
||||||
if (loadedSurface == NULL)
|
if (loadedSurface == NULL)
|
||||||
{
|
{
|
||||||
@@ -59,9 +58,6 @@ bool LTexture::loadFromFile(std::string path, SDL_Renderer *renderer)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Color key image
|
|
||||||
//SDL_SetColorKey(loadedSurface, SDL_TRUE, SDL_MapRGB(loadedSurface->format, COLOR_KEY_R, COLOR_KEY_G, COLOR_KEY_B));
|
|
||||||
|
|
||||||
// Create texture from surface pixels
|
// Create texture from surface pixels
|
||||||
newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
|
newTexture = SDL_CreateTextureFromSurface(renderer, loadedSurface);
|
||||||
if (newTexture == NULL)
|
if (newTexture == NULL)
|
||||||
|
|||||||
@@ -17,40 +17,34 @@ Repres un 14 de febrer de 2021
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "const.h"
|
#include "const.h"
|
||||||
#include "game.h"
|
#include "director.h"
|
||||||
|
|
||||||
int main(int argc, char *args[])
|
int main(int argc, char *args[])
|
||||||
{
|
{
|
||||||
// Inicia el generador de numeros aleatorios
|
// Inicia el generador de numeros aleatorios
|
||||||
srand(time(nullptr));
|
srand(time(nullptr));
|
||||||
|
|
||||||
// Crea el objeto game
|
// Crea el objeto director
|
||||||
Game *game = new Game();
|
Director *director = new Director(args[0]);
|
||||||
|
|
||||||
// Establece el valor de la variable con el path del ejecutable
|
// Comprueba si existen todos los ficheros de recursos
|
||||||
game->setPath(args[0]);
|
if (!director->initResourceList())
|
||||||
|
|
||||||
// Inicializa la lista de ficheros
|
|
||||||
game->setFileList();
|
|
||||||
|
|
||||||
// Comprueba que existen todos los ficheros
|
|
||||||
if (!game->checkFileList())
|
|
||||||
{
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
// Arranca SDL y crea la ventana
|
// Arranca SDL y crea la ventana
|
||||||
if (!game->initSDL())
|
if (!director->initSDL())
|
||||||
{
|
|
||||||
printf("Failed to initialize!\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
else
|
director->initGame();
|
||||||
|
while (director->isRunning())
|
||||||
{
|
{
|
||||||
|
director->runGame();
|
||||||
|
}
|
||||||
|
director->quitGame();
|
||||||
|
|
||||||
// Libera todos los recursos y cierra SDL
|
// Libera todos los recursos y cierra SDL
|
||||||
delete game;
|
delete director;
|
||||||
printf("Shutting down the game...\n");
|
printf("Shutting down the game...\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
99
source/map.cpp
Normal file
99
source/map.cpp
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
#include "const.h"
|
||||||
|
#include "map.h"
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
Map::Map(SDL_Renderer *renderer, LTexture *texture1, LTexture *texture2, LTexture *texture3, std::string file)
|
||||||
|
{
|
||||||
|
init(renderer, texture1, texture2, texture3, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
Map::~Map()
|
||||||
|
{
|
||||||
|
delete sprite_tile;
|
||||||
|
delete sprite_actor;
|
||||||
|
delete background;
|
||||||
|
sprite_tile = nullptr;
|
||||||
|
sprite_actor = nullptr;
|
||||||
|
background = nullptr;
|
||||||
|
|
||||||
|
//free(tile);
|
||||||
|
//free(actor);
|
||||||
|
delete[] tile;
|
||||||
|
delete[] actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inicializa todas las variables
|
||||||
|
void Map::init(SDL_Renderer *renderer, LTexture *texture1, LTexture *texture2, LTexture *texture3, std::string file)
|
||||||
|
{
|
||||||
|
sprite_tile = new AnimatedSprite();
|
||||||
|
sprite_tile->init(texture1, renderer);
|
||||||
|
|
||||||
|
sprite_actor = new AnimatedSprite();
|
||||||
|
sprite_actor->init(texture2, renderer);
|
||||||
|
|
||||||
|
background = new Sprite();
|
||||||
|
background->init(texture3, renderer);
|
||||||
|
background->setSpriteClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||||
|
|
||||||
|
src_rect = {0, 0, 0, 0};
|
||||||
|
dst_rect = {0, 0, 0, 0};
|
||||||
|
//tile = (Uint8 *)malloc(1000 * sizeof(Uint8));
|
||||||
|
//actor = (Uint8 *)malloc(1000 * sizeof(Uint8));
|
||||||
|
w = 0;
|
||||||
|
h = 0;
|
||||||
|
room = 0;
|
||||||
|
|
||||||
|
loadFromFile(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carga el mapa a partir de un fichero
|
||||||
|
void Map::loadFromFile(std::string path)
|
||||||
|
{
|
||||||
|
std::string filename = path.substr(path.find_last_of("\\/") + 1);
|
||||||
|
SDL_RWops *file = SDL_RWFromFile(path.c_str(), "r+b");
|
||||||
|
Uint8 *w;
|
||||||
|
Uint8 *h;
|
||||||
|
|
||||||
|
if (file == NULL)
|
||||||
|
{
|
||||||
|
printf("Warning: Unable to open %s file\n", filename.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Reading file %s\n", filename.c_str());
|
||||||
|
|
||||||
|
SDL_RWread(file, &w, sizeof(Uint8), 1);
|
||||||
|
SDL_RWread(file, &h, sizeof(Uint8), 1);
|
||||||
|
|
||||||
|
long size = (*w) * (*h);
|
||||||
|
tile = new Uint8[size];
|
||||||
|
actor = new Uint8[size];
|
||||||
|
|
||||||
|
for (long i = 0; i < size; i++)
|
||||||
|
SDL_RWread(file, &tile[i], sizeof(Uint8), 1);
|
||||||
|
|
||||||
|
for (long i = 0; i < size; i++)
|
||||||
|
SDL_RWread(file, &actor[i], sizeof(Uint8), 1);
|
||||||
|
|
||||||
|
SDL_RWclose(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resetea ciertas variables
|
||||||
|
void Map::reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actualiza todas las variables
|
||||||
|
void Map::update()
|
||||||
|
{
|
||||||
|
background->setPosX(0);
|
||||||
|
background->setPosY(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dibuja el objeto
|
||||||
|
void Map::render()
|
||||||
|
{
|
||||||
|
background->render();
|
||||||
|
}
|
||||||
48
source/map.h
Normal file
48
source/map.h
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "animatedsprite.h"
|
||||||
|
#include "jail_audio.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
#ifndef MAP_H
|
||||||
|
#define MAP_H
|
||||||
|
|
||||||
|
// The player
|
||||||
|
class Map
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
Map(SDL_Renderer *renderer, LTexture *texture1, LTexture *texture2, LTexture *texture3, std::string file);
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~Map();
|
||||||
|
|
||||||
|
// Inicializa todas las variables
|
||||||
|
void init(SDL_Renderer *renderer, LTexture *texture1, LTexture *texture2, LTexture *texture3, std::string file);
|
||||||
|
|
||||||
|
// Carga el mapa a partir de un fichero
|
||||||
|
void loadFromFile(std::string file);
|
||||||
|
|
||||||
|
// Resetea ciertas variables
|
||||||
|
void reset();
|
||||||
|
|
||||||
|
// Actualiza todas las variables
|
||||||
|
void update();
|
||||||
|
|
||||||
|
// Dibuja el objeto
|
||||||
|
void render();
|
||||||
|
|
||||||
|
private:
|
||||||
|
AnimatedSprite *sprite_tile; // Sprite de los tiles del mapa
|
||||||
|
AnimatedSprite *sprite_actor; // Sprite de los actores
|
||||||
|
Sprite *background; // Fondo de la pantalla
|
||||||
|
SDL_Rect src_rect; // Ni puta idea
|
||||||
|
SDL_Rect dst_rect; // Ni puta idea
|
||||||
|
Uint8 *tile; // Vector con los tiles
|
||||||
|
Uint8 *actor; // Vector con los acores
|
||||||
|
Uint8 w; // Anchura en habitaciones del mapa
|
||||||
|
Uint8 h; // Altura en habitaciones del mapa
|
||||||
|
Uint8 room; // Habitación actual del mapa
|
||||||
|
std::string mapfile; // Ruta con el fichero del mapa
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -253,9 +253,10 @@ void Menu::render()
|
|||||||
SDL_RenderFillRect(mRenderer, &rect);
|
SDL_RenderFillRect(mRenderer, &rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Rect rect2 = {mSelector.rect.x, mSelector.rect.y, mSelector.rect.w, mSelector.rect.h};
|
||||||
// Renderiza el rectangulo del selector
|
// Renderiza el rectangulo del selector
|
||||||
SDL_SetRenderDrawColor(mRenderer, mSelector.rect.r, mSelector.rect.g, mSelector.rect.b, mSelector.rect.a);
|
SDL_SetRenderDrawColor(mRenderer, mSelector.rect.r, mSelector.rect.g, mSelector.rect.b, mSelector.rect.a);
|
||||||
SDL_RenderFillRect(mRenderer, &mSelector.rect);
|
SDL_RenderFillRect(mRenderer, &rect2);
|
||||||
|
|
||||||
// Renderitza el text
|
// Renderitza el text
|
||||||
for (Uint8 i = 0; i < mTotalItems; i++)
|
for (Uint8 i = 0; i < mTotalItems; i++)
|
||||||
|
|||||||
@@ -2,750 +2,68 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Player::Player()
|
Player::Player(SDL_Renderer *renderer, LTexture *texture)
|
||||||
{
|
{
|
||||||
mSpriteLegs = new AnimatedSprite();
|
init(renderer, texture);
|
||||||
mSpriteBody = new AnimatedSprite();
|
|
||||||
init(0, 0, nullptr, nullptr, nullptr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
Player::~Player()
|
Player::~Player()
|
||||||
{
|
{
|
||||||
init(0, 0, nullptr, nullptr, nullptr);
|
delete sprite;
|
||||||
mSpriteLegs = nullptr;
|
sprite = nullptr;
|
||||||
mSpriteBody = nullptr;
|
|
||||||
delete mSpriteLegs;
|
|
||||||
delete mSpriteBody;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iniciador
|
// Inicializa todas las variables
|
||||||
void Player::init(float x, int y, LTexture *textureLegs, LTexture *textureBody, SDL_Renderer *renderer)
|
void Player::init(SDL_Renderer *renderer, LTexture *texture)
|
||||||
{
|
{
|
||||||
// Inicializa variables de estado
|
rect = {0, 0, 16, 24};
|
||||||
mAlive = true;
|
|
||||||
mStatusWalking = PLAYER_STATUS_WALKING_STOP;
|
|
||||||
mStatusFiring = PLAYER_STATUS_FIRING_NO;
|
|
||||||
mInvulnerable = false;
|
|
||||||
mInvulnerableTimer = PLAYER_INVULNERABLE_TIMER;
|
|
||||||
mExtraHit = false;
|
|
||||||
|
|
||||||
// Establece la altura y el ancho del jugador
|
can_jump = false;
|
||||||
mWidth = 3 * BLOCK;
|
enabled = false;
|
||||||
mHeight = 3 * BLOCK;
|
jump_pressed_before = false;
|
||||||
|
jump_pressed_now = false;
|
||||||
|
for (Uint8 i = 0; i < 6; i++)
|
||||||
|
key[i] = false;
|
||||||
|
standing = false;
|
||||||
|
was_on_background = false;
|
||||||
|
|
||||||
// Establece la posición inicial del jugador
|
coins = 0;
|
||||||
mPosX = x;
|
cooldown = 0;
|
||||||
mPosY = y;
|
jumpforce = 0;
|
||||||
|
respawn_x = 0;
|
||||||
|
respawn_y = 0;
|
||||||
|
speed_x = 0;
|
||||||
|
speed_y = 0;
|
||||||
|
|
||||||
// Establece el tamaño del circulo de colisión
|
sprite = new AnimatedSprite();
|
||||||
mCollider.r = 7;
|
sprite->init(texture, renderer);
|
||||||
|
sprite->setSpriteClip(rect);
|
||||||
|
|
||||||
// Actualiza la posición del circulo de colisión
|
sound_coin = 0;
|
||||||
shiftColliders();
|
sound_death = 0;
|
||||||
|
sound_jump = 0;
|
||||||
|
|
||||||
// Establece la velocidad inicial
|
active_animation = 0;
|
||||||
mVelX = 0;
|
direction = 0;
|
||||||
mVelY = 0;
|
lifes = 0;
|
||||||
|
respawn_direction = 0;
|
||||||
// Establece la velocidad base
|
|
||||||
mBaseSpeed = 1.5;
|
|
||||||
|
|
||||||
// Establece el numero inicial de vidas
|
|
||||||
mStartingLives = 3;
|
|
||||||
mLives = mStartingLives;
|
|
||||||
|
|
||||||
// Establece la puntuación inicial
|
|
||||||
mScore = 0;
|
|
||||||
|
|
||||||
// Establece el multiplicador de puntos inicial
|
|
||||||
mScoreMultiplier = 1.0f;
|
|
||||||
|
|
||||||
// Inicia el contador para la cadencia de disparo
|
|
||||||
mCooldown = 10;
|
|
||||||
|
|
||||||
// Inicia el sprite
|
|
||||||
mSpriteLegs->init(textureLegs, renderer);
|
|
||||||
mSpriteBody->init(textureBody, renderer);
|
|
||||||
|
|
||||||
// Establece el alto y ancho del sprite
|
|
||||||
mSpriteLegs->setWidth(mWidth);
|
|
||||||
mSpriteLegs->setHeight(mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setWidth(mWidth);
|
|
||||||
mSpriteBody->setHeight(mHeight);
|
|
||||||
|
|
||||||
// Establece la posición del sprite
|
|
||||||
mSpriteLegs->setPosX(int(mPosX));
|
|
||||||
mSpriteLegs->setPosY(mPosY);
|
|
||||||
|
|
||||||
mSpriteBody->setPosX(int(mPosX));
|
|
||||||
mSpriteBody->setPosY(mPosY);
|
|
||||||
|
|
||||||
// Inicializa las variables para la animación
|
|
||||||
mSpriteLegs->setCurrentFrame(0);
|
|
||||||
mSpriteLegs->setAnimationCounter(0);
|
|
||||||
|
|
||||||
mSpriteBody->setCurrentFrame(0);
|
|
||||||
mSpriteBody->setAnimationCounter(0);
|
|
||||||
|
|
||||||
// Establece el numero de frames de cada animacion
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 4);
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 4);
|
|
||||||
mSpriteLegs->setAnimationNumFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 4);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 4);
|
|
||||||
mSpriteBody->setAnimationNumFrames(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 4);
|
|
||||||
|
|
||||||
// Establece la velocidad de cada animación
|
|
||||||
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_STOP, 10);
|
|
||||||
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 5);
|
|
||||||
mSpriteLegs->setAnimationSpeed(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 5);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_LEFT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_LEFT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_STOP, 10);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_UP, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 5);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 10);
|
|
||||||
mSpriteBody->setAnimationSpeed(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 5);
|
|
||||||
|
|
||||||
// Establece si la animación se reproduce en bucle
|
|
||||||
mSpriteLegs->setAnimationLoop(PLAYER_ANIMATION_LEGS_WALKING_STOP, true);
|
|
||||||
mSpriteLegs->setAnimationLoop(PLAYER_ANIMATION_LEGS_WALKING_LEFT, true);
|
|
||||||
mSpriteLegs->setAnimationLoop(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, true);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_LEFT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_LEFT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_RIGHT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_RIGHT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_STOP, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_UP, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, true);
|
|
||||||
mSpriteBody->setAnimationLoop(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, true);
|
|
||||||
|
|
||||||
// Establece los frames de cada animación
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 0, mWidth * 0, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 1, mWidth * 1, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 2, mWidth * 2, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_LEFT, 3, mWidth * 3, mHeight * 0, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 0, mWidth * 0, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 1, mWidth * 1, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 2, mWidth * 2, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_RIGHT, 3, mWidth * 3, mHeight * 1, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 0, mWidth * 0, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 1, mWidth * 1, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 2, mWidth * 2, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteLegs->setAnimationFrames(PLAYER_ANIMATION_LEGS_WALKING_STOP, 3, mWidth * 3, mHeight * 2, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 0, mWidth * 0, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 1, mWidth * 1, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 2, mWidth * 2, mHeight * 0, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT, 3, mWidth * 3, mHeight * 0, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 0, mWidth * 0, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 1, mWidth * 1, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 2, mWidth * 2, mHeight * 1, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT, 3, mWidth * 3, mHeight * 1, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 0, mWidth * 0, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 1, mWidth * 1, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 2, mWidth * 2, mHeight * 2, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT, 3, mWidth * 3, mHeight * 2, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 0, mWidth * 0, mHeight * 3, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 1, mWidth * 1, mHeight * 3, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 2, mWidth * 2, mHeight * 3, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT, 3, mWidth * 3, mHeight * 3, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 0, mWidth * 0, mHeight * 4, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 1, mWidth * 1, mHeight * 4, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 2, mWidth * 2, mHeight * 4, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP, 3, mWidth * 3, mHeight * 4, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 0, mWidth * 0, mHeight * 5, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 1, mWidth * 1, mHeight * 5, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 2, mWidth * 2, mHeight * 5, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP, 3, mWidth * 3, mHeight * 5, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 0, mWidth * 0, mHeight * 6, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 1, mWidth * 1, mHeight * 6, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 2, mWidth * 2, mHeight * 6, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT, 3, mWidth * 3, mHeight * 6, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 0, mWidth * 0, mHeight * 7, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 1, mWidth * 1, mHeight * 7, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 2, mWidth * 2, mHeight * 7, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT, 3, mWidth * 3, mHeight * 7, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 0, mWidth * 0, mHeight * 8, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 1, mWidth * 1, mHeight * 8, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 2, mWidth * 2, mHeight * 8, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT, 3, mWidth * 3, mHeight * 8, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 0, mWidth * 0, mHeight * 9, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 1, mWidth * 1, mHeight * 9, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 2, mWidth * 2, mHeight * 9, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT, 3, mWidth * 3, mHeight * 9, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 0, mWidth * 0, mHeight * 10, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 1, mWidth * 1, mHeight * 10, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 2, mWidth * 2, mHeight * 10, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT, 3, mWidth * 3, mHeight * 10, mWidth, mHeight);
|
|
||||||
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 0, mWidth * 0, mHeight * 11, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 1, mWidth * 1, mHeight * 11, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 2, mWidth * 2, mHeight * 11, mWidth, mHeight);
|
|
||||||
mSpriteBody->setAnimationFrames(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT, 3, mWidth * 3, mHeight * 11, mWidth, mHeight);
|
|
||||||
|
|
||||||
// Selecciona un frame para pintar
|
|
||||||
mSpriteLegs->setSpriteClip(mSpriteLegs->getAnimationClip(PLAYER_ANIMATION_LEGS_WALKING_STOP, 0));
|
|
||||||
mSpriteBody->setSpriteClip(mSpriteBody->getAnimationClip(PLAYER_ANIMATION_BODY_WALKING_STOP, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actua en consecuencia de la entrada recibida
|
// Resetea ciertas variables
|
||||||
void Player::setInput(Uint8 input)
|
void Player::reset()
|
||||||
{
|
{
|
||||||
switch (input)
|
|
||||||
{
|
|
||||||
case INPUT_LEFT:
|
|
||||||
mVelX = -mBaseSpeed;
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_LEFT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_LEFT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INPUT_RIGHT:
|
|
||||||
mVelX = mBaseSpeed;
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_RIGHT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_RIGHT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INPUT_FIRE_UP:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_UP);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_UP);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INPUT_FIRE_LEFT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_LEFT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_LEFT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case INPUT_FIRE_RIGHT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_RIGHT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_RIGHT);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mVelX = 0;
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_STOP);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setWalkingStatus(PLAYER_STATUS_WALKING_STOP);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mueve el jugador a la posición y animación que le corresponde
|
// Actualiza todas las variables
|
||||||
void Player::move()
|
|
||||||
{
|
|
||||||
if (isAlive())
|
|
||||||
{
|
|
||||||
// Mueve el jugador a derecha o izquierda
|
|
||||||
mPosX += mVelX;
|
|
||||||
|
|
||||||
// Si el jugador abandona el area de juego por los laterales
|
|
||||||
if ((mPosX < PLAY_AREA_LEFT) || (mPosX + mWidth > PLAY_AREA_RIGHT))
|
|
||||||
{
|
|
||||||
// Restaura su posición
|
|
||||||
mPosX -= mVelX;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza la posición del sprite
|
|
||||||
mSpriteLegs->setPosX(getPosX());
|
|
||||||
mSpriteLegs->setPosY(mPosY);
|
|
||||||
|
|
||||||
mSpriteBody->setPosX(getPosX());
|
|
||||||
mSpriteBody->setPosY(mPosY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pinta el jugador en pantalla
|
|
||||||
void Player::render()
|
|
||||||
{
|
|
||||||
if (isAlive())
|
|
||||||
{
|
|
||||||
if (mInvulnerable)
|
|
||||||
{
|
|
||||||
if ((mInvulnerableTimer % 10) > 4)
|
|
||||||
{
|
|
||||||
mSpriteLegs->render();
|
|
||||||
mSpriteBody->render();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteLegs->render();
|
|
||||||
mSpriteBody->render();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el estado del jugador cuando camina
|
|
||||||
void Player::setWalkingStatus(Uint8 status)
|
|
||||||
{
|
|
||||||
// Si cambiamos de estado, reiniciamos la animación
|
|
||||||
if (mStatusWalking != status)
|
|
||||||
{
|
|
||||||
mStatusWalking = status;
|
|
||||||
mSpriteLegs->setCurrentFrame(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el estado del jugador cuando dispara
|
|
||||||
void Player::setFiringStatus(Uint8 status)
|
|
||||||
{
|
|
||||||
// Si cambiamos de estado, reiniciamos la animación
|
|
||||||
if (mStatusFiring != status)
|
|
||||||
{
|
|
||||||
mStatusFiring = status;
|
|
||||||
mSpriteBody->setCurrentFrame(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece la animación correspondiente al estado
|
|
||||||
void Player::setAnimation()
|
|
||||||
{
|
|
||||||
switch (mStatusWalking)
|
|
||||||
{
|
|
||||||
case PLAYER_STATUS_WALKING_LEFT:
|
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_LEFT);
|
|
||||||
switch (mStatusFiring)
|
|
||||||
{
|
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_LEFT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_WALKING_RIGHT:
|
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_RIGHT);
|
|
||||||
switch (mStatusFiring)
|
|
||||||
{
|
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_RIGHT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_RIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_WALKING_STOP:
|
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
|
||||||
switch (mStatusFiring)
|
|
||||||
{
|
|
||||||
case PLAYER_STATUS_FIRING_UP:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_UP);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_LEFT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_LEFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_RIGHT:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_FIRING_RIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PLAYER_STATUS_FIRING_NO:
|
|
||||||
if (mExtraHit)
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP_EXTRA_HIT);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mSpriteBody->animate(PLAYER_ANIMATION_BODY_WALKING_STOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mSpriteLegs->animate(PLAYER_ANIMATION_LEGS_WALKING_STOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int Player::getPosX()
|
|
||||||
{
|
|
||||||
return int(mPosX);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int Player::getPosY()
|
|
||||||
{
|
|
||||||
return mPosY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int Player::getWidth()
|
|
||||||
{
|
|
||||||
return mWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int Player::getHeight()
|
|
||||||
{
|
|
||||||
return mHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Indica si el jugador puede disparar
|
|
||||||
bool Player::canFire()
|
|
||||||
{
|
|
||||||
// Si el contador a llegado a cero, podemos disparar. En caso contrario decrementamos el contador
|
|
||||||
if (mCooldown > 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Player::setFireCooldown(int time)
|
|
||||||
{
|
|
||||||
mCooldown = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza el valor de la variable
|
|
||||||
void Player::updateCooldown()
|
|
||||||
{
|
|
||||||
if (mCooldown > 0)
|
|
||||||
{
|
|
||||||
--mCooldown;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setFiringStatus(PLAYER_STATUS_FIRING_NO);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza al jugador a su posicion, animación y controla los contadores
|
|
||||||
void Player::update()
|
void Player::update()
|
||||||
{
|
{
|
||||||
move();
|
sprite->setPosX(rect.x);
|
||||||
setAnimation();
|
sprite->setPosY(rect.y);
|
||||||
shiftColliders();
|
|
||||||
updateCooldown();
|
|
||||||
updateInvulnerableTimer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Obtiene la puntuación del jugador
|
// Dibuja el objeto
|
||||||
int Player::getScore()
|
void Player::render()
|
||||||
{
|
{
|
||||||
return mScore;
|
sprite->render();
|
||||||
}
|
|
||||||
|
|
||||||
// Asigna un valor a la puntuación del jugador
|
|
||||||
void Player::setScore(int score)
|
|
||||||
{
|
|
||||||
mScore = score;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Incrementa la puntuación del jugador
|
|
||||||
void Player::addScore(int score)
|
|
||||||
{
|
|
||||||
mScore += score;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool Player::isAlive()
|
|
||||||
{
|
|
||||||
return mAlive;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Player::setAlive(bool value)
|
|
||||||
{
|
|
||||||
mAlive = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
float Player::getScoreMultiplier()
|
|
||||||
{
|
|
||||||
return mScoreMultiplier;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Player::setScoreMultiplier(float value)
|
|
||||||
{
|
|
||||||
mScoreMultiplier = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Aumenta el valor de la variable hasta un máximo
|
|
||||||
void Player::incScoreMultiplier()
|
|
||||||
{
|
|
||||||
if (mScoreMultiplier < 5.0f)
|
|
||||||
{
|
|
||||||
mScoreMultiplier += 0.1f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decrementa el valor de la variable hasta un mínimo
|
|
||||||
void Player::decScoreMultiplier()
|
|
||||||
{
|
|
||||||
if (mScoreMultiplier > 1.0f)
|
|
||||||
{
|
|
||||||
mScoreMultiplier -= 0.1f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool Player::isInvulnerable()
|
|
||||||
{
|
|
||||||
return mInvulnerable;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Player::setInvulnerable(bool value)
|
|
||||||
{
|
|
||||||
mInvulnerable = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool Player::getInvulnerableTimer()
|
|
||||||
{
|
|
||||||
return mInvulnerableTimer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void Player::setInvulnerableTimer(Uint16 value)
|
|
||||||
{
|
|
||||||
mInvulnerableTimer = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza el valor de la variable
|
|
||||||
void Player::updateInvulnerableTimer()
|
|
||||||
{
|
|
||||||
if (mInvulnerableTimer > 0)
|
|
||||||
{
|
|
||||||
--mInvulnerableTimer;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mInvulnerable = false;
|
|
||||||
mInvulnerableTimer = PLAYER_INVULNERABLE_TIMER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool Player::hasExtraHit()
|
|
||||||
{
|
|
||||||
return mExtraHit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Concede un toque extra al jugador
|
|
||||||
void Player::giveExtraHit()
|
|
||||||
{
|
|
||||||
mExtraHit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quita el toque extra al jugador
|
|
||||||
void Player::removeExtraHit()
|
|
||||||
{
|
|
||||||
mExtraHit = false;
|
|
||||||
mInvulnerable = true;
|
|
||||||
mInvulnerableTimer = PLAYER_INVULNERABLE_TIMER;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Obtiene el circulo de colisión
|
|
||||||
Circle &Player::getCollider()
|
|
||||||
{
|
|
||||||
return mCollider;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Actualiza el circulo de colisión a la posición del jugador
|
|
||||||
void Player::shiftColliders()
|
|
||||||
{
|
|
||||||
mCollider.x = Uint16(mPosX + (mWidth / 2));
|
|
||||||
mCollider.y = mPosY + (mHeight / 2);
|
|
||||||
}
|
}
|
||||||
182
source/player.h
182
source/player.h
@@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "struct.h"
|
|
||||||
#include "animatedsprite.h"
|
#include "animatedsprite.h"
|
||||||
|
#include "jail_audio.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
#ifndef PLAYER_H
|
#ifndef PLAYER_H
|
||||||
#define PLAYER_H
|
#define PLAYER_H
|
||||||
@@ -10,164 +11,47 @@ class Player
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Player();
|
Player(SDL_Renderer *renderer, LTexture *texture);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Player();
|
~Player();
|
||||||
|
|
||||||
// Iniciador
|
// Inicializa todas las variables
|
||||||
void init(float x, int y, LTexture *textureLegs, LTexture *textureBody, SDL_Renderer *renderer);
|
void init(SDL_Renderer *renderer, LTexture *texture);
|
||||||
|
|
||||||
// Actua en consecuencia de la entrada recibida
|
// Resetea ciertas variables
|
||||||
void setInput(Uint8 input);
|
void reset();
|
||||||
|
|
||||||
// Mueve el jugador a la posición y animación que le corresponde
|
// Actualiza todas las variables
|
||||||
void move();
|
|
||||||
|
|
||||||
// Pinta el jugador en pantalla
|
|
||||||
void render();
|
|
||||||
|
|
||||||
// Establece el estado del jugador
|
|
||||||
void setWalkingStatus(Uint8 status);
|
|
||||||
void setFiringStatus(Uint8 status);
|
|
||||||
|
|
||||||
// Establece la animación correspondiente al estado
|
|
||||||
void setAnimation();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int getPosX();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int getPosY();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int getWidth();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
int getHeight();
|
|
||||||
|
|
||||||
// Indica si el jugador puede disparar
|
|
||||||
bool canFire();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setFireCooldown(int time);
|
|
||||||
|
|
||||||
// Actualiza el valor de la variable
|
|
||||||
void updateCooldown();
|
|
||||||
|
|
||||||
// Actualiza al jugador a su posicion, animación y controla los contadores
|
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
// Obtiene la puntuación del jugador
|
// Dibuja el objeto
|
||||||
int getScore();
|
void render();
|
||||||
|
|
||||||
// Asigna un valor a la puntuación del jugador
|
|
||||||
void setScore(int score);
|
|
||||||
|
|
||||||
// Incrementa la puntuación del jugador
|
|
||||||
void addScore(int score);
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool isAlive();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setAlive(bool value);
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
float getScoreMultiplier();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setScoreMultiplier(float value);
|
|
||||||
|
|
||||||
// Aumenta el valor de la variable hasta un máximo
|
|
||||||
void incScoreMultiplier();
|
|
||||||
|
|
||||||
// Decrementa el valor de la variable hasta un mínimo
|
|
||||||
void decScoreMultiplier();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool isInvulnerable();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setInvulnerable(bool value);
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool getInvulnerableTimer();
|
|
||||||
|
|
||||||
// Establece el valor de la variable
|
|
||||||
void setInvulnerableTimer(Uint16 value);
|
|
||||||
|
|
||||||
// Actualiza el valor de la variable
|
|
||||||
void updateInvulnerableTimer();
|
|
||||||
|
|
||||||
// Obtiene el valor de la variable
|
|
||||||
bool hasExtraHit();
|
|
||||||
|
|
||||||
// Concede un toque extra al jugador
|
|
||||||
void giveExtraHit();
|
|
||||||
|
|
||||||
// Quita el toque extra al jugador
|
|
||||||
void removeExtraHit();
|
|
||||||
|
|
||||||
// Obtiene el circulo de colisión
|
|
||||||
Circle &getCollider();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Posición X, Y del jugador
|
bool can_jump; // Si puede saltar
|
||||||
float mPosX;
|
bool enabled; // Si está habilitado
|
||||||
int mPosY;
|
bool jump_pressed_before; // Si se ha pulsado el botón de salto previamente
|
||||||
|
bool jump_pressed_now; // Si se acaba de pulsar el salto
|
||||||
// Altura y anchura del jugador
|
bool key[6]; // Indica las llaves que posee el jugador
|
||||||
Uint8 mWidth;
|
bool standing; // Si esta de pie (o quieto?)
|
||||||
Uint8 mHeight;
|
bool was_on_background; // Si viene de una zona atravesable
|
||||||
|
int coins; // Cantidad de monedas
|
||||||
// Velocidad X, Y del jugador
|
int cooldown; // Tiempo de inhabilitación
|
||||||
float mVelX;
|
int jumpforce; // Cantidad de pixels a desplazarse y velocidad que pilla al saltar
|
||||||
int mVelY;
|
int respawn_x; // Coordenadas para revivir
|
||||||
|
int respawn_y; // Coordenades para revivir
|
||||||
// Velocidad base del jugador
|
int speed_x; // Cantidad de pixeles a desplazarse
|
||||||
float mBaseSpeed;
|
int speed_y; // Cantidad de pixels a desplazarse
|
||||||
|
JA_Sound sound_coin; // Sonido al coger monedas
|
||||||
// Contador durante el cual no puede disparar
|
JA_Sound sound_death; // Sonido al morir
|
||||||
int mCooldown;
|
JA_Sound sound_jump; // Sonido al saltar
|
||||||
|
SDL_Rect rect; // Rectangulo con la posición del jugador
|
||||||
// Vidas actuales del jugador
|
AnimatedSprite *sprite; // Sprite con los graficos y animaciones
|
||||||
Uint8 mLives;
|
Uint8 active_animation; // Animación activa
|
||||||
|
Uint8 direction; // Sentido del desplazamiento
|
||||||
// Vidas iniciales del jugador
|
Uint8 lifes; // Cantidad de vidas
|
||||||
Uint8 mStartingLives;
|
Uint8 respawn_direction; // Dirección para revivir
|
||||||
|
|
||||||
// Puntos del jugador
|
|
||||||
Uint32 mScore;
|
|
||||||
|
|
||||||
// Multiplicador de puntos
|
|
||||||
float mScoreMultiplier;
|
|
||||||
|
|
||||||
// Estado del jugador
|
|
||||||
Uint8 mStatusWalking;
|
|
||||||
Uint8 mStatusFiring;
|
|
||||||
|
|
||||||
// Indica si el jugador está vivo
|
|
||||||
bool mAlive;
|
|
||||||
|
|
||||||
// Indica si el jugador es invulnerable
|
|
||||||
bool mInvulnerable;
|
|
||||||
|
|
||||||
// Temporizador para la invulnerabilidad
|
|
||||||
Uint16 mInvulnerableTimer;
|
|
||||||
|
|
||||||
// Indica si el jugador tiene un toque extra
|
|
||||||
bool mExtraHit;
|
|
||||||
|
|
||||||
// Sprite para dibujar al jugador en pantalla
|
|
||||||
AnimatedSprite *mSpriteLegs;
|
|
||||||
AnimatedSprite *mSpriteBody;
|
|
||||||
|
|
||||||
// Circulo de colisión del jugador
|
|
||||||
Circle mCollider;
|
|
||||||
|
|
||||||
// Actualiza el circulo de colisión a la posición del jugador
|
|
||||||
void shiftColliders();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// Constructor
|
// Constructor
|
||||||
Sprite::Sprite()
|
Sprite::Sprite()
|
||||||
{
|
{
|
||||||
init(0, 0, 0, 0, nullptr, nullptr);
|
init(nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
@@ -14,7 +14,7 @@ Sprite::~Sprite()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Inicializador
|
// Inicializador
|
||||||
void Sprite::init(int x, int y, Uint16 w, Uint16 h, LTexture *texture, SDL_Renderer *renderer)
|
/*void Sprite::init(LTexture *texture, SDL_Renderer *renderer, int x, int y, Uint16 w, Uint16 h)
|
||||||
{
|
{
|
||||||
// Establece el alto y el ancho del sprite
|
// Establece el alto y el ancho del sprite
|
||||||
setWidth(w);
|
setWidth(w);
|
||||||
@@ -32,10 +32,10 @@ void Sprite::init(int x, int y, Uint16 w, Uint16 h, LTexture *texture, SDL_Rende
|
|||||||
|
|
||||||
// Establece el rectangulo de donde coger la imagen
|
// Establece el rectangulo de donde coger la imagen
|
||||||
setSpriteClip(0, 0, w, h);
|
setSpriteClip(0, 0, w, h);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
// Inicializador
|
// Inicializador
|
||||||
void Sprite::init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer)
|
void Sprite::init(LTexture *texture, SDL_Renderer *renderer, SDL_Rect rect)
|
||||||
{
|
{
|
||||||
// Establece el alto y el ancho del sprite
|
// Establece el alto y el ancho del sprite
|
||||||
mWidth = rect.w;
|
mWidth = rect.w;
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ public:
|
|||||||
~Sprite();
|
~Sprite();
|
||||||
|
|
||||||
// Inicializador
|
// Inicializador
|
||||||
void init(int x, int y, Uint16 w, Uint16 h, LTexture *texture, SDL_Renderer *renderer);
|
//void init(LTexture *texture, SDL_Renderer *renderer, int x = 0, int y = 0, Uint16 w = 0, Uint16 h = 0);
|
||||||
void init(SDL_Rect rect, LTexture *texture, SDL_Renderer *renderer);
|
void init(LTexture *texture, SDL_Renderer *renderer, SDL_Rect rect = {0, 0, 0, 0});
|
||||||
|
|
||||||
// Muestra el sprite por pantalla
|
// Muestra el sprite por pantalla
|
||||||
void render();
|
void render();
|
||||||
@@ -70,10 +70,8 @@ protected:
|
|||||||
Uint16 mHeight; // Alto del sprite
|
Uint16 mHeight; // Alto del sprite
|
||||||
|
|
||||||
SDL_Renderer *mRenderer; // Puntero al renderizador
|
SDL_Renderer *mRenderer; // Puntero al renderizador
|
||||||
|
|
||||||
LTexture *mTexture; // Textura donde estan todos los dibujos del sprite
|
LTexture *mTexture; // Textura donde estan todos los dibujos del sprite
|
||||||
|
SDL_Rect mSpriteClip; // Rectangulo que apunta a la posición de la textura donde está el grafico que se dibujará en pantalla
|
||||||
SDL_Rect mSpriteClip; // Rectangulo de la textura que se dibujará en pantalla
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Text::Text()
|
Text::Text()
|
||||||
{
|
{
|
||||||
mSprite = new Sprite();
|
mSprite = new Sprite();
|
||||||
init(nullptr, nullptr, 0, 0);
|
init(nullptr, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Text::~Text()
|
Text::~Text()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "volcano.h"
|
#include "volcano.h"
|
||||||
|
|
||||||
void allocatePointers()
|
/*void allocatePointers()
|
||||||
{
|
{
|
||||||
// Textures
|
// Textures
|
||||||
hud.sprite = new LTexture();
|
hud.sprite = new LTexture();
|
||||||
@@ -20,13 +20,13 @@ void allocatePointers()
|
|||||||
prog.sprite = new LTexture();
|
prog.sprite = new LTexture();
|
||||||
|
|
||||||
// Sounds
|
// Sounds
|
||||||
game.sound_drop_enemy = new Mix_Chunk();
|
game.sound_drop_enemy = new JA_Sound();
|
||||||
game.sound_drop_splat = new Mix_Chunk();
|
game.sound_drop_splat = new JA_Sound();
|
||||||
menu.sound_logo = new Mix_Chunk();
|
menu.sound_logo = new JA_Sound();
|
||||||
menu.sound_start = new Mix_Chunk();
|
menu.sound_start = new JA_Sound();
|
||||||
player.sound_coin = new Mix_Chunk();
|
player.sound_coin = new JA_Sound();
|
||||||
player.sound_death = new Mix_Chunk();
|
player.sound_death = new JA_Sound();
|
||||||
player.sound_jump = new Mix_Chunk();
|
player.sound_jump = new JA_Sound();
|
||||||
|
|
||||||
// Music
|
// Music
|
||||||
//game.music = new Mix_Music();
|
//game.music = new Mix_Music();
|
||||||
@@ -74,18 +74,14 @@ bool loadTextureFromFile(LTexture *texture, std::string path, SDL_Renderer *rend
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseSound(Mix_Chunk *sound)
|
void CloseSound(JA_Sound *sound)
|
||||||
{
|
{
|
||||||
if (sound != nullptr)
|
|
||||||
Mix_FreeChunk(sound);
|
|
||||||
sound = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseMusic(Mix_Music *music)
|
void CloseMusic(Mix_Music *music)
|
||||||
{
|
{
|
||||||
if (music != nullptr)
|
|
||||||
Mix_FreeMusic(music);
|
|
||||||
music = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClosePicture(LTexture *picture)
|
void ClosePicture(LTexture *picture)
|
||||||
@@ -2321,3 +2317,4 @@ deletePointers();
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
@@ -7,7 +7,8 @@
|
|||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
#include "const.h"
|
#include "const.h"
|
||||||
#include "ltexture.h"
|
#include "ltexture.h"
|
||||||
|
#include "director.h"
|
||||||
|
/*
|
||||||
struct Tanimation
|
struct Tanimation
|
||||||
{
|
{
|
||||||
bool loops; // Salta a true cuando se reinicia la animación
|
bool loops; // Salta a true cuando se reinicia la animación
|
||||||
@@ -32,9 +33,9 @@ struct Tprogram
|
|||||||
struct Tgame
|
struct Tgame
|
||||||
{
|
{
|
||||||
bool enabled;
|
bool enabled;
|
||||||
Mix_Chunk *sound_drop_enemy;
|
JA_Sound sound_drop_enemy;
|
||||||
Mix_Chunk *sound_drop_splat;
|
JA_Sound sound_drop_splat;
|
||||||
Mix_Music *music;
|
JA_Music music;
|
||||||
Uint8 zone; // Zona en la que estamos
|
Uint8 zone; // Zona en la que estamos
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -45,9 +46,9 @@ struct Tmenu
|
|||||||
int timer;
|
int timer;
|
||||||
LTexture *sprite_animation;
|
LTexture *sprite_animation;
|
||||||
LTexture *sprite;
|
LTexture *sprite;
|
||||||
Mix_Chunk *sound_logo;
|
JA_Sound sound_logo;
|
||||||
Mix_Chunk *sound_start;
|
JA_Sound sound_start;
|
||||||
Mix_Music *music;
|
JA_Music music;
|
||||||
SDL_Rect dst_rect_animation;
|
SDL_Rect dst_rect_animation;
|
||||||
SDL_Rect dst_rect_fondo;
|
SDL_Rect dst_rect_fondo;
|
||||||
SDL_Rect dst_rect_logo_zoom;
|
SDL_Rect dst_rect_logo_zoom;
|
||||||
@@ -63,34 +64,7 @@ struct Tmenu
|
|||||||
Uint8 section;
|
Uint8 section;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Tplayer
|
|
||||||
{
|
|
||||||
bool can_jump; // Si puede saltar
|
|
||||||
bool enabled; // Si está habilitado
|
|
||||||
bool jump_pressed_before; // Si se ha pulsado el botón de salto previamente
|
|
||||||
bool jump_pressed_now; // Si se acaba de pulsar el salto
|
|
||||||
bool key[6]; // Indica las llaves que posee el jugador
|
|
||||||
bool standing; // Si esta de pie (o quieto?)
|
|
||||||
bool was_on_background; // Si viene de una zona atravesable
|
|
||||||
int coins; // Cantidad de monedas
|
|
||||||
int cooldown; // Tiempo de inhabilitación
|
|
||||||
int jumpforce; // Cantidad de pixels a desplazarse y velocidad que pilla al saltar
|
|
||||||
int respawn_x; // Coordenadas para revivir
|
|
||||||
int respawn_y; // Coordenades para revivir
|
|
||||||
int speed_x; // Cantidad de pixeles a desplazarse
|
|
||||||
int speed_y; // Cantidad de pixels a desplazarse
|
|
||||||
LTexture *sprite; // Textura con los graficos del jugador
|
|
||||||
Mix_Chunk *sound_coin; // Sonido al coger monedas
|
|
||||||
Mix_Chunk *sound_death; // Sonido al morir
|
|
||||||
Mix_Chunk *sound_jump; // Sonido al saltar
|
|
||||||
SDL_Rect dst_rect; // Rectangulo donde dibujar el sprite del jugador. Es la posición del jugador
|
|
||||||
SDL_Rect src_rect; // Rectangulo con el dibujo del jugador a pintar
|
|
||||||
Tanimation animation[8]; // Vector con las animaciones del jugador
|
|
||||||
Uint8 active_animation; // Animación activa
|
|
||||||
Uint8 direction; // Sentido del desplazamiento
|
|
||||||
Uint8 lifes; // Cantidad de vidas
|
|
||||||
Uint8 respawn_direction; // Dirección para revivir
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Tactor
|
struct Tactor
|
||||||
{
|
{
|
||||||
@@ -154,7 +128,6 @@ Tgame game;
|
|||||||
Thud hud;
|
Thud hud;
|
||||||
Tmap map;
|
Tmap map;
|
||||||
Tmenu menu;
|
Tmenu menu;
|
||||||
Tplayer player;
|
|
||||||
Tprogram prog;
|
Tprogram prog;
|
||||||
Uint32 delta_time;
|
Uint32 delta_time;
|
||||||
|
|
||||||
@@ -171,9 +144,9 @@ void ApplyGravity();
|
|||||||
void CheckPlayerCollisionWithActors();
|
void CheckPlayerCollisionWithActors();
|
||||||
void CheckPlayerCollisionWithActors();
|
void CheckPlayerCollisionWithActors();
|
||||||
void CheckPlayerCollisionWithMap();
|
void CheckPlayerCollisionWithMap();
|
||||||
void CloseMusic(Mix_Music *music);
|
void CloseMusic(JA_Music *music);
|
||||||
void ClosePicture(LTexture *picture);
|
void ClosePicture(LTexture *picture);
|
||||||
void CloseSound(Mix_Chunk *sound);
|
void CloseSound(JA_Sound *sound);
|
||||||
void CreateActor(Tactor &a, Uint8 kind, Uint8 id, Sint16 dstx, Sint16 dsty, Sint16 dstw, Sint16 dsth, Sint16 srcx, Sint16 srcy, Sint16 sx, Sint16 sy, Sint16 timer, Sint16 frame, Uint8 direction, Uint8 parent);
|
void CreateActor(Tactor &a, Uint8 kind, Uint8 id, Sint16 dstx, Sint16 dsty, Sint16 dstw, Sint16 dsth, Sint16 srcx, Sint16 srcy, Sint16 sx, Sint16 sy, Sint16 timer, Sint16 frame, Uint8 direction, Uint8 parent);
|
||||||
void DrawHud();
|
void DrawHud();
|
||||||
void DrawMap();
|
void DrawMap();
|
||||||
@@ -205,5 +178,5 @@ void SetPlayerAnimation(Uint8 anim);
|
|||||||
void SetPlayerDirection(int direction);
|
void SetPlayerDirection(int direction);
|
||||||
void SetProgSection(Uint8 section);
|
void SetProgSection(Uint8 section);
|
||||||
void SetZone(int room);
|
void SetZone(int room);
|
||||||
|
*/
|
||||||
#endif
|
#endif
|
||||||
Reference in New Issue
Block a user