From 315ca2fb388f790791c9ce372cf44e00d51e0e7f Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 9 Feb 2021 20:34:59 -0500 Subject: Added trigger zones to the map Walking into a trigger zone runs a script. --- src/transform_system.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'src/transform_system.cpp') 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) { spritesByY_.emplace(loc.y(), spriteId); } -void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size) { +void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid) { Sprite& sprite = game_.getSprite(spriteId); sprite.collidable = true; sprite.collisionOffset = offset; sprite.collisionSize = size; + sprite.solid = solid; addCollidable(spriteId); } @@ -74,9 +75,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire it++) { if (newColDR.y() >= it->second.lower && newColUL.y() <= it->second.upper) { - result.horiz.blocked = true; + int colliderSpriteId = std::get<1>(it->first); + Sprite& collider = game_.getSprite(colliderSpriteId); + result.horiz.blocked = collider.solid; result.horiz.dir = Direction::right; - result.horiz.colliderSprite = std::get<1>(it->first); + result.horiz.colliderSprite = colliderSpriteId; break; } @@ -104,9 +107,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire it++) { if (newColDR.y() >= it->second.lower && newColUL.y() <= it->second.upper) { - result.horiz.blocked = true; + int colliderSpriteId = std::get<1>(it->first); + Sprite& collider = game_.getSprite(colliderSpriteId); + result.horiz.blocked = collider.solid; result.horiz.dir = Direction::left; - result.horiz.colliderSprite = std::get<1>(it->first); + result.horiz.colliderSprite = colliderSpriteId; break; } @@ -134,9 +139,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire it++) { if (newColDR.x() >= it->second.lower && newColUL.x() <= it->second.upper) { - result.vert.blocked = true; - result.vert.dir = Direction::down; - result.vert.colliderSprite = std::get<1>(it->first); + int colliderSpriteId = std::get<1>(it->first); + Sprite& collider = game_.getSprite(colliderSpriteId); + result.horiz.blocked = collider.solid; + result.horiz.dir = Direction::down; + result.horiz.colliderSprite = colliderSpriteId; break; } @@ -164,9 +171,11 @@ CollisionResult TransformSystem::checkCollision(int spriteId, vec2i newLoc, Dire it++) { if (newColDR.x() >= it->second.lower && newColUL.x() <= it->second.upper) { - result.vert.blocked = true; - result.vert.dir = Direction::up; - result.vert.colliderSprite = std::get<1>(it->first); + int colliderSpriteId = std::get<1>(it->first); + Sprite& collider = game_.getSprite(colliderSpriteId); + result.horiz.blocked = collider.solid; + result.horiz.dir = Direction::up; + result.horiz.colliderSprite = colliderSpriteId; break; } -- cgit 1.4.1