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-11 16:06:19 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2021-03-11 17:33:15 -0500
commiteb9fa5020317a44f17cc4906c4c1c6fe55700d3e (patch)
treee4cb67d97818e06d974d0fca987dd76f25affdf9 /src/character_system.cpp
parent4c29543e44deb7a327b21b0af6a85a92e83ff103 (diff)
downloadtanetane-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.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