VIPRA Documentation
Loading...
Searching...
No Matches
calm_collision.hpp
1#pragma once
2
3#include <vector>
4
5#include "model/Calm/calm_model_types.hpp"
6
7#include "vipra/geometry/f3d.hpp"
8#include "vipra/geometry/rectangle.hpp"
9#include "vipra/modules/goals.hpp"
10#include "vipra/modules/pedestrians.hpp"
11#include "vipra/types/float.hpp"
12#include "vipra/types/idx.hpp"
13
14namespace CALM {
15
16struct Data {
17 std::vector<float> betas;
18 std::vector<float> masses;
19 std::vector<float> desiredSpeeds;
20 std::vector<float> shoulders;
21 std::vector<VIPRA::f_pnt> nearestNeighborDists;
22};
23
25 public:
26 enum class Status { WON, LOST };
27
28 void initialize(VIPRA::f_pnt range, VIPRA::Modules::Pedestrians const& pedset);
29 void race_detection(VIPRA::Modules::Pedestrians const& pedset,
30 VIPRA::Modules::Goals const& goals, CALM::ModelData const& data);
31
32 [[nodiscard]] auto status(VIPRA::idx pedIdx) -> Status;
33
34 private:
35 VIPRA::f_pnt _range;
36 std::vector<Status> _statuses;
37 std::vector<VIPRA::Geometry::Rectangle> _collisionRects;
38
39 void calc_collision_shapes(VIPRA::Modules::Pedestrians const& /*pedset*/,
40 CALM::ModelData const& /*data*/);
41 void calc_races(VIPRA::Modules::Pedestrians const& /*pedset*/,
42 VIPRA::Modules::Goals const& /*goals*/);
43 auto calc_collisions(VIPRA::idx /*pedIdx*/,
44 VIPRA::Modules::Pedestrians const& /*pedset*/,
45 VIPRA::Modules::Goals const& /*goals*/) -> bool;
46 auto calc_intersection_midpoint(VIPRA::idx /*index1*/,
47 VIPRA::idx /*index2*/) -> VIPRA::f3d;
48};
49} // namespace CALM
Definition calm_collision.hpp:24
Goals module mixin.
Definition goals.hpp:26
Base Pedestrians module.
Definition pedestrians.hpp:35
Definition calm_collision.hpp:16
Definition calm_model_types.hpp:24
Definition f3d.hpp:27