MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Expanse.cpp
Go to the documentation of this file.
1#include "Expanse.hpp"
2
3#include "glm/vec3.hpp"
4
5namespace MayaFlux::Nexus {
6
7void Expanse::evaluate(uint32_t fabric_id,
8 std::span<const std::pair<uint32_t, glm::vec3>> snapshot)
9{
10 auto& prev = m_occupants_by_fabric[fabric_id];
11
12 std::unordered_set<uint32_t> inside;
13 for (const auto& [eid, pos] : snapshot) {
14 if (m_contains && m_contains(pos))
15 inside.insert(eid);
16 }
17
18 if (m_on_enter) {
19 for (uint32_t eid : inside) {
20 if (!prev.contains(eid))
21 m_on_enter(eid);
22 }
23 }
24
25 if (m_on_exit) {
26 for (uint32_t eid : prev) {
27 if (!inside.contains(eid))
28 m_on_exit(eid);
29 }
30 }
31
32 if (inside.empty()) {
33 m_occupants_by_fabric.erase(fabric_id);
34 } else {
35 prev = std::move(inside);
36 }
37}
38
39} // namespace MayaFlux::Nexus
std::unordered_map< uint32_t, std::unordered_set< uint32_t > > m_occupants_by_fabric
Definition Expanse.hpp:155
void evaluate(uint32_t fabric_id, std::span< const std::pair< uint32_t, glm::vec3 > > snapshot)
Evaluate a spatial snapshot from one Fabric against this Expanse.
Definition Expanse.cpp:7