116 [[nodiscard]] uint32_t
id()
const {
return m_id; }
160 const std::shared_ptr<Core::Window>& window)
const
196 template <
typename T>
199 auto layout = Nodes::vertex_layout_for<T>();
200 layout.vertex_count =
static_cast<uint32_t
>(vertices.size());
202 vertices.size_bytes(), layout);
224 [[nodiscard]]
const std::optional<glm::vec3>&
color()
const {
return m_color; }
233 [[nodiscard]]
const std::optional<float>&
size()
const {
return m_size; }
Token-based multimodal buffer management system for unified data stream processing.
void set_color(const glm::vec3 &c)
Set the color, a general-purpose parameter for influence functions.
float radius() const
Get the current radius.
void set_influence_fn_name(std::string name)
Set or replace the influence function's identifier.
const std::optional< glm::vec3 > & position() const
Return the current position, if set.
Agent(float query_radius, PerceptionFn perception, InfluenceFn influence)
Construct with query radius, perception function, and influence function.
void set_intensity(float i)
Set the intensity, a general-purpose parameter for influence functions.
const std::optional< glm::vec3 > & color() const
Get the current color, if set.
InfluenceFn m_influence_fn
void invoke_influence(const InfluenceContext &ctx) const
Invoke the influence function with the supplied context.
PerceptionFn m_perception_fn
void remove_audio_sink(Buffers::BufferManager &mgr, uint32_t channel)
Unregister the audio sink on channel.
void set_size(float s)
Set the size, a general-purpose parameter for influence functions.
void upload_influence_ubo(const InfluenceContext &ctx) const
uint32_t id() const
Return the stable object id assigned by Fabric.
const std::vector< AudioSink > & audio_sinks() const
std::vector< AudioSink > m_audio_sinks
void clear_position()
Clear the position, removing this object from spatial operations.
void render(Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config)
Register a render output targeting window.
std::optional< float > m_size
std::optional< glm::vec3 > m_position
const InfluenceFn & influence_fn() const
The influence function itself.
void clear_influence_target()
Disconnect from the current influence target.
std::function< void(const PerceptionContext &)> PerceptionFn
float intensity() const
Get the current intensity.
void sink_audio(Buffers::BufferManager &mgr, uint32_t channel)
Register an audio output on channel.
void invoke_perception(const PerceptionContext &ctx) const
Invoke the perception function with the supplied context.
const std::string & influence_fn_name() const
Identifier assigned to the influence function, empty if anonymous.
const std::optional< float > & size() const
Get the current size, if set.
void clear_size()
Clear the size, resetting it to an unset state.
std::shared_ptr< Buffers::RenderProcessor > m_influence_target
void set_audio_data(std::span< const double > samples)
Push samples to all registered audio sinks.
std::optional< glm::vec3 > m_color
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.
void set_influence_target(std::shared_ptr< Buffers::RenderProcessor > proc)
Set the render processor to target for GPU-side influence delivery.
void clear_color()
Clear the color, resetting it to an unset state.
void set_vertices(const void *data, size_t byte_count, const Kakshya::VertexLayout &layout)
Push pre-resolved vertex bytes to all registered render sinks.
std::shared_ptr< Buffers::RenderProcessor > get_render_processor(const std::shared_ptr< Core::Window > &window) const
void set_query_radius(float r)
Set the query radius.
std::string m_perception_fn_name
void set_radius(float r)
Set the radius, a general-purpose parameter for influence functions.
void set_perception_fn_name(std::string name)
Set or replace the perception function's identifier.
void remove_render(Buffers::BufferManager &mgr, const std::shared_ptr< Core::Window > &window)
Unregister the render sink targeting window.
const std::string & perception_fn_name() const
Identifier assigned to the perception function, empty if anonymous.
std::weak_ptr< Buffers::RenderProcessor > influence_target() const
Return the current influence target, if set.
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.
std::string m_influence_fn_name
const PerceptionFn & perception_fn() const
The perception function itself.
std::vector< RenderSink > m_render_sinks
float query_radius() const
Return the query radius.
void set_vertices(std::span< const T > vertices)
Push typed vertex data to all registered render sinks.
void set_position(const glm::vec3 &p)
Set the position, enabling spatial indexing and queries for this object.
std::function< void(const InfluenceContext &)> InfluenceFn
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.
std::shared_ptr< Buffers::VKBuffer > m_influence_ubo
const std::vector< RenderSink > & render_sinks() const
Object that both perceives nearby entities and acts on MayaFlux objects.
Orchestrates spatial indexing and scheduling for Nexus objects.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
void remove_render_sink(std::vector< RenderSink > &sinks, Buffers::BufferManager &mgr, const std::shared_ptr< Core::Window > &window)
Unregister and destroy the render sink targeting window.
void add_audio_sink(std::vector< AudioSink > &sinks, Buffers::BufferManager &mgr, uint32_t channel, std::function< Kakshya::DataVariant(const InfluenceContext &)> fn, std::string fn_name)
Create and register an audio sink on channel.
void dispatch_audio_sinks(std::vector< AudioSink > &sinks, const InfluenceContext &ctx)
For each sink that has a producer fn, call it and push the result.
void add_render_sink(std::vector< RenderSink > &sinks, Buffers::BufferManager &mgr, const Portal::Graphics::RenderConfig &config, RenderFn fn, std::string fn_name, const std::optional< glm::vec3 > &initial_position)
Create and register a render sink targeting window.
std::function< void(const InfluenceContext &)> RenderFn
void push_audio_data(std::vector< AudioSink > &sinks, std::span< const double > samples)
Push samples to every audio sink in sinks.
void remove_audio_sink(std::vector< AudioSink > &sinks, Buffers::BufferManager &mgr, uint32_t channel)
Unregister and destroy the audio sink on channel.
void push_vertices(std::vector< RenderSink > &sinks, const void *data, size_t byte_count, const Kakshya::VertexLayout &layout)
Push pre-resolved vertex bytes to every render sink.
void dispatch_render_sinks(std::vector< RenderSink > &sinks, const InfluenceContext &ctx)
For each sink that has a producer fn, call it and push the result.
Complete description of vertex data layout in a buffer.
Data passed to an Emitter or Agent influence function on each commit.
Data passed to a Sensor or Agent perception function on each commit.
std::shared_ptr< Core::Window > window
Holds the plumbing for one graphics output registered from a Nexus object.
Unified rendering configuration for graphics buffers.