summary refs log tree commit diff stats
path: root/src/character_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/character_system.cpp')
-rw-r--r--src/character_system.cpp47
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