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">
|
||||
<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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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
|
||||
</data>
|
||||
|
||||
@@ -21,11 +21,10 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
|
||||
// Crea los objetos
|
||||
scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock);
|
||||
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);
|
||||
eventHandler = new SDL_Event();
|
||||
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());
|
||||
|
||||
// Inicializa el resto de variables
|
||||
@@ -51,25 +50,11 @@ Game::~Game()
|
||||
|
||||
// Libera la memoria de los objetos
|
||||
delete scoreboard;
|
||||
scoreboard = nullptr;
|
||||
|
||||
delete itemTracker;
|
||||
itemTracker = nullptr;
|
||||
|
||||
delete room;
|
||||
room = nullptr;
|
||||
|
||||
delete player;
|
||||
player = nullptr;
|
||||
|
||||
delete eventHandler;
|
||||
eventHandler = nullptr;
|
||||
|
||||
delete text;
|
||||
text = nullptr;
|
||||
|
||||
delete debugText;
|
||||
debugText = nullptr;
|
||||
}
|
||||
|
||||
// Comprueba los eventos de la cola
|
||||
@@ -273,7 +258,7 @@ bool Game::changeRoom(std::string file)
|
||||
room = nullptr;
|
||||
|
||||
// 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
|
||||
player->setRoom(room);
|
||||
@@ -331,7 +316,7 @@ void Game::killPlayer()
|
||||
delete player;
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,17 +31,16 @@ private:
|
||||
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
||||
Input *input; // Objeto pata gestionar la entrada
|
||||
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
|
||||
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
|
||||
int ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
section_t section; // Seccion actual dentro del juego
|
||||
std::string currentRoom; // Fichero de la habitación actual
|
||||
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 itemsPicked; // Lleva la cuenta de los objetos recogidos
|
||||
Uint32 clock; // Cuenta el tiempo que dura la partida
|
||||
|
||||
@@ -242,18 +242,37 @@ void Player::move()
|
||||
else
|
||||
{
|
||||
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)
|
||||
{ // Cuesta hacia la derecha
|
||||
if (slope == t_slope_r)
|
||||
{ // Recoloca
|
||||
y = -h + room->getSlopeHeight(feet[1], t_slope_r);
|
||||
debug->add("feet[1] = " + std::to_string(feet[1].y));
|
||||
}
|
||||
|
||||
// Cuesta hacia la izquierda
|
||||
if (slope == t_slope_l)
|
||||
{ // Recoloca
|
||||
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;
|
||||
|
||||
// Si ademas ha habido un cambio de tile recoloca al jugador
|
||||
if (tile_change)
|
||||
if (tile_change && !checkSlopes2())
|
||||
{
|
||||
y = ((int)y - ((int)y % tileSize));
|
||||
}
|
||||
@@ -428,6 +447,44 @@ tile_e Player::checkSlopes()
|
||||
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
|
||||
player_t Player::getSpawnParams()
|
||||
{
|
||||
|
||||
@@ -95,6 +95,9 @@ public:
|
||||
// Comprueba si el jugador está en una rampa
|
||||
tile_e checkSlopes();
|
||||
|
||||
// Comprueba si el jugador está en una rampa
|
||||
tile_e checkSlopes2();
|
||||
|
||||
// Actualiza los puntos de colisión
|
||||
void updateColliderPoints();
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <sstream>
|
||||
|
||||
// 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
|
||||
this->renderer = renderer;
|
||||
@@ -12,6 +12,7 @@ Room::Room(std::string file_path, SDL_Renderer *renderer, Screen *screen, Asset
|
||||
this->screen = screen;
|
||||
this->itemTracker = itemTracker;
|
||||
this->itemsPicked = items;
|
||||
this->debug = debug;
|
||||
|
||||
// Crea los objetos
|
||||
load(file_path);
|
||||
@@ -602,21 +603,25 @@ int Room::getSlopeHeight(SDL_Point p, tile_e slope)
|
||||
// Calcula la base del tile
|
||||
int base = ((p.y / tileSize) * tileSize) + tileSize;
|
||||
printf("base %i\n", base);
|
||||
debug->add("BASE = " + std::to_string(base));
|
||||
|
||||
// Calcula cuanto se ha entrado en el tile horizontalmente
|
||||
const int pos = (p.x % tileSize); // esto da un valor entre 0 y 7
|
||||
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
|
||||
if (slope == t_slope_r)
|
||||
{
|
||||
base -= pos+1;
|
||||
base -= pos + 1;
|
||||
printf("base_R %i\n", base);
|
||||
debug->add("BASE_R = " + std::to_string(base));
|
||||
}
|
||||
else
|
||||
{
|
||||
base -= (tileSize - pos);
|
||||
printf("base_L %i\n", base);
|
||||
debug->add("BASE_L = " + std::to_string(base));
|
||||
}
|
||||
|
||||
return base;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "item_tracker.h"
|
||||
#include "const.h"
|
||||
#include "jail_audio.h"
|
||||
#include "debug.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -62,6 +63,7 @@ private:
|
||||
SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
|
||||
JA_Sound itemSound; // Sonido producido al coger un objeto
|
||||
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 mapWidth; // Ancho del mapa en tiles
|
||||
@@ -85,7 +87,7 @@ private:
|
||||
|
||||
public:
|
||||
// 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
|
||||
~Room();
|
||||
|
||||
Reference in New Issue
Block a user