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 |