bool Player::touchesStairs(SDL_Rect box, Tile* tiles[], bool goDown) { if (!goDown) { for (int i = 0; i < totalTiles; ++i) { if (tiles[i]->Type() == 'R') { if (checkCollision(box, tiles[i]->Box())) { rightStair = true; leftStair = false; return true; } } if (tiles[i]->Type() == 'L') { if (checkCollision(box, tiles[i]->Box())) { rightStair = false; leftStair = true; return true; } } } } else if (goDown) { for (int i = 0; i < totalTiles; ++i) { if (tiles[i]->Type() == 'R') { Tile* tempTile = new Tile(tiles[i]->Box().x + 32, tiles[i]->Box().y - 16, 'R'); if (tiles[i]->Box().y >= (box.y + box.h)) { if (checkCollision(box, tempTile->Box())) { rightStair = true; leftStair = false; return true; } } } if (tiles[i]->Type() == 'L') { Tile* tempTile = new Tile(tiles[i]->Box().x - 32, tiles[i]->Box().y - 16, 'R'); if (tiles[i]->Box().y >= (box.y + box.h)) { if (checkCollision(box, tempTile->Box())) { leftStair = true; rightStair = false; return true; } } } } } return false; }
void Player::moveToStairsDown(SDL_Rect box, Tile* tiles[]) { int playerRight = box.x + box.w; int playerLeft = box.x; for (int i = 0; i < totalTiles; ++i) { if (tiles[i]->Type() == 'R') { Tile* tempTile = new Tile(tiles[i]->Box().x + 32, tiles[i]->Box().y - 16, 'R'); if (playerRight > tempTile->Box().x && playerRight < (tempTile->Box().x + tempTile->Box().w)) { //Not exactly sure why this works, I assume it needs to override a movement the other way playerBox.x += 2; } if (playerLeft > tempTile->Box().x && playerLeft < (tempTile->Box().x + tempTile->Box().w)) { playerBox.x -= 1; } if (playerLeft == tempTile->Box().x) { onStairs = true; rightStair = true; leftStair = false; secondStep = 8; stepUp = false; takeStep(false, false); crouching = false; stepFrame = 1; cameraStart = playerBox.x; cameraStep = 0; } } if (tiles[i]->Type() == 'L') { Tile* tempTile = new Tile(tiles[i]->Box().x - 32, tiles[i]->Box().y - 16, 'L'); if (playerRight > tempTile->Box().x && playerRight < (tempTile->Box().x + tempTile->Box().w)) { playerBox.x += 1; } if (playerLeft > tempTile->Box().x && playerLeft < (tempTile->Box().x + tempTile->Box().w)) { playerBox.x -= 2; } if (playerLeft == tempTile->Box().x) { onStairs = true; leftStair = true; rightStair = false; secondStep = 8; stepUp = false; takeStep(false, true); crouching = false; stepFrame = 1; cameraStart = playerBox.x; cameraStep = 0; } } } }