diff options
| author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-09 20:34:59 -0500 |
|---|---|---|
| committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-09 20:34:59 -0500 |
| commit | 315ca2fb388f790791c9ce372cf44e00d51e0e7f (patch) | |
| tree | 99fd0a66ce191959c73fe5058e538a4dcd07100e /src/transform_system.cpp | |
| parent | 0c2cd251fa0427b19f7c995bc7da7319d2ac80a5 (diff) | |
| download | tanetane-315ca2fb388f790791c9ce372cf44e00d51e0e7f.tar.gz tanetane-315ca2fb388f790791c9ce372cf44e00d51e0e7f.tar.bz2 tanetane-315ca2fb388f790791c9ce372cf44e00d51e0e7f.zip | |
Added trigger zones to the map
Walking into a trigger zone runs a script.
Diffstat (limited to 'src/transform_system.cpp')
| -rw-r--r-- | src/transform_system.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
| diff --git a/src/transform_system.cpp b/src/transform_system.cpp index 3d65acb..2ec133e 100644 --- a/src/transform_system.cpp +++ b/src/transform_system.cpp | |||
| @@ -8,11 +8,12 @@ void TransformSystem::initSprite(int spriteId, vec2i loc) { | |||
| 8 | spritesByY_.emplace(loc.y(), spriteId); | 8 | spritesByY_.emplace(loc.y(), spriteId); |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size) { | 11 | void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid) { |
| 12 | Sprite& sprite = game_.getSprite(spriteId); | 12 | Sprite& sprite = game_.getSprite(spriteId); |
| 13 | sprite.collidable = true; | 13 | sprite.collidable = true; |
| 14 | sprite.collisionOffset = offset; | 14 | sprite.collisionOffset = offset; |
| 15 | sprite.collisionSize = size; | 15 | sprite.collisionSize = size; |
| 16 | sprite.solid = solid; | ||
| 16 | 17 | ||
| 17 | addCollidable(spriteId); | 18 | addCollidable(spriteId); |
| 18 | } | 19 | } |
| @@ -74,9 +75,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 74 | it++) { | 75 | it++) { |
| 75 | if (newColDR.y() >= it->second.lower && | 76 | if (newColDR.y() >= it->second.lower && |
| 76 | newColUL.y() <= it->second.upper) { | 77 | newColUL.y() <= it->second.upper) { |
| 77 | result.horiz.blocked = true; | 78 | int colliderSpriteId = std::get<1>(it->first); |
| 79 | Sprite& collider = game_.getSprite(colliderSpriteId); | ||
| 80 | result.horiz.blocked = collider.solid; | ||
| 78 | result.horiz.dir = Direction::right; | 81 | result.horiz.dir = Direction::right; |
| 79 | result.horiz.colliderSprite = std::get<1>(it->first); | 82 | result.horiz.colliderSprite = colliderSpriteId; |
| 80 | 83 | ||
| 81 | break; | 84 | break; |
| 82 | } | 85 | } |
| @@ -104,9 +107,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 104 | it++) { | 107 | it++) { |
| 105 | if (newColDR.y() >= it->second.lower && | 108 | if (newColDR.y() >= it->second.lower && |
| 106 | newColUL.y() <= it->second.upper) { | 109 | newColUL.y() <= it->second.upper) { |
| 107 | result.horiz.blocked = true; | 110 | int colliderSpriteId = std::get<1>(it->first); |
| 111 | Sprite& collider = game_.getSprite(colliderSpriteId); | ||
| 112 | result.horiz.blocked = collider.solid; | ||
| 108 | result.horiz.dir = Direction::left; | 113 | result.horiz.dir = Direction::left; |
| 109 | result.horiz.colliderSprite = std::get<1>(it->first); | 114 | result.horiz.colliderSprite = colliderSpriteId; |
| 110 | 115 | ||
| 111 | break; | 116 | break; |
| 112 | } | 117 | } |
| @@ -134,9 +139,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 134 | it++) { | 139 | it++) { |
| 135 | if (newColDR.x() >= it->second.lower && | 140 | if (newColDR.x() >= it->second.lower && |
| 136 | newColUL.x() <= it->second.upper) { | 141 | newColUL.x() <= it->second.upper) { |
| 137 | result.vert.blocked = true; | 142 | int colliderSpriteId = std::get<1>(it->first); |
| 138 | result.vert.dir = Direction::down; | 143 | Sprite& collider = game_.getSprite(colliderSpriteId); |
| 139 | result.vert.colliderSprite = std::get<1>(it->first); | 144 | result.horiz.blocked = collider.solid; |
| 145 | result.horiz.dir = Direction::down; | ||
| 146 | result.horiz.colliderSprite = colliderSpriteId; | ||
| 140 | 147 | ||
| 141 | break; | 148 | break; |
| 142 | } | 149 | } |
| @@ -164,9 +171,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire | |||
| 164 | it++) { | 171 | it++) { |
| 165 | if (newColDR.x() >= it->second.lower && | 172 | if (newColDR.x() >= it->second.lower && |
| 166 | newColUL.x() <= it->second.upper) { | 173 | newColUL.x() <= it->second.upper) { |
| 167 | result.vert.blocked = true; | 174 | int colliderSpriteId = std::get<1>(it->first); |
| 168 | result.vert.dir = Direction::up; | 175 | Sprite& collider = game_.getSprite(colliderSpriteId); |
| 169 | result.vert.colliderSprite = std::get<1>(it->first); | 176 | result.horiz.blocked = collider.solid; |
| 177 | result.horiz.dir = Direction::up; | ||
| 178 | result.horiz.colliderSprite = colliderSpriteId; | ||
| 170 | 179 | ||
| 171 | break; | 180 | break; |
| 172 | } | 181 | } |
