From aac3b1bc1ba48b6e50f661b97326ef191cce3e6c Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Tue, 9 Mar 2021 13:49:03 -0500 Subject: switch_claus starts talking when he gets ya Kumatora, Duster, and Boney had to be given hitboxes, but they are not considered solid. #10 --- src/character_system.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/character_system.cpp') diff --git a/src/character_system.cpp b/src/character_system.cpp index 48d2a33..548bd9d 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp @@ -18,6 +18,7 @@ void CharacterSystem::addSpriteToParty(int leaderId, int followerId) { Sprite& leader = game_.getSprite(leaderId); Sprite& follower = game_.getSprite(followerId); follower.orientable = false; + follower.leaderId = leaderId; vec2i targetPos = leader.loc; @@ -83,6 +84,7 @@ void CharacterSystem::breakUpParty(int leaderId) { for (int followerId : followers) { Sprite& follower = game_.getSprite(followerId); follower.trail.clear(); + follower.leaderId = -1; } } @@ -153,6 +155,7 @@ void CharacterSystem::tick(double dt) { // Check collision. CollisionResult collision = game_.getSystem().checkCollision(spriteId, sprite.loc, pLoc, sprite.movementDir); bool blocked = collision.horiz.blocked || collision.vert.blocked; + int colliderSpriteId = (collision.horiz.colliderSprite == -1) ? collision.vert.colliderSprite : collision.horiz.colliderSprite; if (collision.horiz.blocked && !sprite.clipping) { pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; @@ -179,6 +182,20 @@ void CharacterSystem::tick(double dt) { game_.getMixer().playSound("../res/sfx/bump.wav"); } + if (colliderSpriteId != -1 && !sprite.bumpPlayerScript.empty()) { + Sprite& collider = game_.getSprite(colliderSpriteId); + bool bumpedPlayer = collider.player; + + if (!bumpedPlayer && collider.leaderId != -1) { + Sprite& colliderLeader = game_.getSprite(collider.leaderId); + bumpedPlayer = colliderLeader.player; + } + + if (bumpedPlayer) { + game_.getSystem().runScript(game_.getMap().getName(), sprite.bumpPlayerScript); + } + } + // Move everything if (pLoc != sprite.loc) { game_.getSystem().moveSprite(spriteId, pLoc); -- cgit 1.4.1