VIPRA Documentation
Loading...
Searching...
No Matches
action.hpp
1#pragma once
2
3#include <optional>
4
5#include "vipra/vipra_behaviors/actions/atom.hpp"
6#include "vipra/vipra_behaviors/targets/target.hpp"
7#include "vipra/vipra_behaviors/targets/target_selector.hpp"
8
9#include "vipra/vipra_behaviors/conditions/condition.hpp"
10
11#include "vipra/vipra_behaviors/util/class_types.hpp"
12#include "vipra/vipra_behaviors/util/timed_latch.hpp"
13
14#include "vipra/vipra_behaviors/values/numeric_value.hpp"
15
16namespace VIPRA::Behaviors {
17class Action {
18 DEFAULT_CONSTRUCTIBLE(Action)
19 COPYABLE(Action)
20 MOVEABLE(Action)
21
22 public:
23 void initialize(auto pack)
24 {
25 if ( _condition ) _condition->initialize(pack);
26 if ( _duration ) _duration->resize(pack.pedset.num_pedestrians());
27 }
28
29 void perform_action(Simpack pack, VIPRA::idxVec& peds,
30 std::vector<Target> const& targets);
31 void perform_action(Simpack pack, const VIPRA::idxVec& peds,
32 std::vector<bool> const& conditionMet,
33 std::vector<Target> const& targets);
34
35 void add_condition(Condition const& cond) { _condition = cond; }
36 void add_atom(Atom&& atom) { _atoms.push_back(atom); }
37 void add_target(TargetSelector&& target) { _targets = target; }
38 void add_duration(Behaviors::NumericValue const& duration)
39 {
40 _duration = TimedLatchCollection(duration);
41 }
42
43 [[nodiscard]] auto has_condition() -> bool { return _condition.has_value(); }
44 [[nodiscard]] auto condition() -> std::optional<Condition>& { return _condition; }
45
46 [[nodiscard]] auto has_duration() -> bool { return _duration.has_value(); }
47 [[nodiscard]] auto duration() -> std::optional<TimedLatchCollection>&
48 {
49 return _duration;
50 }
51
52 [[nodiscard]] auto has_target() -> bool { return _targets.has_value(); }
53 [[nodiscard]] auto targets() -> std::optional<TargetSelector>& { return _targets; }
54
55 private:
56 std::vector<Atom> _atoms;
57 std::optional<Condition> _condition;
58 std::optional<TimedLatchCollection> _duration;
59 std::optional<TargetSelector> _targets;
60};
61
62} // namespace VIPRA::Behaviors
Definition action.hpp:17
Definition condition.hpp:14
Numeric Values hold runtime VIPRA::f_pnt values taken from Behaviors.
Definition numeric_value.hpp:21
Used to grab a target for either conditions or actions.
Definition target_selector.hpp:13
Holds time released latches.
Definition timed_latch.hpp:15
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23