MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
MayaFlux::Nexus::Agent Class Reference

Object that both perceives nearby entities and acts on MayaFlux objects. More...

#include <Agent.hpp>

+ Collaboration diagram for MayaFlux::Nexus::Agent:

Public Types

using InfluenceFn = std::function< void(const InfluenceContext &)>
 
using PerceptionFn = std::function< void(const PerceptionContext &)>
 

Public Member Functions

 Agent (float query_radius, PerceptionFn perception, InfluenceFn influence)
 Construct with query radius, perception function, and influence function.
 
 Agent (float query_radius, std::string perception_fn_name, PerceptionFn perception, std::string influence_fn_name, InfluenceFn influence)
 Construct with named perception and influence functions.
 
const std::vector< AudioSink > & audio_sinks () const
 
void clear_color ()
 Clear the color, resetting it to an unset state.
 
void clear_influence_target ()
 Disconnect from the current influence target.
 
void clear_position ()
 Clear the position, removing this object from spatial operations.
 
void clear_size ()
 Clear the size, resetting it to an unset state.
 
const std::optional< glm::vec3 > & color () const
 Get the current color, if set.
 
std::shared_ptr< Buffers::RenderProcessorget_render_processor (const std::shared_ptr< Core::Window > &window) const
 
uint32_t id () const
 Return the stable object id assigned by Fabric.
 
const InfluenceFninfluence_fn () const
 The influence function itself.
 
const std::string & influence_fn_name () const
 Identifier assigned to the influence function, empty if anonymous.
 
std::weak_ptr< Buffers::RenderProcessorinfluence_target () const
 Return the current influence target, if set.
 
float intensity () const
 Get the current intensity.
 
void invoke_influence (const InfluenceContext &ctx) const
 Invoke the influence function with the supplied context.
 
void invoke_perception (const PerceptionContext &ctx) const
 Invoke the perception function with the supplied context.
 
const PerceptionFnperception_fn () const
 The perception function itself.
 
const std::string & perception_fn_name () const
 Identifier assigned to the perception function, empty if anonymous.
 
const std::optional< glm::vec3 > & position () const
 Return the current position, if set.
 
float query_radius () const
 Return the query radius.
 
float radius () const
 Get the current radius.
 
void remove_audio_sink (Buffers::BufferManager &mgr, uint32_t channel)
 Unregister the audio sink on channel.
 
void remove_render (Buffers::BufferManager &mgr, const std::shared_ptr< Core::Window > &window)
 Unregister the render sink targeting window.
 
void render (Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config)
 Register a render output targeting window.
 
void render (Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config, std::string fn_name, RenderFn fn)
 Register a render output targeting window with a producer function.
 
const std::vector< RenderSink > & render_sinks () const
 
void set_audio_data (std::span< const double > samples)
 Push samples to all registered audio sinks.
 
void set_color (const glm::vec3 &c)
 Set the color, a general-purpose parameter for influence functions.
 
void set_influence_fn_name (std::string name)
 Set or replace the influence function's identifier.
 
void set_influence_target (std::shared_ptr< Buffers::RenderProcessor > proc)
 Set the render processor to target for GPU-side influence delivery.
 
void set_intensity (float i)
 Set the intensity, a general-purpose parameter for influence functions.
 
void set_perception_fn_name (std::string name)
 Set or replace the perception function's identifier.
 
void set_position (const glm::vec3 &p)
 Set the position, enabling spatial indexing and queries for this object.
 
void set_query_radius (float r)
 Set the query radius.
 
void set_radius (float r)
 Set the radius, a general-purpose parameter for influence functions.
 
void set_size (float s)
 Set the size, a general-purpose parameter for influence functions.
 
void set_vertices (const void *data, size_t byte_count, const Kakshya::VertexLayout &layout)
 Push pre-resolved vertex bytes to all registered render sinks.
 
template<typename T >
void set_vertices (std::span< const T > vertices)
 Push typed vertex data to all registered render sinks.
 
void sink_audio (Buffers::BufferManager &mgr, uint32_t channel)
 Register an audio output on channel.
 
void sink_audio (Buffers::BufferManager &mgr, uint32_t channel, std::function< Kakshya::DataVariant(const InfluenceContext &)> fn, std::string fn_name="")
 Register an audio output on channel with a producer function.
 
const std::optional< float > & size () const
 Get the current size, if set.
 

Private Member Functions

void upload_influence_ubo (const InfluenceContext &ctx) const
 

Private Attributes

std::vector< AudioSinkm_audio_sinks
 
std::optional< glm::vec3 > m_color
 
uint32_t m_id {}
 
InfluenceFn m_influence_fn
 
std::string m_influence_fn_name
 
std::shared_ptr< Buffers::RenderProcessorm_influence_target
 
std::shared_ptr< Buffers::VKBufferm_influence_ubo
 
float m_intensity { 1.0F }
 
PerceptionFn m_perception_fn
 
std::string m_perception_fn_name
 
std::optional< glm::vec3 > m_position
 
float m_query_radius
 
float m_radius { 1.0F }
 
std::vector< RenderSinkm_render_sinks
 
std::optional< float > m_size
 

Friends

class Fabric
 

Detailed Description

Object that both perceives nearby entities and acts on MayaFlux objects.

Constructed with only a query radius, a perception function, and an influence function. Position is optional: call set_position before registering with Fabric if spatial behaviour is required. Without a position the spatial index is not consulted and spatial_results will be empty on each commit.

On each commit the perception function is invoked first, then the influence function. Both receive contexts populated from the same spatial snapshot.

The id is assigned by Fabric::wire and is stable for the object's lifetime.

Definition at line 30 of file Agent.hpp.


The documentation for this class was generated from the following files: