VIPRA Documentation
Loading...
Searching...
No Matches
modifier_direction.hpp
1#pragma once
2
3#include "vipra/vipra_behaviors/definitions/sim_pack.hpp"
4#include "vipra/vipra_behaviors/values/direction.hpp"
5
6namespace VIPRA::Behaviors {
11class ModifierDirection {
12 NON_DEFAULT_CONSTRUCTIBLE(ModifierDirection)
13 COPYABLE(ModifierDirection)
14 MOVEABLE(ModifierDirection)
15
16 public:
17 explicit ModifierDirection(Direction direction) : _direction(direction) {}
18
28 auto operator()(Simpack pack, VIPRA::idx targetIdx, VIPRA::idx selfIdx) const -> bool
29 {
30 auto const& goalCoord = pack.goals.current_goal(selfIdx);
31 auto const& selfCoord = pack.pedset.ped_coords(selfIdx);
32 auto const& targetCoord = pack.pedset.ped_coords(targetIdx);
33
34 auto forward = goalCoord - selfCoord;
35 auto dif = targetCoord - selfCoord;
36
37 if ( _direction == Direction::FRONT ) {
38 return dif.dot(forward) > RANGE;
39 }
40
41 return dif.dot(forward) <= RANGE;
42 }
43
44 private:
45 Direction _direction;
46
47 static constexpr VIPRA::f_pnt RANGE = 0.1F;
48};
49} // namespace VIPRA::Behaviors
auto operator()(Simpack pack, VIPRA::idx targetIdx, VIPRA::idx selfIdx) const -> bool
Returns true if the target is in the desired direction.
Definition modifier_direction.hpp:28
Holds references to commonly used parameters for simpler passing.
Definition sim_pack.hpp:23