void HandleCollision(Tile tile) { double overlapX, overlapY; if (localPlayer.midpoint().x > tile.midpoint().x) overlapX = tile.right() - localPlayer.left(); else overlapX = -(localPlayer.right() - tile.left()); if (localPlayer.midpoint().y > tile.midpoint().y) overlapY = tile.bottom() - localPlayer.top(); else overlapY = -(localPlayer.bottom() - tile.top()); if (overlapX != 0 && overlapY != 0) { if (abs(overlapY) < abs(overlapX)) { if (overlapY < 0) { if (localPlayer.velocityY > 0) { localPlayer.onGround = true; localPlayer.position.y += overlapY; localPlayer.velocityY = 0; if (std::find(groundTileList.begin(), groundTileList.end(), tile) == groundTileList.end()) groundTileList.push_back(tile); } } else { if (localPlayer.velocityY < 0) { if (CheckCollisionBottom(tile)) { localPlayer.position.y += overlapY; localPlayer.velocityY = 0; } } } } else { localPlayer.position.x += overlapX; localPlayer.velocityX = 0; } } }
bool CheckCollision(Tile tile) { if (localPlayer.left() <= tile.right() && localPlayer.right() >= tile.left() && localPlayer.top() <= tile.bottom() && localPlayer.bottom() >= tile.top()) { return true; } return false; }
//player.top <= tile.bottom && player.top >= tile.bottom - 5 && player.left <= tile.right - 5 && player.right >= tile.left + 5: bool CheckCollisionBottom(Tile tile) { if (localPlayer.top() <= tile.bottom() && localPlayer.top() >= tile.bottom() - 5 && localPlayer.left() <= tile.right() - 3 && localPlayer.right() >= tile.left() + 3) return true; return false; }