diff options
Diffstat (limited to 'src/transform_system.cpp')
-rw-r--r-- | src/transform_system.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/transform_system.cpp b/src/transform_system.cpp index e5b0363..6e04d70 100644 --- a/src/transform_system.cpp +++ b/src/transform_system.cpp | |||
@@ -2,10 +2,11 @@ | |||
2 | #include "game.h" | 2 | #include "game.h" |
3 | #include "map.h" | 3 | #include "map.h" |
4 | 4 | ||
5 | void TransformSystem::initSprite(int spriteId, vec2i loc) { | 5 | void TransformSystem::initSprite(int spriteId, vec2i loc, SpriteLayer layer) { |
6 | Sprite& sprite = game_.getSprite(spriteId); | 6 | Sprite& sprite = game_.getSprite(spriteId); |
7 | sprite.loc = loc; | 7 | sprite.loc = loc; |
8 | spritesByY_.emplace(loc.y(), spriteId); | 8 | sprite.layer = layer; |
9 | spritesByY_[static_cast<size_t>(layer)].emplace(loc.y(), spriteId); | ||
9 | } | 10 | } |
10 | 11 | ||
11 | void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid) { | 12 | void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid) { |
@@ -26,11 +27,11 @@ void TransformSystem::moveSprite(int spriteId, vec2i newLoc) { | |||
26 | 27 | ||
27 | bool changedY = (sprite.loc.y() != newLoc.y()); | 28 | bool changedY = (sprite.loc.y() != newLoc.y()); |
28 | if (changedY) { | 29 | if (changedY) { |
29 | spritesByY_.erase(std::make_tuple(sprite.loc.y(), spriteId)); | 30 | spritesByY_[static_cast<size_t>(sprite.layer)].erase(std::make_tuple(sprite.loc.y(), spriteId)); |
30 | } | 31 | } |
31 | sprite.loc = newLoc; | 32 | sprite.loc = newLoc; |
32 | if (changedY) { | 33 | if (changedY) { |
33 | spritesByY_.emplace(newLoc.y(), spriteId); | 34 | spritesByY_[static_cast<size_t>(sprite.layer)].emplace(newLoc.y(), spriteId); |
34 | } | 35 | } |
35 | if (sprite.collidable) { | 36 | if (sprite.collidable) { |
36 | addCollidable(spriteId); | 37 | addCollidable(spriteId); |
@@ -216,8 +217,19 @@ void TransformSystem::removeCollidable(int spriteId) { | |||
216 | downCollidables_.erase({ colUL.y(), spriteId }); | 217 | downCollidables_.erase({ colUL.y(), spriteId }); |
217 | } | 218 | } |
218 | 219 | ||
220 | void TransformSystem::destroySprite(int spriteId) { | ||
221 | Sprite& sprite = game_.getSprite(spriteId); | ||
222 | spritesByY_[static_cast<size_t>(sprite.layer)].erase(std::make_tuple(sprite.loc.y(), spriteId)); | ||
223 | |||
224 | if (sprite.collidable) { | ||
225 | removeCollidable(spriteId); | ||
226 | } | ||
227 | } | ||
228 | |||
219 | void TransformSystem::clearSpriteCache() { | 229 | void TransformSystem::clearSpriteCache() { |
220 | spritesByY_.clear(); | 230 | for (auto& layer : spritesByY_) { |
231 | layer.clear(); | ||
232 | } | ||
221 | leftCollidables_.clear(); | 233 | leftCollidables_.clear(); |
222 | rightCollidables_.clear(); | 234 | rightCollidables_.clear(); |
223 | upCollidables_.clear(); | 235 | upCollidables_.clear(); |