diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-03-11 16:06:19 -0500 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2021-03-11 17:33:15 -0500 |
commit | eb9fa5020317a44f17cc4906c4c1c6fe55700d3e (patch) | |
tree | e4cb67d97818e06d974d0fca987dd76f25affdf9 /src/character_system.cpp | |
parent | 4c29543e44deb7a327b21b0af6a85a92e83ff103 (diff) | |
download | tanetane-eb9fa5020317a44f17cc4906c4c1c6fe55700d3e.tar.gz tanetane-eb9fa5020317a44f17cc4906c4c1c6fe55700d3e.tar.bz2 tanetane-eb9fa5020317a44f17cc4906c4c1c6fe55700d3e.zip |
Simplified collision detection output
It is no longer split into horizontal and vertical results. Also, the collision detection routine now does the work of calculating an adjusted position, instead of the caller (CharacterSystem) having to do it. This will be useful for #3.
Diffstat (limited to 'src/character_system.cpp')
-rw-r--r-- | src/character_system.cpp | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/src/character_system.cpp b/src/character_system.cpp index 548bd9d..10cb06f 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp | |||
@@ -154,46 +154,35 @@ void CharacterSystem::tick(double dt) { | |||
154 | 154 | ||
155 | // Check collision. | 155 | // Check collision. |
156 | 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); |
157 | bool blocked = collision.horiz.blocked || collision.vert.blocked; | ||
158 | int colliderSpriteId = (collision.horiz.colliderSprite == -1) ? collision.vert.colliderSprite : collision.horiz.colliderSprite; | ||
159 | 157 | ||
160 | if (collision.horiz.blocked && !sprite.clipping) { | 158 | if (!(collision.blocked && sprite.clipping)) { |
161 | pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; | 159 | pLoc = collision.adjustedLoc; |
162 | } else if (collision.horiz.colliderSprite != -1) { | ||
163 | Sprite& collider = game_.getSprite(collision.horiz.colliderSprite); | ||
164 | |||
165 | if (collider.walkthroughScript != "") { | ||
166 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), collider.walkthroughScript); | ||
167 | } | ||
168 | } | 160 | } |
169 | 161 | ||
170 | if (collision.vert.blocked && !sprite.clipping) { | 162 | for (int colliderSpriteId : collision.colliders) { |
171 | pLoc.y() = sprite.loc.y();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; | 163 | Sprite& collider = game_.getSprite(colliderSpriteId); |
172 | } else if (collision.vert.colliderSprite != -1) { | ||
173 | Sprite& collider = game_.getSprite(collision.vert.colliderSprite); | ||
174 | 164 | ||
175 | if (collider.walkthroughScript != "") { | 165 | if (!collider.walkthroughScript.empty()) { |
176 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), collider.walkthroughScript); | 166 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), collider.walkthroughScript); |
177 | } | 167 | } |
178 | } | ||
179 | 168 | ||
180 | if (blocked && sprite.characterState == CharacterState::Running && !sprite.clipping) { | 169 | if (!sprite.bumpPlayerScript.empty()) { |
181 | stopRunning(spriteId); | 170 | bool bumpedPlayer = collider.player; |
182 | game_.getMixer().playSound("../res/sfx/bump.wav"); | ||
183 | } | ||
184 | 171 | ||
185 | if (colliderSpriteId != -1 && !sprite.bumpPlayerScript.empty()) { | 172 | if (!bumpedPlayer && collider.leaderId != -1) { |
186 | Sprite& collider = game_.getSprite(colliderSpriteId); | 173 | Sprite& colliderLeader = game_.getSprite(collider.leaderId); |
187 | bool bumpedPlayer = collider.player; | 174 | bumpedPlayer = colliderLeader.player; |
175 | } | ||
188 | 176 | ||
189 | if (!bumpedPlayer && collider.leaderId != -1) { | 177 | if (bumpedPlayer) { |
190 | Sprite& colliderLeader = game_.getSprite(collider.leaderId); | 178 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), sprite.bumpPlayerScript); |
191 | bumpedPlayer = colliderLeader.player; | 179 | } |
192 | } | 180 | } |
181 | } | ||
193 | 182 | ||
194 | if (bumpedPlayer) { | 183 | if (collision.blocked && sprite.characterState == CharacterState::Running && !sprite.clipping) { |
195 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), sprite.bumpPlayerScript); | 184 | stopRunning(spriteId); |
196 | } | 185 | game_.getMixer().playSound("../res/sfx/bump.wav"); |
197 | } | 186 | } |
198 | 187 | ||
199 | // Move everything | 188 | // Move everything |