diff options
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 |
