Line data Source code
1 : #include "core/animations/states/CommonAnimationStateTransitions.hpp"
2 :
3 : #include "core/animations/states/BodyThrowAnimationState.hpp"
4 : #include "core/animations/states/LegsCrouchRunAnimationState.hpp"
5 : #include "core/animations/states/LegsCrouchRunBackAnimationState.hpp"
6 : #include "core/animations/states/LegsRollBackAnimationState.hpp"
7 : #include "core/animations/states/LegsRunBackAnimationState.hpp"
8 : #include "core/animations/states/LegsRunAnimationState.hpp"
9 : #include "core/animations/states/LegsRollAnimationState.hpp"
10 :
11 : #include "core/entities/Soldier.hpp"
12 : #include <optional>
13 :
14 : namespace Soldank::CommonAnimationStateTransitions
15 : {
16 0 : std::optional<std::shared_ptr<AnimationState>> TryTransitionToRunning(
17 : const Soldier& soldier,
18 : const AnimationDataManager& animation_data_manager)
19 : {
20 0 : if (soldier.control.left) {
21 0 : if (soldier.direction == 1) {
22 0 : return std::make_shared<LegsRunBackAnimationState>(animation_data_manager);
23 : }
24 :
25 0 : return std::make_shared<LegsRunAnimationState>(animation_data_manager);
26 : }
27 :
28 0 : if (soldier.control.right) {
29 0 : if (soldier.direction == -1) {
30 0 : return std::make_shared<LegsRunBackAnimationState>(animation_data_manager);
31 : }
32 :
33 0 : return std::make_shared<LegsRunAnimationState>(animation_data_manager);
34 : }
35 :
36 0 : return std::nullopt;
37 : }
38 :
39 0 : std::optional<std::shared_ptr<AnimationState>> TryTransitionToCrouchRunning(
40 : const Soldier& soldier,
41 : const AnimationDataManager& animation_data_manager)
42 : {
43 0 : if (soldier.control.right) {
44 0 : if (soldier.direction == 1) {
45 0 : return std::make_shared<LegsCrouchRunAnimationState>(animation_data_manager);
46 : }
47 :
48 0 : return std::make_shared<LegsCrouchRunBackAnimationState>(animation_data_manager);
49 : }
50 :
51 0 : if (soldier.control.left) {
52 0 : if (soldier.direction == -1) {
53 0 : return std::make_shared<LegsCrouchRunAnimationState>(animation_data_manager);
54 : }
55 :
56 0 : return std::make_shared<LegsCrouchRunBackAnimationState>(animation_data_manager);
57 : }
58 :
59 0 : return std::nullopt;
60 : }
61 :
62 0 : std::optional<std::shared_ptr<AnimationState>> TryTransitionToRolling(
63 : const Soldier& soldier,
64 : const AnimationDataManager& animation_data_manager)
65 : {
66 0 : if (soldier.control.down && soldier.control.left && soldier.direction == -1) {
67 0 : return std::make_shared<LegsRollAnimationState>(animation_data_manager);
68 : }
69 :
70 0 : if (soldier.control.down && soldier.control.right && soldier.direction == 1) {
71 0 : return std::make_shared<LegsRollAnimationState>(animation_data_manager);
72 : }
73 :
74 0 : if (soldier.control.down && soldier.control.left && soldier.direction == 1) {
75 0 : return std::make_shared<LegsRollBackAnimationState>(animation_data_manager);
76 : }
77 :
78 0 : if (soldier.control.down && soldier.control.right && soldier.direction == -1) {
79 0 : return std::make_shared<LegsRollBackAnimationState>(animation_data_manager);
80 : }
81 :
82 0 : return std::nullopt;
83 : }
84 :
85 0 : std::optional<std::shared_ptr<AnimationState>> TryTransitionToThrowingGrenade(
86 : Soldier& soldier,
87 : const AnimationDataManager& animation_data_manager)
88 : {
89 0 : if (!soldier.control.throw_grenade) {
90 0 : soldier.grenade_can_throw = true;
91 : }
92 :
93 0 : if (soldier.grenade_can_throw && soldier.control.throw_grenade) {
94 0 : return std::make_shared<BodyThrowAnimationState>(animation_data_manager);
95 : }
96 :
97 0 : return std::nullopt;
98 : }
99 : } // namespace Soldank::CommonAnimationStateTransitions
|