summary refs log tree commit diff stats
path: root/src/transform_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/transform_system.cpp')
-rw-r--r--src/transform_system.cpp22
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
5void TransformSystem::initSprite(int spriteId, vec2i loc) { 5void 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
11void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid) { 12void 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
220void 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
219void TransformSystem::clearSpriteCache() { 229void 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();