diff options
Diffstat (limited to 'src/transform_system.cpp')
| -rw-r--r-- | src/transform_system.cpp | 31 |
1 files changed, 27 insertions, 4 deletions
| diff --git a/src/transform_system.cpp b/src/transform_system.cpp index ee392f1..4056f46 100644 --- a/src/transform_system.cpp +++ b/src/transform_system.cpp | |||
| @@ -72,7 +72,7 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 72 | enclosureZone = &map.getZone(sprite.enclosureZone); | 72 | enclosureZone = &map.getZone(sprite.enclosureZone); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | if (dirHasDir(sprite.dir, Direction::right)) { | 75 | if (dirHasDir(dir, Direction::right)) { |
| 76 | if (newTileDR.x() > oldTileDR.x() && | 76 | if (newTileDR.x() > oldTileDR.x() && |
| 77 | newColDR.x() < mapBounds.w()) { | 77 | newColDR.x() < mapBounds.w()) { |
| 78 | for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { | 78 | for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { |
| @@ -113,7 +113,7 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 113 | } | 113 | } |
| 114 | } | 114 | } |
| 115 | 115 | ||
| 116 | if (dirHasDir(sprite.dir, Direction::left)) { | 116 | if (dirHasDir(dir, Direction::left)) { |
| 117 | if (newTileUL.x() < oldTileUL.x() && | 117 | if (newTileUL.x() < oldTileUL.x() && |
| 118 | newColUL.x() >= 0) { | 118 | newColUL.x() >= 0) { |
| 119 | for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { | 119 | for (int y = newTileUL.y(); y <= newTileDR.y(); y++) { |
| @@ -154,7 +154,7 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 154 | } | 154 | } |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | if (dirHasDir(sprite.dir, Direction::down)) { | 157 | if (dirHasDir(dir, Direction::down)) { |
| 158 | if (newTileDR.y() > oldTileDR.y() && | 158 | if (newTileDR.y() > oldTileDR.y() && |
| 159 | newColDR.y() < mapBounds.h()) { | 159 | newColDR.y() < mapBounds.h()) { |
| 160 | for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { | 160 | for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { |
| @@ -195,7 +195,7 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 195 | } | 195 | } |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | if (dirHasDir(sprite.dir, Direction::up)) { | 198 | if (dirHasDir(dir, Direction::up)) { |
| 199 | if (newTileUL.y() < oldTileUL.y() && | 199 | if (newTileUL.y() < oldTileUL.y() && |
| 200 | newColUL.y() >= 0) { | 200 | newColUL.y() >= 0) { |
| 201 | for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { | 201 | for (int x = newTileUL.x(); x <= newTileDR.x(); x++) { |
| @@ -239,6 +239,29 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 239 | return result; | 239 | return result; |
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | CharacterMedium TransformSystem::getMediumAtPosition(int spriteId, vec2i newLoc) { | ||
| 243 | Sprite& sprite = game_.getSprite(spriteId); | ||
| 244 | |||
| 245 | const Map& map = game_.getMap(); | ||
| 246 | |||
| 247 | vec2i newColUL = newLoc + sprite.collisionOffset; | ||
| 248 | vec2i newColDR = newColUL + sprite.collisionSize; | ||
| 249 | vec2i newTileUL = newColUL / map.getTileSize(); | ||
| 250 | vec2i newTileDR = newColDR / map.getTileSize(); | ||
| 251 | |||
| 252 | CharacterMedium result = CharacterMedium::Normal; | ||
| 253 | for (int y=newTileUL.y(); y<=newTileDR.y(); y++) { | ||
| 254 | for (int x=newTileUL.x(); x<=newTileDR.x(); x++) { | ||
| 255 | CharacterMedium tileMedium = map.getMedium(x, y); | ||
| 256 | if (tileMedium > result) { | ||
| 257 | result = tileMedium; | ||
| 258 | } | ||
| 259 | } | ||
| 260 | } | ||
| 261 | |||
| 262 | return result; | ||
| 263 | } | ||
| 264 | |||
| 242 | void TransformSystem::addCollidable(int spriteId) { | 265 | void TransformSystem::addCollidable(int spriteId) { |
| 243 | Sprite& sprite = game_.getSprite(spriteId); | 266 | Sprite& sprite = game_.getSprite(spriteId); |
| 244 | 267 | ||
