51 [[nodiscard]]
auto build(std::string name, std::filesystem::path
const& filepath,
60 LocationMap _locations;
66 Behaviors::stateUID _currState{};
67 Behaviors::typeUID _currType{};
68 VIPRA::seed _currSeed{};
70 void initial_behavior_setup(std::string
const& behaviorName,
Modules::Map const& map,
72 void initialize_types();
73 void initialize_events();
74 void initialize_states();
76 void end_behavior_check();
80 void add_atom_to_action(
Action& action, BehaviorParser::Action_atomContext* atom);
81 void add_target_to_action(
Action& action, BehaviorParser::TargetContext* ctx);
83 [[nodiscard]]
auto add_event(BehaviorParser::Event_nameContext* ctx) -> VIPRA::idx;
85 [[nodiscard]]
auto build_condition(BehaviorParser::ConditionContext* cond) ->
Condition;
86 void condition_tree_condition(BehaviorParser::ConditionContext* condition,
88 void condition_tree_unary(BehaviorParser::UnaryContext* unary,
Condition& tree);
89 void condition_tree_primary(BehaviorParser::PrimaryContext* primary,
Condition& tree);
90 void add_sub_condition(
Condition& condTree,
91 BehaviorParser::Sub_conditionContext* subcond);
93 [[nodiscard]]
auto build_sub_selector(slType type, slSelector selector,
94 std::optional<slGroup> group,
97 [[nodiscard]]
auto get_location(std::string
const& name)
const
98 -> std::optional<VIPRA::idx>;
99 [[nodiscard]]
auto get_state(std::string
const& state)
const
100 -> std::optional<Behaviors::stateUID>;
101 [[nodiscard]]
auto get_event(std::string
const& name)
const
102 -> std::optional<VIPRA::idx>;
103 [[nodiscard]]
auto get_range(BehaviorParser::Value_numberContext* ctx)
const
104 -> VIPRA::time_range_s;
105 [[nodiscard]]
auto get_type(std::string
const& type)
const
106 -> std::optional<Behaviors::typeUID>;
107 [[nodiscard]]
auto get_group(std::optional<slGroup> group)
const
108 -> std::pair<Behaviors::typeUID, std::string>;
109 [[nodiscard]]
auto get_composite_type(
110 std::vector<antlr4::tree::TerminalNode*>
const& types)
const ->
Behaviors::Ptype;
111 [[nodiscard]]
static auto get_attribute(std::string attr) -> Behaviors::Attribute;
113 [[nodiscard]]
auto get_check_location(std::string
const& name)
const -> VIPRA::idx;
114 [[nodiscard]]
auto get_check_state(std::string
const& name)
const
115 -> Behaviors::stateUID;
116 [[nodiscard]]
auto get_check_event(std::string
const& name)
const -> VIPRA::idx;
117 [[nodiscard]]
auto get_check_type(std::string
const& name)
const -> Behaviors::typeUID;
119 [[nodiscard]]
auto make_attribute_value(BehaviorParser::Attr_valueContext* ctx)
121 [[nodiscard]]
static auto make_attribute_str(BehaviorParser::AttributeContext* ctx)
123 [[nodiscard]]
static auto make_list_strs(
124 std::vector<antlr4::tree::TerminalNode*>
const& types) -> std::vector<std::string>;
125 [[nodiscard]]
auto make_target_modifier(std::vector<BehaviorParser::ModifierContext*>&
126 modifiers) -> std::optional<TargetModifier>;
127 [[nodiscard]]
static auto make_direction(BehaviorParser::DirectionContext* ctx)
129 [[nodiscard]]
auto make_dimensions(BehaviorParser::Loc_dimensionsContext* ctx)
const
130 -> std::tuple<VIPRA::f3d, VIPRA::f3d, VIPRA::f_pnt>;
139 template <
typename... args_t>
140 [[noreturn]]
static void error(fmt::format_string<args_t...> message,
144 BuilderException::error();
149 auto visitEvent(BehaviorParser::EventContext* ) -> antlrcpp::Any
override;
150 auto visitPed_Selector(BehaviorParser::Ped_SelectorContext* )
151 -> antlrcpp::Any
override;
152 auto visitAction(BehaviorParser::ActionContext* ) -> antlrcpp::Any
override;
153 auto visitDecl_Ped_State(BehaviorParser::Decl_Ped_StateContext* )
154 -> antlrcpp::Any
override;
155 auto visitDecl_Ped(BehaviorParser::Decl_PedContext* ) -> antlrcpp::Any
override;
156 auto visitLocation(BehaviorParser::LocationContext* ) -> antlrcpp::Any
override;
160 void add_set_atom(
Action& , BehaviorParser::Set_atomContext* );
161 void add_scale_atom(
Action& , BehaviorParser::Scale_atomContext* );
162 static void add_set_obj_atom(
Action& ,
163 BehaviorParser::Set_objective_atomContext* );
167 void add_nearest_type_target(
Action& ,
168 BehaviorParser::Nearest_typeContext* ,
169 std::optional<TargetModifier>& );
174 BehaviorParser::ModifierContext* )
const;
177 BehaviorParser::DistanceContext* )
const;
179 BehaviorParser::DirectionContext* );
181 BehaviorParser::Location_modifierContext* )
const;
185 [[nodiscard]]
auto build_enter_obj_subcond(
187 [[nodiscard]]
auto build_enter_subcond(
189 [[nodiscard]]
auto build_exit_subcond(
191 [[nodiscard]]
auto build_time_elapsed_subcond(
192 BehaviorParser::Condition_Time_Elapsed_From_EventContext* )
194 [[nodiscard]]
auto build_event_occurred_subcond(
195 BehaviorParser::Condition_Event_OccurredContext* )
197 [[nodiscard]]
auto build_event_occurring_subcond(
198 BehaviorParser::Condition_Event_OccurringContext* )
200 [[nodiscard]]
auto build_event_starting_subcond(
201 BehaviorParser::Condition_Event_StartingContext* )
203 [[nodiscard]]
auto build_event_ending_subcond(
205 [[nodiscard]]
auto build_spatial_subcond(
207 [[nodiscard]]
auto build_in_location_subcond(
208 BehaviorParser::Condition_Inside_LocationContext* )
210 [[nodiscard]]
auto build_attribute_subcond(
212 [[nodiscard]]
auto build_exists_subcond(
217 auto build_everyone_selector(slType ,
bool ) ->
SubSelector;
218 auto build_exactly_n_selector(slType , slSelector ,
219 std::optional<slGroup> ,
221 auto build_percent_selector(slType , slSelector ,
222 std::optional<slGroup> ,
224 auto build_location_selector(slType , slSelector ,
225 std::optional<slGroup> ,
239 template <
typename comp_t>
240 [[nodiscard]]
static auto find_event_component(BehaviorParser::EventContext* ctx)
241 -> std::optional<comp_t>
243 for (
auto const& attr : ctx->event_attribute() ) {
245 if constexpr ( std::is_same_v<comp_t, std::string> )
246 if ( attr->event_name() )
return attr->event_name()->ID()->toString();
249 if constexpr ( std::is_same_v<comp_t, evStart> )
250 if ( attr->event_start() )
return attr->event_start();
253 if constexpr ( std::is_same_v<comp_t, evEnd> )
254 if ( attr->event_end() )
return attr->event_end();
267 template <
typename comp_t>
268 [[nodiscard]]
static auto find_action_component(BehaviorParser::ActionContext* ctx)
269 -> std::optional<comp_t>
271 for (
auto const& attr : ctx->action_attribute() ) {
273 if constexpr ( std::is_same_v<comp_t, acStimulus> )
274 if ( attr->action_stimulus() )
return attr->action_stimulus();
277 if constexpr ( std::is_same_v<comp_t, acResponse> )
278 if ( attr->action_response() )
return attr->action_response();
281 if constexpr ( std::is_same_v<comp_t, acTarget> )
282 if ( attr->action_target() )
return attr->action_target();
285 if constexpr ( std::is_same_v<comp_t, acDuration> )
286 if ( attr->action_duration() )
return attr->action_duration();
299 template <
typename comp_t>
300 [[nodiscard]]
static auto find_selector_component(
301 BehaviorParser::Ped_SelectorContext* ctx) -> std::optional<comp_t>
303 for (
auto const& attr : ctx->selector_attribute() ) {
305 if constexpr ( std::is_same_v<comp_t, slType> )
306 if ( attr->selector_type() )
return attr->selector_type();
309 if constexpr ( std::is_same_v<comp_t, slSelector> )
310 if ( attr->selector_selector() )
return attr->selector_selector();
313 if constexpr ( std::is_same_v<comp_t, slGroup> )
314 if ( attr->selector_from() )
return attr->selector_from();
317 if constexpr ( std::is_same_v<comp_t, slRequired> )
318 if ( attr->selector_required() )
return attr->selector_required();
331 template <
typename comp_t>
332 [[nodiscard]]
static auto find_location_component(BehaviorParser::LocationContext* ctx)
333 -> std::optional<comp_t>
335 for (
auto const& attr : ctx->location_attribute() ) {
337 if constexpr ( std::is_same_v<comp_t, lcName> )
338 if ( attr->loc_name() )
return attr->loc_name();
341 if constexpr ( std::is_same_v<comp_t, lcDimensions> )
342 if ( attr->loc_dimensions() )
return attr->loc_dimensions();