24 Point enemy_threat_origin;
26 TbotsProto::CreaseDefenderAlignment crease_defender_alignment;
28 TbotsProto::MaxAllowedSpeedMode max_allowed_speed_mode;
30 TbotsProto::BallStealMode ball_steal_mode;
34 DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS
47 const Field& field,
const Point& enemy_threat_origin,
48 const TbotsProto::CreaseDefenderAlignment& crease_defender_alignment,
49 double robot_obstacle_inflation_factor);
57 : robot_navigation_obstacle_config(ai_config.robot_navigation_obstacle_config()),
58 crease_defender_config(ai_config.crease_defender_config())
79 boost::sml::back::process<DribbleFSM::Update> processEvent);
87 boost::sml::back::process<MoveFSM::Update> processEvent);
91 using namespace boost::sml;
94 DEFINE_SML_EVENT(Update)
100 return make_transition_table(
102 *MoveFSM_S + Update_E[ballNearbyWithoutThreat_G] / prepareGetPossession_A =
104 MoveFSM_S + Update_E / blockThreat_A, MoveFSM_S = X,
105 DribbleFSM_S + Update_E[!ballNearbyWithoutThreat_G] / blockThreat_A =
107 DribbleFSM_S + Update_E / prepareGetPossession_A,
108 X + Update_E[ballNearbyWithoutThreat_G] / prepareGetPossession_A =
110 X + Update_E / blockThreat_A = MoveFSM_S);
114 static constexpr double DETECT_THREAT_AHEAD_SHAPE_LENGTH_M = 1;
115 static constexpr double DETECT_THREAT_AHEAD_SHAPE_RADIUS_M = 0.25;
128 static std::optional<Point> findDefenseAreaIntersection(
129 const Field& field,
const Ray& ray,
double robot_obstacle_inflation_factor);
138 static bool isAnyEnemyInZone(
const Update& event,
const Stadium& zone);
140 TbotsProto::RobotNavigationObstacleConfig robot_navigation_obstacle_config;
141 TbotsProto::CreaseDefenderConfig crease_defender_config;
static DEFINE_TACTIC_UPDATE_STRUCT_WITH_CONTROL_AND_COMMON_PARAMS std::optional< Point > findBlockThreatPoint(const Field &field, const Point &enemy_threat_origin, const TbotsProto::CreaseDefenderAlignment &crease_defender_alignment, double robot_obstacle_inflation_factor)
Definition crease_defender_fsm.cpp:9