54 , m_fn_name(
std::move(fn_name))
60 [[nodiscard]]
const std::string&
fn_name()
const {
return m_fn_name; }
71 [[nodiscard]]
const std::optional<glm::vec3>&
position()
const {
return m_position; }
87 [[nodiscard]]
float query_radius()
const {
return m_query_radius; }
98 [[nodiscard]] uint32_t
id()
const {
return m_id; }
109 template <
typename T>
112 auto perception = std::make_shared<Perception<T>>(std::move(source));
113 perception->add_target(std::move(target));
114 m_perception = [perception](
const PerceptionContext& ctx) { perception->invoke(ctx); };
Orchestrates spatial indexing and scheduling for Nexus objects.
std::function< void(const T &)> Target
std::function< T(const PerceptionContext &)> Source
void invoke(const PerceptionContext &ctx) const
Invoke the perception function with the supplied context.
float query_radius() const
Return the query radius.
uint32_t id() const
Return the stable object id assigned by Fabric.
const PerceptionFn & fn() const
The perception function itself.
std::optional< glm::vec3 > m_position
void set_query_radius(float r)
Set the query radius.
void set_position(const glm::vec3 &p)
Set the position, enabling spatial queries for this object.
const std::optional< glm::vec3 > & position() const
Return the current position, if set.
Sensor(float query_radius, std::string fn_name, PerceptionFn fn)
Construct with a query radius and a named perception function.
std::function< void(const PerceptionContext &)> PerceptionFn
const std::string & fn_name() const
Identifier assigned to the perception function, empty if anonymous.
void clear_position()
Clear the position, disabling spatial queries for this object.
void clear_perception()
Remove the source set with set_perception().
void set_perception(typename Perception< T >::Source source, typename Perception< T >::Target target)
Set the one source of a perception of any type.
void set_fn_name(std::string name)
Set or replace the perception function's identifier.
Sensor(float query_radius=1.0F)
Construct with only a query radius, for a Sensor whose behaviour comes from a typed perception.
Sensor(float query_radius, PerceptionFn fn)
Construct with a query radius and a perception function.
PerceptionFn m_perception
Object that reacts to nearby entities when committed.
Data passed to a Sensor or Agent perception function on each commit.