VIPRA Documentation
Loading...
Searching...
No Matches
target_selector.hpp
1#pragma once
2
3#include <optional>
4
5#include "vipra/vipra_behaviors/targets/target.hpp"
6
7namespace VIPRA::Behaviors {
8
13class TargetSelector {
14 DEFAULT_CONSTRUCTIBLE(TargetSelector)
15 COPYABLE(TargetSelector)
16 MOVEABLE(TargetSelector)
17
18 public:
19 explicit TargetSelector(TargetFunc&& func) : _select(func) {}
20
21 void get_targets(Simpack pack, const VIPRA::idxVec& peds, std::vector<Target>& targets)
22 {
23 if ( ! _select ) {
24 std::for_each(peds.begin(), peds.end(), [&](auto idx) {
25 targets[idx] = Target{TargetType::PEDESTRIAN, idx};
26 });
27 return;
28 }
29
30 std::for_each(peds.begin(), peds.end(), [&](auto idx) {
31 targets[idx] = _select.value()(pack, Self{Target{TargetType::PEDESTRIAN, idx}});
32 });
33 }
34
35 private:
36 std::optional<TargetFunc> _select;
37};
38} // namespace VIPRA::Behaviors
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23