MayaFlux 0.4.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 255 of file Fabric.cpp.

256{
257 std::visit([&](const auto& ptr) {
258 using T = std::decay_t<decltype(*ptr)>;
259
260 if constexpr (std::is_same_v<T, Emitter>) {
261 InfluenceContext ctx;
262 if (ptr->m_position.has_value()) {
263 ctx.position = *ptr->m_position;
264 }
265 ctx.intensity = ptr->m_intensity;
266 ctx.radius = ptr->m_radius;
267 ctx.color = ptr->m_color;
268 ctx.size = ptr->m_size;
269 ctx.render_proc = ptr->m_influence_target;
270 ctx.cursor_pos = reg.pending_cursor;
271 ptr->invoke(ctx);
272
273 } else if constexpr (std::is_same_v<T, Sensor>) {
274 PerceptionContext ctx;
275 if (ptr->m_position.has_value()) {
276 ctx.position = *ptr->m_position;
277 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
278 ctx.spatial_results = std::span(results);
279 }
280 ptr->invoke(ctx);
281
282 } else if constexpr (std::is_same_v<T, Agent>) {
283 if (ptr->m_position.has_value()) {
284 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
285 PerceptionContext pctx;
286 pctx.position = *ptr->m_position;
287 pctx.spatial_results = std::span(results);
288 ptr->invoke_perception(pctx);
289
290 InfluenceContext ictx;
291 ictx.position = *ptr->m_position;
292 ictx.intensity = ptr->m_intensity;
293 ictx.radius = ptr->m_radius;
294 ictx.color = ptr->m_color;
295 ictx.size = ptr->m_size;
296 ictx.cursor_pos = reg.pending_cursor;
297 ptr->invoke_influence(ictx);
298 } else {
299 ptr->invoke_perception(PerceptionContext {});
300 InfluenceContext ictx;
301 ictx.intensity = ptr->m_intensity;
302 ictx.radius = ptr->m_radius;
303 ictx.color = ptr->m_color;
304 ictx.size = ptr->m_size;
305 ptr->invoke_influence(ictx);
306 }
307 }
308 },
309 reg.member);
310}
const uint8_t * ptr
std::unique_ptr< Kinesis::SpatialIndex3D > m_index
Definition Fabric.hpp:291

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