Cleaned up the collision code

This commit is contained in:
Kayne Ruse
2014-07-10 07:10:59 +10:00
parent 876510bc52
commit a13c7cc053
+12 -11
View File
@@ -117,21 +117,22 @@ void InWorld::Update(double delta) {
//update the entities //update the entities
character.Update(delta); character.Update(delta);
//check for collisions //check for collisions with the map
for (int i = -6; i < 6; ++i) { BoundingBox wallBounds = {0, 0, tileSheet.GetTileW(), tileSheet.GetTileH()};
for (int j = -6; j < 6; ++j) { const int xCount = character.GetBoundingBox().w / wallBounds.w + 1;
Vector2 wallPoint = { const int yCount = character.GetBoundingBox().h / wallBounds.h + 1;
snapToBase(32.0, character.GetOrigin().x),
snapToBase(32.0, character.GetOrigin().y)
};
wallPoint.x += i * 32;
wallPoint.y += j * 32;
if (!pager.GetSolid(wallPoint.x / 32.0, wallPoint.y / 32.0)) { for (int i = -1; i <= xCount; ++i) {
for (int j = -1; j <= yCount; ++j) {
//set the wall's position
wallBounds.x = wallBounds.w * i + snapToBase((double)wallBounds.w, character.GetOrigin().x);
wallBounds.y = wallBounds.h * j + snapToBase((double)wallBounds.h, character.GetOrigin().y);
if (!pager.GetSolid(wallBounds.x / wallBounds.w, wallBounds.y / wallBounds.h)) {
continue; continue;
} }
if ( (character.GetOrigin() + character.GetBoundingBox()).CheckOverlap(wallPoint + BoundingBox{0,0,32,32})) { if ((character.GetOrigin() + character.GetBoundingBox()).CheckOverlap(wallBounds)) {
character.SetOrigin(character.GetOrigin() - (character.GetMotion() * delta)); character.SetOrigin(character.GetOrigin() - (character.GetMotion() * delta));
character.SetMotion({0,0}); character.SetMotion({0,0});
character.CorrectSprite(); character.CorrectSprite();