39 enum class Kind : uint8_t {
54 float cell_size = 1.0F);
66 [[nodiscard]]
const std::string&
name()
const {
return m_name; }
71 void set_name(std::string name) { m_name = std::move(name); }
82 [[nodiscard]]
Wiring wire(std::shared_ptr<Emitter> emitter);
89 [[nodiscard]]
Wiring wire(std::shared_ptr<Sensor> sensor);
96 [[nodiscard]]
Wiring wire(std::shared_ptr<Agent> agent);
102 void remove(uint32_t
id);
121 void fire(uint32_t
id);
133 [[nodiscard]] std::vector<Kinesis::QueryResult> within_radius(
134 const glm::vec3& center,
float radius)
const;
142 [[nodiscard]] std::vector<Kinesis::QueryResult> k_nearest(
143 const glm::vec3& center, uint32_t k)
const;
151 [[nodiscard]]
const Wiring* wiring_for(uint32_t
id)
const;
156 [[nodiscard]] std::vector<uint32_t> all_ids()
const;
162 [[nodiscard]] Kind
kind(uint32_t
id)
const;
168 [[nodiscard]] std::shared_ptr<Emitter> get_emitter(uint32_t
id)
const;
174 [[nodiscard]] std::shared_ptr<Sensor> get_sensor(uint32_t
id)
const;
180 [[nodiscard]] std::shared_ptr<Agent> get_agent(uint32_t
id)
const;
190 [[nodiscard]] std::shared_ptr<Emitter::InfluenceFn> resolve_influence_fn(std::string_view name)
const;
196 [[nodiscard]] std::shared_ptr<Sensor::PerceptionFn> resolve_perception_fn(std::string_view name)
const;
204 std::shared_ptr<Emitter>,
205 std::shared_ptr<Sensor>,
206 std::shared_ptr<Agent>>;
213 bool commit_driven {
false };
218 uint32_t assign_id(
Member& m);
224 std::unique_ptr<Kinesis::SpatialIndex3D>
m_index;
226 uint32_t m_next_id { 1 };
228 std::unordered_map<std::string, std::shared_ptr<Emitter::InfluenceFn>>
m_influence_fns;