summary refs log tree commit diff stats
path: root/src/components.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/components.cpp')
-rw-r--r--src/components.cpp30
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
456void MapCollisionComponent::processCollision(Game& game, Entity& collider, Collision collision, Direction dir) 472bool 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}