VIPRA Documentation
Loading...
Searching...
No Matches
subcondition_spatial.hpp
1#pragma once
2
3#include <utility>
4
5#include "vipra/vipra_behaviors/conditions/sub_condition.hpp"
6#include "vipra/vipra_behaviors/util/class_types.hpp"
7#include "vipra/vipra_behaviors/values/numeric_value.hpp"
8
9namespace VIPRA::Behaviors {
10class SubConditionSpatial {
11 NON_DEFAULT_CONSTRUCTIBLE(SubConditionSpatial)
12 COPYABLE(SubConditionSpatial)
13 MOVEABLE(SubConditionSpatial)
14 public:
15 explicit SubConditionSpatial(NumericValue value) : _within(std::move(value)) {}
16
17 void operator()(Simpack pack, const VIPRA::idxVec& peds,
18 std::vector<Target> const& targets, std::vector<bool>& met,
19 std::vector<bool> const& /*unused*/, BoolOp /*unused*/) const
20 {
21 for ( auto idx : peds ) {
22 auto const& coords = pack.pedset.all_coords();
23 met[idx] =
24 coords[idx].distance_to(coords[targets[idx].targetIdx]) <= _within.value(idx);
25 }
26 }
27
28 private:
29 NumericValue _within;
30};
31} // namespace VIPRA::Behaviors
Numeric Values hold runtime VIPRA::f_pnt values taken from Behaviors.
Definition numeric_value.hpp:21
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23