forked from jaildesigner-jailgames/jaildoctors_dilemma
Ya se pueden pillar los items. Falta llevar el control de los iterms conseguidos
This commit is contained in:
@@ -12,27 +12,27 @@ room1.tmx
|
|||||||
|
|
||||||
[enemy]
|
[enemy]
|
||||||
tileset=enemy01.png
|
tileset=enemy01.png
|
||||||
x=8
|
x=1
|
||||||
y=0
|
y=0
|
||||||
vx=0
|
vx=0
|
||||||
vy=0.3
|
vy=0.3
|
||||||
x1=8
|
x1=1
|
||||||
x2=8
|
|
||||||
y1=0
|
y1=0
|
||||||
y2=48
|
x2=1
|
||||||
|
y2=6
|
||||||
color=red
|
color=red
|
||||||
[enemy-end]
|
[enemy-end]
|
||||||
|
|
||||||
[enemy]
|
[enemy]
|
||||||
tileset=enemy01.png
|
tileset=enemy01.png
|
||||||
x=40
|
x=5
|
||||||
y=72
|
y=9
|
||||||
vx=0.3
|
vx=0.6
|
||||||
vy=0
|
vy=0
|
||||||
x1=40
|
x1=5
|
||||||
x2=184
|
y1=9
|
||||||
y1=72
|
x2=22
|
||||||
y2=72
|
y2=9
|
||||||
color=yellow
|
color=yellow
|
||||||
[enemy-end]
|
[enemy-end]
|
||||||
|
|
||||||
|
|||||||
@@ -12,13 +12,20 @@ room2.tmx
|
|||||||
|
|
||||||
[enemy]
|
[enemy]
|
||||||
tileset=enemy01.png
|
tileset=enemy01.png
|
||||||
x=120
|
x=14
|
||||||
y=8
|
y=0
|
||||||
vx=0
|
vx=0
|
||||||
vy=1
|
vy=1
|
||||||
x1=120
|
x1=14
|
||||||
x2=120
|
y1=0
|
||||||
y1=8
|
x2=14
|
||||||
y2=104
|
y2=13
|
||||||
color=purple
|
color=purple
|
||||||
[enemy-end]
|
[enemy-end]
|
||||||
|
|
||||||
|
[item]
|
||||||
|
tileset=items.png
|
||||||
|
tile=0
|
||||||
|
x=19
|
||||||
|
y=6
|
||||||
|
[item-end]
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
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,0,23,
|
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,0,23,
|
||||||
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,0,23,
|
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,0,23,
|
||||||
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,0,23,
|
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,0,23,
|
||||||
0,0,0,0,0,0,0,0,0,0,0,203,203,203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,
|
0,0,0,0,0,0,0,0,0,0,0,203,203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,
|
||||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,23,23,23,23,0,0,0,0,0,0,0,0,0,23,
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,23,23,23,23,0,0,0,0,0,0,0,0,0,23,
|
||||||
23,23,23,23,23,23,0,0,0,203,0,0,0,0,0,0,0,0,0,263,0,0,0,0,203,203,0,0,0,0,0,23,
|
23,23,23,23,23,23,0,0,0,203,0,0,0,0,0,0,0,0,0,263,0,0,0,0,203,203,0,0,0,0,0,23,
|
||||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,0,0,0,0,0,0,0,0,23,
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,263,0,0,0,0,0,0,0,0,0,0,0,23,
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ void Director::init(Uint8 name)
|
|||||||
mInput->bindKey(INPUT_ACCEPT, SDL_SCANCODE_RETURN);
|
mInput->bindKey(INPUT_ACCEPT, SDL_SCANCODE_RETURN);
|
||||||
mInput->bindKey(INPUT_CANCEL, SDL_SCANCODE_ESCAPE);
|
mInput->bindKey(INPUT_CANCEL, SDL_SCANCODE_ESCAPE);
|
||||||
mInput->bindKey(INPUT_BUTTON_1, SDL_SCANCODE_SPACE);
|
mInput->bindKey(INPUT_BUTTON_1, SDL_SCANCODE_SPACE);
|
||||||
|
mInput->bindKey(INPUT_BUTTON_2, SDL_SCANCODE_D);
|
||||||
mInput->bindKey(INPUT_BUTTON_PAUSE, SDL_SCANCODE_ESCAPE);
|
mInput->bindKey(INPUT_BUTTON_PAUSE, SDL_SCANCODE_ESCAPE);
|
||||||
mInput->bindKey(INPUT_BUTTON_ESCAPE, SDL_SCANCODE_ESCAPE);
|
mInput->bindKey(INPUT_BUTTON_ESCAPE, SDL_SCANCODE_ESCAPE);
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang,
|
|||||||
// Inicia variables
|
// Inicia variables
|
||||||
mCurrentRoom = "01.room";
|
mCurrentRoom = "01.room";
|
||||||
mSpawnPoint = {2 * 8, 12 * 8, 0, 0, 0, STATUS_STANDING, SDL_FLIP_NONE};
|
mSpawnPoint = {2 * 8, 12 * 8, 0, 0, 0, STATUS_STANDING, SDL_FLIP_NONE};
|
||||||
|
mDebug = false;
|
||||||
|
|
||||||
// Copia los punteros
|
// Copia los punteros
|
||||||
mRenderer = renderer;
|
mRenderer = renderer;
|
||||||
@@ -122,6 +123,7 @@ void Game::update()
|
|||||||
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
|
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro
|
||||||
checkPlayerOnBorder();
|
checkPlayerOnBorder();
|
||||||
checkPlayerOnFloor();
|
checkPlayerOnFloor();
|
||||||
|
checkPlayerAndItems();
|
||||||
if (checkPlayerAndEnemies())
|
if (checkPlayerAndEnemies())
|
||||||
{
|
{
|
||||||
// Destruye la habitacion y el jugador
|
// Destruye la habitacion y el jugador
|
||||||
@@ -132,6 +134,8 @@ void Game::update()
|
|||||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
||||||
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkInput();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,43 +160,50 @@ void Game::draw()
|
|||||||
mText->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, mRoom->getName());
|
mText->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, mRoom->getName());
|
||||||
|
|
||||||
// Debug info
|
// Debug info
|
||||||
std::string text;
|
if (mDebug)
|
||||||
text = "status: " + std::to_string(mPlayer->status);
|
{
|
||||||
mText->write(0, 17 * 8, text);
|
std::string text;
|
||||||
|
text = "status: " + std::to_string(mPlayer->status);
|
||||||
|
mText->write(0, 17 * 8, text);
|
||||||
|
|
||||||
text = "foot: " + std::to_string((int)mPlayer->getLeftFoot().y);
|
text = "foot: " + std::to_string((int)mPlayer->getLeftFoot().y);
|
||||||
mText->write(0, 18 * 8, text);
|
mText->write(0, 18 * 8, text);
|
||||||
|
|
||||||
const int a = (mPlayer->lastPosition.y + 16) / 8;
|
const int a = (mPlayer->lastPosition.y + 16) / 8;
|
||||||
const int b = mPlayer->getLeftFoot().y / 8;
|
const int b = mPlayer->getLeftFoot().y / 8;
|
||||||
text = "tile: " + std::to_string(a) + " - " + std::to_string(b);
|
text = "tile: " + std::to_string(a) + " - " + std::to_string(b);
|
||||||
mText->write(0, 19 * 8, text);
|
mText->write(0, 19 * 8, text);
|
||||||
|
|
||||||
const bool collision = checkPlayerAndEnemies();
|
const bool collision = checkPlayerAndEnemies();
|
||||||
text = "collision: " + std::to_string(collision);
|
text = "collision: " + std::to_string(collision);
|
||||||
mText->write(0, 20 * 8, text);
|
mText->write(0, 20 * 8, text);
|
||||||
|
}
|
||||||
|
|
||||||
// Actualiza la pantalla
|
// Actualiza la pantalla
|
||||||
mScreen->blit();
|
mScreen->blit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba la entrada
|
// Comprueba la entrada
|
||||||
/*
|
|
||||||
void Game::checkInput()
|
void Game::checkInput()
|
||||||
{
|
{
|
||||||
if (mInput->checkInput(INPUT_UP, REPEAT_FALSE))
|
/*
|
||||||
changeRoom(mRoom->getRoomUp());
|
if (mInput->checkInput(INPUT_UP, REPEAT_FALSE))
|
||||||
|
changeRoom(mRoom->getRoomUp());
|
||||||
|
|
||||||
if (mInput->checkInput(INPUT_DOWN, REPEAT_FALSE))
|
if (mInput->checkInput(INPUT_DOWN, REPEAT_FALSE))
|
||||||
changeRoom(mRoom->getRoomDown());
|
changeRoom(mRoom->getRoomDown());
|
||||||
|
|
||||||
if (mInput->checkInput(INPUT_LEFT, REPEAT_FALSE))
|
if (mInput->checkInput(INPUT_LEFT, REPEAT_FALSE))
|
||||||
changeRoom(mRoom->getRoomLeft());
|
changeRoom(mRoom->getRoomLeft());
|
||||||
|
|
||||||
if (mInput->checkInput(INPUT_RIGHT, REPEAT_FALSE))
|
if (mInput->checkInput(INPUT_RIGHT, REPEAT_FALSE))
|
||||||
changeRoom(mRoom->getRoomRight());
|
changeRoom(mRoom->getRoomRight());
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_FALSE))
|
||||||
|
mDebug = !mDebug;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
// Cambia de habitación
|
// Cambia de habitación
|
||||||
bool Game::changeRoom(std::string file)
|
bool Game::changeRoom(std::string file)
|
||||||
@@ -246,7 +257,7 @@ void Game::checkPlayerOnFloor()
|
|||||||
// En este caso habría que recolocar al jugador en el sitio
|
// En este caso habría que recolocar al jugador en el sitio
|
||||||
|
|
||||||
// *** PARECE RESUELTO
|
// *** PARECE RESUELTO
|
||||||
|
|
||||||
const int a = (mPlayer->lastPosition.y + 16) / 8;
|
const int a = (mPlayer->lastPosition.y + 16) / 8;
|
||||||
const int b = mPlayer->getLeftFoot().y / 8;
|
const int b = mPlayer->getLeftFoot().y / 8;
|
||||||
const bool tile_change = a != b;
|
const bool tile_change = a != b;
|
||||||
@@ -318,4 +329,10 @@ void Game::checkPlayerAndWalls()
|
|||||||
bool Game::checkPlayerAndEnemies()
|
bool Game::checkPlayerAndEnemies()
|
||||||
{
|
{
|
||||||
return mRoom->enemyCollision(mPlayer->getCollider());
|
return mRoom->enemyCollision(mPlayer->getCollider());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba las colisiones del jugador con los objetos
|
||||||
|
void Game::checkPlayerAndItems()
|
||||||
|
{
|
||||||
|
mRoom->itemCollision(mPlayer->getCollider());
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,8 @@ private:
|
|||||||
section_t mSection; // Seccion actual dentro del juego
|
section_t mSection; // Seccion actual dentro del juego
|
||||||
std::string mCurrentRoom; // Fichero de la habitación actual
|
std::string mCurrentRoom; // Fichero de la habitación actual
|
||||||
player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador
|
player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador
|
||||||
|
bool mDebug; // Indica si el modo debug está activo
|
||||||
|
|
||||||
// Inicializa las variables
|
// Inicializa las variables
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
@@ -53,7 +54,7 @@ private:
|
|||||||
void draw();
|
void draw();
|
||||||
|
|
||||||
// Comprueba la entrada y actua
|
// Comprueba la entrada y actua
|
||||||
// void checkInput();
|
void checkInput();
|
||||||
|
|
||||||
// Cambia de habitación
|
// Cambia de habitación
|
||||||
bool changeRoom(std::string file);
|
bool changeRoom(std::string file);
|
||||||
@@ -70,6 +71,9 @@ private:
|
|||||||
// Comprueba las colisiones del jugador con los enemigos
|
// Comprueba las colisiones del jugador con los enemigos
|
||||||
bool checkPlayerAndEnemies();
|
bool checkPlayerAndEnemies();
|
||||||
|
|
||||||
|
// Comprueba las colisiones del jugador con los objetos
|
||||||
|
void checkPlayerAndItems();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input);
|
Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ Item::Item(item_t item)
|
|||||||
|
|
||||||
// Inicia variables
|
// Inicia variables
|
||||||
sprite->setSpriteClip(item.tile * 8, 0, 8, 8);
|
sprite->setSpriteClip(item.tile * 8, 0, 8, 8);
|
||||||
|
collider = sprite->getRect();
|
||||||
|
|
||||||
// Inicializa los colores
|
// Inicializa los colores
|
||||||
color_t c = stringToColor("blue");
|
color_t c = stringToColor("blue");
|
||||||
@@ -50,13 +51,29 @@ Item::~Item()
|
|||||||
sprite = nullptr;
|
sprite = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pinta el enemigo en pantalla
|
// Pinta el objeto en pantalla
|
||||||
void Item::draw()
|
void Item::draw()
|
||||||
{
|
{
|
||||||
|
const int index = (counter / 2) % color.size();
|
||||||
|
sprite->getTexture()->setColor(color[index].r, color[index].g, color[index].b);
|
||||||
sprite->render();
|
sprite->render();
|
||||||
|
sprite->getTexture()->setColor(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
void Item::update()
|
void Item::update()
|
||||||
{
|
{
|
||||||
|
counter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Coge el objeto
|
||||||
|
void Item::pick()
|
||||||
|
{
|
||||||
|
sprite->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtiene el rectangulo de colision del objeto
|
||||||
|
SDL_Rect &Item::getCollider()
|
||||||
|
{
|
||||||
|
return collider;
|
||||||
|
}
|
||||||
@@ -34,6 +34,8 @@ private:
|
|||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
||||||
std::vector<color_t> color; // Vector con los colores del objeto
|
std::vector<color_t> color; // Vector con los colores del objeto
|
||||||
|
int counter; // Contador interno
|
||||||
|
SDL_Rect collider; // Rectangulo de colisión
|
||||||
|
|
||||||
// Comprueba si ha llegado al limite del recorrido para darse media vuelta
|
// Comprueba si ha llegado al limite del recorrido para darse media vuelta
|
||||||
void checkPath();
|
void checkPath();
|
||||||
@@ -50,6 +52,12 @@ public:
|
|||||||
|
|
||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
|
// Coge el item
|
||||||
|
void pick();
|
||||||
|
|
||||||
|
// Obtiene el rectangulo de colision del objeto
|
||||||
|
SDL_Rect &getCollider();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -259,11 +259,11 @@ bool Room::setEnemy(enemy_t *enemy, std::string _var, std::string _value)
|
|||||||
}
|
}
|
||||||
else if (_var == "x")
|
else if (_var == "x")
|
||||||
{
|
{
|
||||||
enemy->x = std::stof(_value);
|
enemy->x = std::stof(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "y")
|
else if (_var == "y")
|
||||||
{
|
{
|
||||||
enemy->y = std::stof(_value);
|
enemy->y = std::stof(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "vx")
|
else if (_var == "vx")
|
||||||
{
|
{
|
||||||
@@ -275,19 +275,19 @@ bool Room::setEnemy(enemy_t *enemy, std::string _var, std::string _value)
|
|||||||
}
|
}
|
||||||
else if (_var == "x1")
|
else if (_var == "x1")
|
||||||
{
|
{
|
||||||
enemy->x1 = std::stoi(_value);
|
enemy->x1 = std::stoi(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "x2")
|
else if (_var == "x2")
|
||||||
{
|
{
|
||||||
enemy->x2 = std::stoi(_value);
|
enemy->x2 = std::stoi(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "y1")
|
else if (_var == "y1")
|
||||||
{
|
{
|
||||||
enemy->y1 = std::stoi(_value);
|
enemy->y1 = std::stoi(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "y2")
|
else if (_var == "y2")
|
||||||
{
|
{
|
||||||
enemy->y2 = std::stoi(_value);
|
enemy->y2 = std::stoi(_value) * BLOCK;
|
||||||
}
|
}
|
||||||
else if (_var == "color")
|
else if (_var == "color")
|
||||||
{
|
{
|
||||||
@@ -407,6 +407,11 @@ void Room::update()
|
|||||||
{
|
{
|
||||||
enemy->update();
|
enemy->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto item : item_list)
|
||||||
|
{
|
||||||
|
item->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
||||||
@@ -470,5 +475,22 @@ bool Room::enemyCollision(SDL_Rect &rect)
|
|||||||
collision |= checkCollision(rect, enemy->getCollider());
|
collision |= checkCollision(rect, enemy->getCollider());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return collision;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Indica si hay colision con un objeto a partir de un rectangulo
|
||||||
|
bool Room::itemCollision(SDL_Rect &rect)
|
||||||
|
{
|
||||||
|
bool collision = false;
|
||||||
|
|
||||||
|
for (auto item : item_list)
|
||||||
|
{
|
||||||
|
collision |= checkCollision(rect, item->getCollider());
|
||||||
|
if (collision)
|
||||||
|
{
|
||||||
|
item->pick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return collision;
|
return collision;
|
||||||
}
|
}
|
||||||
@@ -96,6 +96,9 @@ public:
|
|||||||
|
|
||||||
// Indica si hay colision con un enemigo a partir de un rectangulo
|
// Indica si hay colision con un enemigo a partir de un rectangulo
|
||||||
bool enemyCollision(SDL_Rect &rect);
|
bool enemyCollision(SDL_Rect &rect);
|
||||||
|
|
||||||
|
// Indica si hay colision con un objeto a partir de un rectangulo
|
||||||
|
bool itemCollision(SDL_Rect &rect);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -160,4 +160,11 @@ void Sprite::setEnabled(bool value)
|
|||||||
bool Sprite::isEnabled()
|
bool Sprite::isEnabled()
|
||||||
{
|
{
|
||||||
return mEnabled;
|
return mEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Devuelve el rectangulo donde está el sprite
|
||||||
|
SDL_Rect Sprite::getRect()
|
||||||
|
{
|
||||||
|
SDL_Rect rect = {getPosX(), getPosY(), getWidth(), getHeight()};
|
||||||
|
return rect;
|
||||||
}
|
}
|
||||||
@@ -78,6 +78,9 @@ public:
|
|||||||
|
|
||||||
// Comprueba si el objeto está habilitado
|
// Comprueba si el objeto está habilitado
|
||||||
bool isEnabled();
|
bool isEnabled();
|
||||||
|
|
||||||
|
// Devuelve el rectangulo donde está el sprite
|
||||||
|
SDL_Rect getRect();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user