forked from jaildesigner-jailgames/jaildoctors_dilemma
Progresos con las rampas
This commit is contained in:
@@ -4,19 +4,19 @@
|
|||||||
<layer id="1" name="Capa de patrones 1" width="32" height="16">
|
<layer id="1" name="Capa de patrones 1" width="32" height="16">
|
||||||
<data encoding="csv">
|
<data encoding="csv">
|
||||||
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,167,66,66,66,66,187,0,0,0,0,164,65,65,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,46,46,46,46,46,46,46,46,46,46,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,0,161,212,212,212,212,212,212,212,212,212,212,181,0,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,0,161,212,212,212,212,212,212,212,0,212,212,181,0,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,26,
|
26,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,269,0,0,0,0,181,0,0,0,0,0,0,0,0,26,
|
||||||
26,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,0,
|
26,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,269,0,0,0,0,0,181,0,0,0,0,0,0,0,0,
|
||||||
26,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,181,0,0,0,0,0,0,0,
|
26,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,181,0,0,0,0,0,0,0,
|
||||||
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,
|
||||||
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26
|
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -21,11 +21,10 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
|
|||||||
// Crea los objetos
|
// Crea los objetos
|
||||||
scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock);
|
scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock);
|
||||||
itemTracker = new ItemTracker();
|
itemTracker = new ItemTracker();
|
||||||
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &itemsPicked);
|
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &itemsPicked, debug);
|
||||||
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room, debug);
|
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room, debug);
|
||||||
eventHandler = new SDL_Event();
|
eventHandler = new SDL_Event();
|
||||||
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
|
||||||
debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer);
|
|
||||||
music = JA_LoadMusic(asset->get("game.ogg").c_str());
|
music = JA_LoadMusic(asset->get("game.ogg").c_str());
|
||||||
|
|
||||||
// Inicializa el resto de variables
|
// Inicializa el resto de variables
|
||||||
@@ -51,25 +50,11 @@ Game::~Game()
|
|||||||
|
|
||||||
// Libera la memoria de los objetos
|
// Libera la memoria de los objetos
|
||||||
delete scoreboard;
|
delete scoreboard;
|
||||||
scoreboard = nullptr;
|
|
||||||
|
|
||||||
delete itemTracker;
|
delete itemTracker;
|
||||||
itemTracker = nullptr;
|
|
||||||
|
|
||||||
delete room;
|
delete room;
|
||||||
room = nullptr;
|
|
||||||
|
|
||||||
delete player;
|
delete player;
|
||||||
player = nullptr;
|
|
||||||
|
|
||||||
delete eventHandler;
|
delete eventHandler;
|
||||||
eventHandler = nullptr;
|
|
||||||
|
|
||||||
delete text;
|
delete text;
|
||||||
text = nullptr;
|
|
||||||
|
|
||||||
delete debugText;
|
|
||||||
debugText = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba los eventos de la cola
|
// Comprueba los eventos de la cola
|
||||||
@@ -273,7 +258,7 @@ bool Game::changeRoom(std::string file)
|
|||||||
room = nullptr;
|
room = nullptr;
|
||||||
|
|
||||||
// Crea un objeto habitación nuevo a partir del fichero
|
// Crea un objeto habitación nuevo a partir del fichero
|
||||||
room = new Room(asset->get(file), renderer, screen, asset, itemTracker, &itemsPicked);
|
room = new Room(asset->get(file), renderer, screen, asset, itemTracker, &itemsPicked, debug);
|
||||||
|
|
||||||
// Pasa la nueva habitación al jugador
|
// Pasa la nueva habitación al jugador
|
||||||
player->setRoom(room);
|
player->setRoom(room);
|
||||||
@@ -331,7 +316,7 @@ void Game::killPlayer()
|
|||||||
delete player;
|
delete player;
|
||||||
|
|
||||||
// Crea la nueva habitación y el nuevo jugador
|
// Crea la nueva habitación y el nuevo jugador
|
||||||
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &itemsPicked);
|
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &itemsPicked, debug);
|
||||||
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room, debug);
|
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room, debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,17 +31,16 @@ private:
|
|||||||
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
||||||
Input *input; // Objeto pata gestionar la entrada
|
Input *input; // Objeto pata gestionar la entrada
|
||||||
Text *text; // Objeto para los textos del juego
|
Text *text; // Objeto para los textos del juego
|
||||||
Text *debugText; // Objeto para los textos de debug del juego
|
|
||||||
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
|
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
|
||||||
JA_Music music; // Musica que suena durante el juego
|
JA_Music music; // Musica que suena durante el juego
|
||||||
Debug *debug;
|
Debug *debug; // Objeto para gestionar la información de debug
|
||||||
bool musicEnabled; // Indica si ha de sonar la musica durante el juego
|
bool musicEnabled; // Indica si ha de sonar la musica durante el juego
|
||||||
int ticks; // Contador de ticks para ajustar la velocidad del programa
|
int ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||||
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||||
section_t section; // Seccion actual dentro del juego
|
section_t section; // Seccion actual dentro del juego
|
||||||
std::string currentRoom; // Fichero de la habitación actual
|
std::string currentRoom; // Fichero de la habitación actual
|
||||||
player_t spawnPoint; // Lugar de la habitación donde aparece el jugador
|
player_t spawnPoint; // Lugar de la habitación donde aparece el jugador
|
||||||
bool debugEnabled; // Indica si el modo debug está activo
|
bool debugEnabled; // Indica si el modo debug está activo
|
||||||
int playerLives; // Lleva la cuenta de ls vidas restantes del jugador
|
int playerLives; // Lleva la cuenta de ls vidas restantes del jugador
|
||||||
int itemsPicked; // Lleva la cuenta de los objetos recogidos
|
int itemsPicked; // Lleva la cuenta de los objetos recogidos
|
||||||
Uint32 clock; // Cuenta el tiempo que dura la partida
|
Uint32 clock; // Cuenta el tiempo que dura la partida
|
||||||
|
|||||||
@@ -242,18 +242,37 @@ void Player::move()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
tile_e slope = checkSlopes();
|
tile_e slope = checkSlopes();
|
||||||
debug->add("SLOPE = " + std::to_string(slope));
|
tile_e slope2 = checkSlopes2();
|
||||||
|
debug->add("SLOPE = " + std::to_string(slope));
|
||||||
|
debug->add("SLOPE2 = " + std::to_string(slope2));
|
||||||
if (slope != t_empty)
|
if (slope != t_empty)
|
||||||
{ // Cuesta hacia la derecha
|
{ // Cuesta hacia la derecha
|
||||||
if (slope == t_slope_r)
|
if (slope == t_slope_r)
|
||||||
{ // Recoloca
|
{ // Recoloca
|
||||||
y = -h + room->getSlopeHeight(feet[1], t_slope_r);
|
y = -h + room->getSlopeHeight(feet[1], t_slope_r);
|
||||||
|
debug->add("feet[1] = " + std::to_string(feet[1].y));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cuesta hacia la izquierda
|
// Cuesta hacia la izquierda
|
||||||
if (slope == t_slope_l)
|
if (slope == t_slope_l)
|
||||||
{ // Recoloca
|
{ // Recoloca
|
||||||
y = -h + room->getSlopeHeight(feet[0], t_slope_l);
|
y = -h + room->getSlopeHeight(feet[0], t_slope_l);
|
||||||
|
debug->add("feet[0] = " + std::to_string(feet[0].y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (slope2 != t_empty)
|
||||||
|
{ // Cuesta hacia la derecha
|
||||||
|
if (slope2 == t_slope_r)
|
||||||
|
{ // Recoloca
|
||||||
|
y = -h + room->getSlopeHeight(underFeet[1], t_slope_r);
|
||||||
|
debug->add("ufeet[1] = " + std::to_string(underFeet[1].y));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cuesta hacia la izquierda
|
||||||
|
if (slope2 == t_slope_l)
|
||||||
|
{ // Recoloca
|
||||||
|
y = -h + room->getSlopeHeight(underFeet[0], t_slope_l);
|
||||||
|
debug->add("ufeet[0] = " + std::to_string(underFeet[0].y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,7 +314,7 @@ void Player::move()
|
|||||||
vy = 0.0f;
|
vy = 0.0f;
|
||||||
|
|
||||||
// Si ademas ha habido un cambio de tile recoloca al jugador
|
// Si ademas ha habido un cambio de tile recoloca al jugador
|
||||||
if (tile_change)
|
if (tile_change && !checkSlopes2())
|
||||||
{
|
{
|
||||||
y = ((int)y - ((int)y % tileSize));
|
y = ((int)y - ((int)y % tileSize));
|
||||||
}
|
}
|
||||||
@@ -428,6 +447,44 @@ tile_e Player::checkSlopes()
|
|||||||
return t_empty;
|
return t_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Comprueba si el jugador está en una rampa
|
||||||
|
tile_e Player::checkSlopes2()
|
||||||
|
{
|
||||||
|
// Actualiza los puntos de colisión
|
||||||
|
updateFeet();
|
||||||
|
|
||||||
|
bool slope_l = false;
|
||||||
|
bool slope_r = false;
|
||||||
|
bool wall = false;
|
||||||
|
bool passable = false;
|
||||||
|
|
||||||
|
// Comprueba si ha colisionado con una rampa
|
||||||
|
for (auto f : underFeet)
|
||||||
|
{
|
||||||
|
slope_l |= (room->getTile(f) == t_slope_l);
|
||||||
|
slope_r |= (room->getTile(f) == t_slope_r);
|
||||||
|
wall |= (room->getTile(f) == t_wall);
|
||||||
|
passable |= (room->getTile(f) == t_passable);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wall || passable)
|
||||||
|
{
|
||||||
|
return t_empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slope_l)
|
||||||
|
{
|
||||||
|
return t_slope_l;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slope_r)
|
||||||
|
{
|
||||||
|
return t_slope_r;
|
||||||
|
}
|
||||||
|
|
||||||
|
return t_empty;
|
||||||
|
}
|
||||||
|
|
||||||
// Obtiene algunos parametros del jugador
|
// Obtiene algunos parametros del jugador
|
||||||
player_t Player::getSpawnParams()
|
player_t Player::getSpawnParams()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ public:
|
|||||||
// Comprueba si el jugador está en una rampa
|
// Comprueba si el jugador está en una rampa
|
||||||
tile_e checkSlopes();
|
tile_e checkSlopes();
|
||||||
|
|
||||||
|
// Comprueba si el jugador está en una rampa
|
||||||
|
tile_e checkSlopes2();
|
||||||
|
|
||||||
// Actualiza los puntos de colisión
|
// Actualiza los puntos de colisión
|
||||||
void updateColliderPoints();
|
void updateColliderPoints();
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Room::Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *itemTracker, int *items)
|
Room::Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *itemTracker, int *items, Debug *debug)
|
||||||
{
|
{
|
||||||
// Copia los punteros a objetos
|
// Copia los punteros a objetos
|
||||||
this->renderer = renderer;
|
this->renderer = renderer;
|
||||||
@@ -12,6 +12,7 @@ Room::Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset
|
|||||||
this->screen = screen;
|
this->screen = screen;
|
||||||
this->itemTracker = itemTracker;
|
this->itemTracker = itemTracker;
|
||||||
this->itemsPicked = items;
|
this->itemsPicked = items;
|
||||||
|
this->debug = debug;
|
||||||
|
|
||||||
// Crea los objetos
|
// Crea los objetos
|
||||||
load(file_path);
|
load(file_path);
|
||||||
@@ -602,21 +603,25 @@ int Room::getSlopeHeight(SDL_Point p, tile_e slope)
|
|||||||
// Calcula la base del tile
|
// Calcula la base del tile
|
||||||
int base = ((p.y / tileSize) * tileSize) + tileSize;
|
int base = ((p.y / tileSize) * tileSize) + tileSize;
|
||||||
printf("base %i\n", base);
|
printf("base %i\n", base);
|
||||||
|
debug->add("BASE = " + std::to_string(base));
|
||||||
|
|
||||||
// Calcula cuanto se ha entrado en el tile horizontalmente
|
// Calcula cuanto se ha entrado en el tile horizontalmente
|
||||||
const int pos = (p.x % tileSize); // esto da un valor entre 0 y 7
|
const int pos = (p.x % tileSize); // esto da un valor entre 0 y 7
|
||||||
printf("pos %i\n", base);
|
printf("pos %i\n", base);
|
||||||
|
debug->add("POS = " + std::to_string(pos));
|
||||||
|
|
||||||
// Se resta a la base la cantidad de pixeles pos en funcion de la rampa
|
// Se resta a la base la cantidad de pixeles pos en funcion de la rampa
|
||||||
if (slope == t_slope_r)
|
if (slope == t_slope_r)
|
||||||
{
|
{
|
||||||
base -= pos+1;
|
base -= pos + 1;
|
||||||
printf("base_R %i\n", base);
|
printf("base_R %i\n", base);
|
||||||
|
debug->add("BASE_R = " + std::to_string(base));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
base -= (tileSize - pos);
|
base -= (tileSize - pos);
|
||||||
printf("base_L %i\n", base);
|
printf("base_L %i\n", base);
|
||||||
|
debug->add("BASE_L = " + std::to_string(base));
|
||||||
}
|
}
|
||||||
|
|
||||||
return base;
|
return base;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "item_tracker.h"
|
#include "item_tracker.h"
|
||||||
#include "const.h"
|
#include "const.h"
|
||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
|
#include "debug.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -62,6 +63,7 @@ private:
|
|||||||
SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
|
SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
|
||||||
JA_Sound itemSound; // Sonido producido al coger un objeto
|
JA_Sound itemSound; // Sonido producido al coger un objeto
|
||||||
int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego
|
int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego
|
||||||
|
Debug *debug; // Objeto para gestionar la información de debug
|
||||||
|
|
||||||
int tileSize; // Ancho del tile en pixels
|
int tileSize; // Ancho del tile en pixels
|
||||||
int mapWidth; // Ancho del mapa en tiles
|
int mapWidth; // Ancho del mapa en tiles
|
||||||
@@ -85,7 +87,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *item_tracker, int *items);
|
Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *item_tracker, int *items, Debug *debug);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Room();
|
~Room();
|
||||||
|
|||||||
Reference in New Issue
Block a user