summary refs log tree commit diff stats
path: root/src/character_system.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-03-09 13:49:03 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-03-09 13:49:03 -0500
commitaac3b1bc1ba48b6e50f661b97326ef191cce3e6c (patch)
treedff16d2e26332a09576ff4965d0126070efa1b63 /src/character_system.cpp
parent032f60bc2686364f4df5bfb6c9faf86b84de31a6 (diff)
downloadtanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.tar.gz
tanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.tar.bz2
tanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.zip
switch_claus starts talking when he gets ya
Kumatora, Duster, and Boney had to be given hitboxes, but they are not considered solid.

#10
Diffstat (limited to 'src/character_system.cpp')
-rw-r--r--src/character_system.cpp17
1 files changed, 17 insertions, 0 deletions
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) {
18 Sprite& leader = game_.getSprite(leaderId); 18 Sprite& leader = game_.getSprite(leaderId);
19 Sprite& follower = game_.getSprite(followerId); 19 Sprite& follower = game_.getSprite(followerId);
20 follower.orientable = false; 20 follower.orientable = false;
21 follower.leaderId = leaderId;
21 22
22 vec2i targetPos = leader.loc; 23 vec2i targetPos = leader.loc;
23 24
@@ -83,6 +84,7 @@ void CharacterSystem::breakUpParty(int leaderId) {
83 for (int followerId : followers) { 84 for (int followerId : followers) {
84 Sprite& follower = game_.getSprite(followerId); 85 Sprite& follower = game_.getSprite(followerId);
85 follower.trail.clear(); 86 follower.trail.clear();
87 follower.leaderId = -1;
86 } 88 }
87} 89}
88 90
@@ -153,6 +155,7 @@ void CharacterSystem::tick(double dt) {
153 // Check collision. 155 // Check collision.
154 CollisionResult collision = game_.getSystem<TransformSystem>().checkCollision(spriteId, sprite.loc, pLoc, sprite.movementDir); 156 CollisionResult collision = game_.getSystem<TransformSystem>().checkCollision(spriteId, sprite.loc, pLoc, sprite.movementDir);
155 bool blocked = collision.horiz.blocked || collision.vert.blocked; 157 bool blocked = collision.horiz.blocked || collision.vert.blocked;
158 int colliderSpriteId = (collision.horiz.colliderSprite == -1) ? collision.vert.colliderSprite : collision.horiz.colliderSprite;
156 159
157 if (collision.horiz.blocked && !sprite.clipping) { 160 if (collision.horiz.blocked && !sprite.clipping) {
158 pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; 161 pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1;
@@ -179,6 +182,20 @@ void CharacterSystem::tick(double dt) {
179 game_.getMixer().playSound("../res/sfx/bump.wav"); 182 game_.getMixer().playSound("../res/sfx/bump.wav");
180 } 183 }
181 184
185 if (colliderSpriteId != -1 && !sprite.bumpPlayerScript.empty()) {
186 Sprite& collider = game_.getSprite(colliderSpriteId);
187 bool bumpedPlayer = collider.player;
188
189 if (!bumpedPlayer && collider.leaderId != -1) {
190 Sprite& colliderLeader = game_.getSprite(collider.leaderId);
191 bumpedPlayer = colliderLeader.player;
192 }
193
194 if (bumpedPlayer) {
195 game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), sprite.bumpPlayerScript);
196 }
197 }
198
182 // Move everything 199 // Move everything
183 if (pLoc != sprite.loc) { 200 if (pLoc != sprite.loc) {
184 game_.getSystem<TransformSystem>().moveSprite(spriteId, pLoc); 201 game_.getSystem<TransformSystem>().moveSprite(spriteId, pLoc);