Thunderbots Project
Loading...
Searching...
No Matches
offense_play_fsm.h
1#pragma once
2
3#include "proto/parameters.pb.h"
4#include "shared/constants.h"
5#include "software/ai/evaluation/possession.h"
6#include "software/ai/hl/stp/play/defense/defense_play.h"
7#include "software/ai/hl/stp/play/play_fsm.h"
8#include "software/ai/hl/stp/play/shoot_or_pass/shoot_or_pass_play.h"
9#include "software/logger/logger.h"
10
12{
13 class OffensiveState;
14 class DefensiveState;
15
17 {
18 };
19
20 DEFINE_PLAY_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
21
27 explicit OffensePlayFSM(TbotsProto::AiConfig ai_config);
28
36 bool enemyHasPossession(const Update& event);
37
43 void setupOffensiveStrategy(const Update& event);
44
50 void setupDefensiveStrategy(const Update& event);
51
60 void setTactics(const Update& event, int num_shoot_or_pass, int num_defenders);
61
62 auto operator()()
63 {
64 using namespace boost::sml;
65
66 DEFINE_SML_STATE(OffensiveState)
67 DEFINE_SML_STATE(DefensiveState)
68
69 DEFINE_SML_EVENT(Update)
70
71 DEFINE_SML_GUARD(enemyHasPossession)
72
73 DEFINE_SML_ACTION(setupOffensiveStrategy)
74 DEFINE_SML_ACTION(setupDefensiveStrategy)
75
76 return make_transition_table(
77 // src_state + event [guard] / action = dest_state
78 *OffensiveState_S + Update_E[enemyHasPossession_G] /
79 setupDefensiveStrategy_A = DefensiveState_S,
80 OffensiveState_S + Update_E / setupOffensiveStrategy_A = OffensiveState_S,
81 DefensiveState_S + Update_E[!enemyHasPossession_G] /
82 setupOffensiveStrategy_A = OffensiveState_S,
83 DefensiveState_S + Update_E / setupDefensiveStrategy_A = DefensiveState_S,
84 X + Update_E = X);
85 }
86
87 private:
88 TbotsProto::AiConfig ai_config;
89 std::shared_ptr<ShootOrPassPlay> shoot_or_pass_play;
90 std::shared_ptr<DefensePlay> defense_play;
91};
Definition offense_play_fsm.h:17
Definition offense_play_fsm.h:12
void setupDefensiveStrategy(const Update &event)
Definition offense_play_fsm.cpp:44
void setupOffensiveStrategy(const Update &event)
Definition offense_play_fsm.cpp:16
bool enemyHasPossession(const Update &event)
Definition offense_play_fsm.cpp:10
void setTactics(const Update &event, int num_shoot_or_pass, int num_defenders)
Definition offense_play_fsm.cpp:49