MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ fire() [1/2]

void MayaFlux::Nexus::Fabric::fire ( const Registration &  reg) const
private

Definition at line 278 of file Fabric.cpp.

279{
280 std::visit([&](const auto& ptr) {
281 using T = std::decay_t<decltype(*ptr)>;
282
283 if constexpr (std::is_same_v<T, Emitter>) {
284 ptr->follow_attachment();
285 InfluenceContext ctx;
286 if (ptr->m_position.has_value()) {
287 ctx.position = *ptr->m_position;
288 }
289 ctx.intensity = ptr->m_intensity;
290 ctx.radius = ptr->m_radius;
291 ctx.color = ptr->m_color;
292 ctx.size = ptr->m_size;
293 ctx.cursor_pos = reg.pending_cursor;
294 ptr->invoke(ctx);
295
296 } else if constexpr (std::is_same_v<T, Sensor>) {
297 PerceptionContext ctx;
298 ctx.radius = ptr->m_query_radius;
299 if (ptr->m_position.has_value()) {
300 ctx.position = *ptr->m_position;
301 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
302 ctx.spatial_results = std::span(results);
303 }
304 ptr->invoke(ctx);
305
306 } else if constexpr (std::is_same_v<T, Agent>) {
307 ptr->follow_attachment();
308 if (ptr->m_position.has_value()) {
309 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
310 PerceptionContext pctx;
311 pctx.position = *ptr->m_position;
312 pctx.radius = ptr->m_query_radius;
313 pctx.orientation = ptr->m_orientation;
314 pctx.spatial_results = std::span(results);
315 ptr->invoke_perception(pctx);
316
317 InfluenceContext ictx;
318 ictx.position = *ptr->m_position;
319 ictx.orientation = ptr->m_orientation;
320 ictx.intensity = ptr->m_intensity;
321 ictx.radius = ptr->m_radius;
322 ictx.color = ptr->m_color;
323 ictx.size = ptr->m_size;
324 ictx.cursor_pos = reg.pending_cursor;
325 ptr->invoke_influence(ictx);
326 } else {
327 PerceptionContext pctx;
328 pctx.radius = ptr->m_query_radius;
329 pctx.orientation = ptr->m_orientation;
330 ptr->invoke_perception(pctx);
331 InfluenceContext ictx;
332 ictx.orientation = ptr->m_orientation;
333 ictx.intensity = ptr->m_intensity;
334 ictx.radius = ptr->m_radius;
335 ictx.color = ptr->m_color;
336 ictx.size = ptr->m_size;
337 ptr->invoke_influence(ictx);
338 }
339 }
340 },
341 reg.member);
342}
const uint8_t * ptr
std::unique_ptr< Kinesis::SpatialIndex3D > m_index
Definition Fabric.hpp:292

References MayaFlux::Nexus::InfluenceContext::color, MayaFlux::Nexus::InfluenceContext::cursor_pos, MayaFlux::Nexus::InfluenceContext::intensity, m_index, MayaFlux::Nexus::Fabric::Registration::member, MayaFlux::Nexus::InfluenceContext::orientation, MayaFlux::Nexus::PerceptionContext::orientation, MayaFlux::Nexus::Fabric::Registration::pending_cursor, MayaFlux::Nexus::InfluenceContext::position, MayaFlux::Nexus::PerceptionContext::position, ptr, MayaFlux::Nexus::InfluenceContext::radius, MayaFlux::Nexus::PerceptionContext::radius, MayaFlux::Nexus::InfluenceContext::size, and MayaFlux::Nexus::PerceptionContext::spatial_results.