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 235 of file Fabric.cpp.

236{
237 std::visit([&](const auto& ptr) {
238 using T = std::decay_t<decltype(*ptr)>;
239
240 if constexpr (std::is_same_v<T, Emitter>) {
241 InfluenceContext ctx;
242 if (ptr->m_position.has_value()) {
243 ctx.position = *ptr->m_position;
244 }
245 ctx.intensity = ptr->m_intensity;
246 ctx.radius = ptr->m_radius;
247 ctx.color = ptr->m_color;
248 ctx.size = ptr->m_size;
249 ctx.render_proc = ptr->m_influence_target;
250 ptr->invoke(ctx);
251
252 } else if constexpr (std::is_same_v<T, Sensor>) {
253 PerceptionContext ctx;
254 if (ptr->m_position.has_value()) {
255 ctx.position = *ptr->m_position;
256 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
257 ctx.spatial_results = std::span(results);
258 }
259 ptr->invoke(ctx);
260
261 } else if constexpr (std::is_same_v<T, Agent>) {
262 if (ptr->m_position.has_value()) {
263 auto results = m_index->within_radius(*ptr->m_position, ptr->m_query_radius);
264 PerceptionContext pctx;
265 pctx.position = *ptr->m_position;
266 pctx.spatial_results = std::span(results);
267 ptr->invoke_perception(pctx);
268
269 InfluenceContext ictx;
270 ictx.position = *ptr->m_position;
271 ictx.intensity = ptr->m_intensity;
272 ictx.radius = ptr->m_radius;
273 ictx.color = ptr->m_color;
274 ictx.size = ptr->m_size;
275 ictx.render_proc = ptr->m_influence_target;
276 ptr->invoke_influence(ictx);
277 } else {
278 ptr->invoke_perception(PerceptionContext {});
279 InfluenceContext ictx;
280 ictx.intensity = ptr->m_intensity;
281 ictx.radius = ptr->m_radius;
282 ictx.color = ptr->m_color;
283 ictx.size = ptr->m_size;
284 ictx.render_proc = ptr->m_influence_target;
285 ptr->invoke_influence(ictx);
286 }
287 }
288 },
289 reg.member);
290}
std::unique_ptr< Kinesis::SpatialIndex3D > m_index
Definition Fabric.hpp:224

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