5#include "vipra/logging/logging.hpp"
6#include "vipra/types/idx.hpp"
8#include "vipra/vipra_behaviors/conditions/condition.hpp"
9#include "vipra/vipra_behaviors/events/event_status.hpp"
10#include "vipra/vipra_behaviors/util/bool_latch.hpp"
11#include "vipra/vipra_behaviors/util/timed_latch.hpp"
13namespace VIPRA::Behaviors {
20 DEFAULT_CONSTRUCTIBLE(Event)
25 explicit Event(std::string name) : _name(std::move(name)) {}
27 void evaluate(
auto pack);
29 void set_start_condition(
Condition const& condition) { _startCondition = condition; }
30 void set_end_condition(
Condition const& condition) { _endCondition = condition; }
32 [[nodiscard]]
auto is_occurring()
const ->
bool
34 return _status == EventStatus::OCCURRING || _status == EventStatus::STARTING;
36 [[nodiscard]]
auto has_occurred()
const ->
bool {
return _occurred; }
37 [[nodiscard]]
auto is_starting()
const ->
bool
39 return _status == EventStatus::STARTING;
41 [[nodiscard]]
auto is_ending()
const ->
bool {
return _status == EventStatus::ENDING; }
43 void set_status(EventStatus status) { _status = status; }
44 [[nodiscard]]
auto get_status()
const -> EventStatus
const& {
return _status; }
46 [[nodiscard]]
auto get_name()
const -> std::string
const& {
return _name; }
50 EventStatus _status{EventStatus::NOT_OCCURRING};
51 bool _occurred =
false;
55 std::optional<Condition> _endCondition;
58void Event::evaluate(
auto pack)
60 if ( _status == EventStatus::ENDING ) {
61 _status = EventStatus::NOT_OCCURRING;
63 if ( _status == EventStatus::STARTING ) {
64 _status = EventStatus::OCCURRING;
67 std::vector<VIPRA::idx> peds{0};
68 std::vector<bool> met{
false};
69 std::optional<TimedLatchCollection> temp;
72 if ( _status == EventStatus::OCCURRING ) {
73 if ( _endCondition ) {
74 _endCondition.value().evaluate(pack, peds, met, {}, temp);
77 _status = EventStatus::ENDING;
84 _startCondition.evaluate(pack, peds, met, {}, temp);
88 _status = EventStatus::STARTING;
Definition condition.hpp:14
Literally a boolean with extra syntax.
Definition bool_latch.hpp:10
static VIPRA_INLINE void debug(fmt::format_string< param_ts... > message, param_ts &&... params)
Calls the provided Logger with Level DEBUG.
Definition logging.hpp:85