|
MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
|
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::RenderProcessor > | get_render_processor (const std::shared_ptr< Core::Window > &window) const |
| uint32_t | id () const |
| Return the stable object id assigned by Fabric. | |
| const InfluenceFn & | influence_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::RenderProcessor > | influence_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 PerceptionFn & | perception_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< AudioSink > | m_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::RenderProcessor > | m_influence_target |
| std::shared_ptr< Buffers::VKBuffer > | m_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< RenderSink > | m_render_sinks |
| std::optional< float > | m_size |
Friends | |
| class | Fabric |
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.