diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/systems/playing.cpp | 8 | ||||
-rw-r--r-- | src/systems/pondering.cpp | 26 | ||||
-rw-r--r-- | src/systems/pondering.h | 14 |
3 files changed, 36 insertions, 12 deletions
diff --git a/src/systems/playing.cpp b/src/systems/playing.cpp index b04f0cb..acec4e7 100644 --- a/src/systems/playing.cpp +++ b/src/systems/playing.cpp | |||
@@ -79,11 +79,7 @@ void PlayingSystem::changeMap( | |||
79 | auto& transformable = game_.getEntityManager(). | 79 | auto& transformable = game_.getEntityManager(). |
80 | getComponent<TransformableComponent>(player); | 80 | getComponent<TransformableComponent>(player); |
81 | 81 | ||
82 | auto& animatable = game_.getEntityManager(). | 82 | auto& pondering = game_.getSystemManager().getSystem<PonderingSystem>(); |
83 | getComponent<AnimatableComponent>(player); | ||
84 | |||
85 | auto& ponderable = game_.getEntityManager(). | ||
86 | getComponent<PonderableComponent>(player); | ||
87 | 83 | ||
88 | auto& realizing = game_.getSystemManager().getSystem<RealizingSystem>(); | 84 | auto& realizing = game_.getSystemManager().getSystem<RealizingSystem>(); |
89 | 85 | ||
@@ -105,6 +101,8 @@ void PlayingSystem::changeMap( | |||
105 | playable.mapId = newMapEntity; | 101 | playable.mapId = newMapEntity; |
106 | } | 102 | } |
107 | 103 | ||
104 | pondering.unferry(player); | ||
105 | |||
108 | transformable.x = x; | 106 | transformable.x = x; |
109 | transformable.y = y; | 107 | transformable.y = y; |
110 | 108 | ||
diff --git a/src/systems/pondering.cpp b/src/systems/pondering.cpp index ccfd66f..4aa47f2 100644 --- a/src/systems/pondering.cpp +++ b/src/systems/pondering.cpp | |||
@@ -655,7 +655,7 @@ void PonderingSystem::tick(double dt) | |||
655 | } | 655 | } |
656 | } | 656 | } |
657 | 657 | ||
658 | // Handle ferry passengers | 658 | // Ferry or unferry as necessary |
659 | if ((ponderable.type == PonderableComponent::Type::freefalling) && | 659 | if ((ponderable.type == PonderableComponent::Type::freefalling) && |
660 | (ponderable.grounded != oldGrounded)) | 660 | (ponderable.grounded != oldGrounded)) |
661 | { | 661 | { |
@@ -674,15 +674,11 @@ void PonderingSystem::tick(double dt) | |||
674 | } else if (ponderable.ferried) | 674 | } else if (ponderable.ferried) |
675 | { | 675 | { |
676 | // The body is no longer being ferried | 676 | // The body is no longer being ferried |
677 | ponderable.ferried = false; | 677 | unferry(entity); |
678 | |||
679 | auto& ferryPonder = game_.getEntityManager(). | ||
680 | getComponent<PonderableComponent>(ponderable.ferry); | ||
681 | |||
682 | ferryPonder.passengers.erase(entity); | ||
683 | } | 678 | } |
684 | } | 679 | } |
685 | 680 | ||
681 | // Update a ferry passenger's relative position | ||
686 | if (ponderable.ferried) | 682 | if (ponderable.ferried) |
687 | { | 683 | { |
688 | auto& ferryTrans = game_.getEntityManager(). | 684 | auto& ferryTrans = game_.getEntityManager(). |
@@ -768,6 +764,22 @@ void PonderingSystem::initPrototype(id_type prototype) | |||
768 | ponderable.passengers.clear(); | 764 | ponderable.passengers.clear(); |
769 | } | 765 | } |
770 | 766 | ||
767 | void PonderingSystem::unferry(id_type entity) | ||
768 | { | ||
769 | auto& ponderable = game_.getEntityManager(). | ||
770 | getComponent<PonderableComponent>(entity); | ||
771 | |||
772 | if (ponderable.ferried) | ||
773 | { | ||
774 | ponderable.ferried = false; | ||
775 | |||
776 | auto& ferryPonder = game_.getEntityManager(). | ||
777 | getComponent<PonderableComponent>(ponderable.ferry); | ||
778 | |||
779 | ferryPonder.passengers.erase(entity); | ||
780 | } | ||
781 | } | ||
782 | |||
771 | void PonderingSystem::processCollision( | 783 | void PonderingSystem::processCollision( |
772 | id_type entity, | 784 | id_type entity, |
773 | id_type collider, | 785 | id_type collider, |
diff --git a/src/systems/pondering.h b/src/systems/pondering.h index b195814..adc0cda 100644 --- a/src/systems/pondering.h +++ b/src/systems/pondering.h | |||
@@ -16,8 +16,22 @@ public: | |||
16 | 16 | ||
17 | void initializeBody(id_type entity, PonderableComponent::Type type); | 17 | void initializeBody(id_type entity, PonderableComponent::Type type); |
18 | 18 | ||
19 | /** | ||
20 | * Initializes a ponderable map object from its prototype data. | ||
21 | * | ||
22 | * @requires entity is ponderable | ||
23 | * @requires entity is a map object | ||
24 | */ | ||
19 | void initPrototype(id_type prototype); | 25 | void initPrototype(id_type prototype); |
20 | 26 | ||
27 | /** | ||
28 | * Unferries an entity if it is a passenger of another entity. Use before | ||
29 | * moving a ponderable entity outside the PonderingSystem. | ||
30 | * | ||
31 | * @requires entity is ponderable | ||
32 | */ | ||
33 | void unferry(id_type entity); | ||
34 | |||
21 | private: | 35 | private: |
22 | 36 | ||
23 | struct CollisionResult | 37 | struct CollisionResult |