Thunderbots Project
Loading...
Searching...
No Matches
shoot_or_pass_play_fsm.h
1#pragma once
2
3#include "proto/parameters.pb.h"
4#include "shared/constants.h"
5#include "software/ai/hl/stp/play/play_fsm.h"
6#include "software/ai/hl/stp/tactic/attacker/attacker_tactic.h"
7#include "software/ai/hl/stp/tactic/move/move_tactic.h"
8#include "software/ai/hl/stp/tactic/receiver/receiver_tactic.h"
9#include "software/ai/navigator/obstacle/robot_navigation_obstacle_factory.h"
10#include "software/ai/passing/eighteen_zone_pitch_division.h"
11#include "software/ai/passing/pass_generator.h"
12#include "software/ai/passing/receiver_position_generator.hpp"
13#include "software/geom/algorithms/intersects.h"
14#include "software/logger/logger.h"
15
16using Zones = std::unordered_set<EighteenZoneId>;
17
19{
20 class AttemptShotState;
21 class TakePassState;
22 class StartState;
23
25 {
26 };
27
28 DEFINE_PLAY_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
29
30
36 explicit ShootOrPassPlayFSM(const TbotsProto::AiConfig& ai_config);
37
50 const WorldPtr world, unsigned int num_tactics,
51 const std::vector<Point>& existing_receiver_positions = {},
52 const std::optional<Point>& pass_origin_override = std::nullopt);
53
59 void lookForPass(const Update& event);
60
66 void startLookingForPass(const Update& event);
67
73 void takePass(const Update& event);
74
82 bool passFound(const Update& event);
83
91 bool shouldAbortPass(const Update& event);
92
100 bool passCompleted(const Update& event);
101
109 bool tookShot(const Update& event);
110
111 auto operator()()
112 {
113 using namespace boost::sml;
114
115 DEFINE_SML_STATE(AttemptShotState)
116 DEFINE_SML_STATE(TakePassState)
117 DEFINE_SML_STATE(StartState)
118 DEFINE_SML_EVENT(Update)
119
120 DEFINE_SML_ACTION(lookForPass)
121 DEFINE_SML_ACTION(startLookingForPass)
122 DEFINE_SML_ACTION(takePass)
123
124 DEFINE_SML_GUARD(passFound)
125 DEFINE_SML_GUARD(shouldAbortPass)
126 DEFINE_SML_GUARD(passCompleted)
127 DEFINE_SML_GUARD(tookShot)
128
129 return make_transition_table(
130 // src_state + event [guard] / action = dest_state
131 *StartState_S + Update_E / startLookingForPass_A = AttemptShotState_S,
132 AttemptShotState_S + Update_E[passFound_G] / takePass_A = TakePassState_S,
133 AttemptShotState_S + Update_E[tookShot_G] = X,
134 AttemptShotState_S + Update_E[!passFound_G] / lookForPass_A =
135 AttemptShotState_S,
136 TakePassState_S + Update_E[shouldAbortPass_G] / startLookingForPass_A =
137 AttemptShotState_S,
138 TakePassState_S + Update_E[!passCompleted_G] / takePass_A = TakePassState_S,
139 TakePassState_S + Update_E[passCompleted_G] / takePass_A = X,
140 X + Update_E / startLookingForPass_A = AttemptShotState_S);
141 }
142
143 private:
144 TbotsProto::AiConfig ai_config;
145 std::shared_ptr<AttackerTactic> attacker_tactic;
146 std::shared_ptr<ReceiverTactic> receiver_tactic;
147 std::vector<std::shared_ptr<MoveTactic>> offensive_positioning_tactics;
148 ReceiverPositionGenerator<EighteenZoneId> receiver_position_generator;
149 PassGenerator pass_generator;
150 Timestamp pass_optimization_start_time;
151 PassWithRating best_pass_and_score_so_far;
152 Duration time_since_commit_stage_start;
153 double min_pass_score_threshold;
154};
Definition duration.h:12
Definition pass_generator.h:15
Definition receiver_position_generator.hpp:20
Definition timestamp.h:21
Definition pass_with_rating.h:6
Definition shoot_or_pass_play_fsm.h:25
Definition shoot_or_pass_play_fsm.h:19
void lookForPass(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:59
bool shouldAbortPass(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:176
void takePass(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:122
void updateOffensivePositioningTactics(const WorldPtr world, unsigned int num_tactics, const std::vector< Point > &existing_receiver_positions={}, const std::optional< Point > &pass_origin_override=std::nullopt)
Definition shoot_or_pass_play_fsm.cpp:25
void startLookingForPass(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:113
bool passCompleted(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:223
bool tookShot(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:228
bool passFound(const Update &event)
Definition shoot_or_pass_play_fsm.cpp:167