diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-11 11:15:28 -0400 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2015-03-11 11:15:28 -0400 |
commit | ea0a959c2405511255080cae9f9558f2711a887f (patch) | |
tree | 4ca85bad4d709396c5197374c0cf6a33bbff895b /src/components.cpp | |
parent | 0e0389752a0912614737e5c059b5cd4719ef9cf2 (diff) | |
download | therapy-ea0a959c2405511255080cae9f9558f2711a887f.tar.gz therapy-ea0a959c2405511255080cae9f9558f2711a887f.tar.bz2 therapy-ea0a959c2405511255080cae9f9558f2711a887f.zip |
Fixed bug where one could fall through the floor after changing maps
Diffstat (limited to 'src/components.cpp')
-rw-r--r-- | src/components.cpp | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/components.cpp b/src/components.cpp index 4d62a87..11350ea 100644 --- a/src/components.cpp +++ b/src/components.cpp | |||
@@ -395,7 +395,12 @@ void MapCollisionComponent::detectCollision(Game& game, Entity&, Entity& collide | |||
395 | if ((fixed_oy+collider.size.second > collision.lower) && (fixed_oy < collision.upper)) | 395 | if ((fixed_oy+collider.size.second > collision.lower) && (fixed_oy < collision.upper)) |
396 | { | 396 | { |
397 | // We have a collision! | 397 | // We have a collision! |
398 | processCollision(game, collider, collision, Direction::left); | 398 | if (processCollision(game, collider, collision, Direction::left)) |
399 | { | ||
400 | collider.position.second = old_position.second; | ||
401 | |||
402 | return; | ||
403 | } | ||
399 | 404 | ||
400 | break; | 405 | break; |
401 | } | 406 | } |
@@ -410,7 +415,12 @@ void MapCollisionComponent::detectCollision(Game& game, Entity&, Entity& collide | |||
410 | if ((fixed_oy+collider.size.second > collision.lower) && (fixed_oy < collision.upper)) | 415 | if ((fixed_oy+collider.size.second > collision.lower) && (fixed_oy < collision.upper)) |
411 | { | 416 | { |
412 | // We have a collision! | 417 | // We have a collision! |
413 | processCollision(game, collider, collision, Direction::right); | 418 | if (processCollision(game, collider, collision, Direction::right)) |
419 | { | ||
420 | collider.position.second = old_position.second; | ||
421 | |||
422 | return; | ||
423 | } | ||
414 | 424 | ||
415 | break; | 425 | break; |
416 | } | 426 | } |
@@ -430,7 +440,10 @@ void MapCollisionComponent::detectCollision(Game& game, Entity&, Entity& collide | |||
430 | if ((fixed_x+collider.size.first > collision.lower) && (fixed_x < collision.upper)) | 440 | if ((fixed_x+collider.size.first > collision.lower) && (fixed_x < collision.upper)) |
431 | { | 441 | { |
432 | // We have a collision! | 442 | // We have a collision! |
433 | processCollision(game, collider, collision, Direction::up); | 443 | if (processCollision(game, collider, collision, Direction::up)) |
444 | { | ||
445 | return; | ||
446 | } | ||
434 | 447 | ||
435 | break; | 448 | break; |
436 | } | 449 | } |
@@ -445,7 +458,10 @@ void MapCollisionComponent::detectCollision(Game& game, Entity&, Entity& collide | |||
445 | if ((fixed_x+collider.size.first > collision.lower) && (fixed_x < collision.upper)) | 458 | if ((fixed_x+collider.size.first > collision.lower) && (fixed_x < collision.upper)) |
446 | { | 459 | { |
447 | // We have a collision! | 460 | // We have a collision! |
448 | processCollision(game, collider, collision, Direction::down); | 461 | if (processCollision(game, collider, collision, Direction::down)) |
462 | { | ||
463 | return; | ||
464 | } | ||
449 | 465 | ||
450 | break; | 466 | break; |
451 | } | 467 | } |
@@ -453,7 +469,7 @@ void MapCollisionComponent::detectCollision(Game& game, Entity&, Entity& collide | |||
453 | } | 469 | } |
454 | } | 470 | } |
455 | 471 | ||
456 | void MapCollisionComponent::processCollision(Game& game, Entity& collider, Collision collision, Direction dir) | 472 | bool MapCollisionComponent::processCollision(Game& game, Entity& collider, Collision collision, Direction dir) |
457 | { | 473 | { |
458 | if (collision.type == 0) | 474 | if (collision.type == 0) |
459 | { | 475 | { |
@@ -508,6 +524,8 @@ void MapCollisionComponent::processCollision(Game& game, Entity& collider, Colli | |||
508 | collider.position.first = -collider.size.first/2; | 524 | collider.position.first = -collider.size.first/2; |
509 | game.loadMap(*rightMap); | 525 | game.loadMap(*rightMap); |
510 | } | 526 | } |
527 | |||
528 | return true; | ||
511 | } else if (collision.type == 3) | 529 | } else if (collision.type == 3) |
512 | { | 530 | { |
513 | if (dir == Direction::right) | 531 | if (dir == Direction::right) |
@@ -524,4 +542,6 @@ void MapCollisionComponent::processCollision(Game& game, Entity& collider, Colli | |||
524 | 542 | ||
525 | collider.send(game, msg); | 543 | collider.send(game, msg); |
526 | } | 544 | } |
545 | |||
546 | return false; | ||
527 | } | 547 | } |