VIPRA Documentation
Loading...
Searching...
No Matches
spatial_grid.hpp
1#pragma once
2
3#include <vector>
4
5#include "spatial_map.hpp"
6#include "vipra/macros/pedestrians.hpp"
7#include "vipra/modules/pedestrians.hpp"
8
9namespace VIPRA::Pedestrians {
10
15NEW_VIPRA_MODULE(SpatialGrid, Pedestrians)
16{
17 public:
18 VIPRA_MODULE_NAME("SpatialGrid");
19 VIPRA_MODULE_TYPE(Pedestrians);
20
21 VIPRA_REGISTER_PARAMS(VIPRA_PARAM("gridSize", _cellSize));
22
23 VIPRA_PEDS_INIT_STEP override;
24 VIPRA_PEDS_UPDATE_STEP override;
25 VIPRA_PEDS_RESET override;
26
27 [[nodiscard]] auto conditional_closest_ped(
28 VIPRA::idx ped, std::function<bool(VIPRA::idx)> const& condition)
29 const -> VIPRA::idx override;
30 [[nodiscard]] auto closest_ped(VIPRA::idx ped) const -> VIPRA::idx override;
31 [[nodiscard]] auto all_neighbors_within(VIPRA::idx pedIdx, VIPRA::f_pnt radius)
32 const -> std::vector<VIPRA::idx> override;
33
34 private:
35 VIPRA::f_pnt _cellSize{};
36 VIPRA::DataStructures::SpatialMap<VIPRA::idx> _spatialGrid;
37};
38} // namespace VIPRA::Pedestrians