forked from jaildesigner-jailgames/jaildoctors_dilemma
Depurando los saltos con colisiones
This commit is contained in:
@@ -113,9 +113,9 @@ void Game::update()
|
||||
}
|
||||
}
|
||||
|
||||
checkInput();
|
||||
mRoom->update();
|
||||
mPlayer->update();
|
||||
checkPlayerAndWalls(); // Debe ir detras del player update, por si se ha metido en algun muro, sacarlo
|
||||
checkPlayerOnBorder();
|
||||
checkPlayerOnFloor();
|
||||
}
|
||||
@@ -125,9 +125,7 @@ void Game::update()
|
||||
void Game::draw()
|
||||
{
|
||||
// Prepara para dibujar el frame
|
||||
const color_t color = {0xAA, 0x55, 0x55};
|
||||
mScreen->start();
|
||||
mScreen->clean(color);
|
||||
mScreen->clean(mRoom->getBGColor());
|
||||
|
||||
mRoom->drawMap();
|
||||
@@ -135,29 +133,39 @@ void Game::draw()
|
||||
mPlayer->draw();
|
||||
|
||||
// Texto en el centro de la pantalla
|
||||
mText->writeCentered(GAMECANVAS_CENTER_X, 18 * 8, mRoom->getName());
|
||||
SDL_Rect rect = {0, 16 * 8, PLAY_AREA_RIGHT, 8};
|
||||
color_t color = stringToColor("light_black");
|
||||
SDL_SetRenderDrawColor(mRenderer, color.r, color.g, color.b, 0xFF);
|
||||
SDL_RenderFillRect(mRenderer, &rect);
|
||||
|
||||
mText->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, mRoom->getName());
|
||||
|
||||
// Debug info
|
||||
std::string text;
|
||||
text = "status: " + std::to_string(mPlayer->status);
|
||||
mText->write(0, 17 * 8, text);
|
||||
|
||||
// Actualiza la pantalla
|
||||
mScreen->blit();
|
||||
}
|
||||
|
||||
// Comprueba la entrada
|
||||
/*
|
||||
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))
|
||||
changeRoom(mRoom->getRoomDown());
|
||||
if (mInput->checkInput(INPUT_DOWN, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomDown());
|
||||
|
||||
if (mInput->checkInput(INPUT_LEFT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomLeft());
|
||||
if (mInput->checkInput(INPUT_LEFT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomLeft());
|
||||
|
||||
if (mInput->checkInput(INPUT_RIGHT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomRight());
|
||||
*/
|
||||
if (mInput->checkInput(INPUT_RIGHT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomRight());
|
||||
}
|
||||
*/
|
||||
|
||||
// Cambia de habitación
|
||||
bool Game::changeRoom(std::string file)
|
||||
@@ -207,4 +215,36 @@ void Game::checkPlayerOnFloor()
|
||||
{
|
||||
mPlayer->setStatus(STATUS_FALLING);
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba que el jugador no atraviese ninguna pared
|
||||
void Game::checkPlayerAndWalls()
|
||||
{
|
||||
// Hayque comprobar las cuatro esquinas del tile superior
|
||||
// y las cuatro del tile inferior
|
||||
SDL_Rect rect = mPlayer->getRect();
|
||||
SDL_Point p1 = {rect.x, rect.y};
|
||||
SDL_Point p2 = {rect.x + 7, rect.y};
|
||||
SDL_Point p3 = {rect.x + 7, rect.y + 7};
|
||||
SDL_Point p4 = {rect.x, rect.y + 7};
|
||||
|
||||
SDL_Point p5 = {rect.x, rect.y + 8};
|
||||
SDL_Point p6 = {rect.x + 7, rect.y + 8};
|
||||
SDL_Point p7 = {rect.x + 7, rect.y + 15};
|
||||
SDL_Point p8 = {rect.x, rect.y + 15};
|
||||
|
||||
bool test = mRoom->isFloor(p1);
|
||||
test |= mRoom->isFloor(p2);
|
||||
test |= mRoom->isFloor(p3);
|
||||
test |= mRoom->isFloor(p4);
|
||||
test |= mRoom->isFloor(p5);
|
||||
test |= mRoom->isFloor(p6);
|
||||
test |= mRoom->isFloor(p7);
|
||||
test |= mRoom->isFloor(p8);
|
||||
|
||||
if (test)
|
||||
{
|
||||
mPlayer->undoLastMove();
|
||||
// mPlayer->setStatus(STATUS_STANDING);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user