From 478bc11eec70e6127161ff360cd77d6893a81c42 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 6 Feb 2021 11:40:48 -0500 Subject: Moved some collision stuff into the TransformSystem --- src/character_system.cpp | 57 +++++++----------------------------------------- 1 file changed, 8 insertions(+), 49 deletions(-) (limited to 'src/character_system.cpp') diff --git a/src/character_system.cpp b/src/character_system.cpp index 4d2d338..3df4f9a 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp @@ -67,58 +67,15 @@ void CharacterSystem::tick(double dt) { pLoc += (unitVecInDirection(sprite.dir) * speed); // Check collision. - const Map& map = game_.getMap(); - bool blocked = false; - - const vec2i UL_COL_BOX = { 8, 8 }; - const vec2i DR_COL_BOX = { 4, 0 }; - vec2i oldColPosUL = (sprite.loc - UL_COL_BOX) / map.getTileSize(); - vec2i newColPosUL = (pLoc - UL_COL_BOX) / map.getTileSize(); - vec2i oldColPosDR = (sprite.loc + DR_COL_BOX) / map.getTileSize(); - vec2i newColPosDR = (pLoc + DR_COL_BOX) / map.getTileSize(); - - if (dirHasDir(sprite.dir, Direction::right) && - newColPosDR.x() > oldColPosDR.x()) { - for (int y = newColPosUL.y(); y <= newColPosDR.y(); y++) { - if (map.isBlocked(newColPosDR.x(), y)) { - blocked = true; - pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; - break; - } - } - } - - if (dirHasDir(sprite.dir, Direction::left) && - newColPosUL.x() < oldColPosUL.x()) { - for (int y = newColPosUL.y(); y <= newColPosDR.y(); y++) { - if (map.isBlocked(newColPosUL.x(), y)) { - blocked = true; - pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; - break; - } - } - } + CollisionResult collision = game_.getSystem().checkCollision(spriteId, pLoc, sprite.dir); + bool blocked = collision.horiz.blocked || collision.vert.blocked; - if (dirHasDir(sprite.dir, Direction::down) && - newColPosDR.y() > oldColPosDR.y()) { - for (int x = newColPosUL.x(); x <= newColPosDR.x(); x++) { - if (map.isBlocked(x, newColPosDR.y())) { - blocked = true; - pLoc.y() = sprite.loc.y();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; - break; - } - } + if (collision.horiz.blocked) { + pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; } - if (dirHasDir(sprite.dir, Direction::up) && - newColPosUL.y() < oldColPosUL.y()) { - for (int x = newColPosUL.x(); x <= newColPosDR.x(); x++) { - if (map.isBlocked(x, newColPosUL.y())) { - blocked = true; - pLoc.y() = sprite.loc.y();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; - break; - } - } + if (collision.vert.blocked) { + pLoc.y() = sprite.loc.y();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; } if (blocked && sprite.characterState == CharacterState::Running) { @@ -131,6 +88,8 @@ void CharacterSystem::tick(double dt) { game_.getSystem().moveSprite(spriteId, pLoc); if (sprite.characterState == CharacterState::Running) { + const Map& map = game_.getMap(); + vec2i newMapTileLoc = pLoc / map.getTileSize(); StepType newTileStep = map.getStepType(newMapTileLoc.x(), newMapTileLoc.y()); if (sprite.stepType != newTileStep) { -- cgit 1.4.1