diff --git a/packages/mettagrid/cpp/include/mettagrid/core/grid_object.hpp b/packages/mettagrid/cpp/include/mettagrid/core/grid_object.hpp index de8e1c538e2..109300f6446 100644 --- a/packages/mettagrid/cpp/include/mettagrid/core/grid_object.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/core/grid_object.hpp @@ -1,6 +1,7 @@ #ifndef PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_CORE_GRID_OBJECT_HPP_ #define PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_CORE_GRID_OBJECT_HPP_ +#include #include #include #include @@ -153,8 +154,11 @@ class GridObject : public HasVibe { aoe.unregister_effects(); } - virtual std::vector obs_features() const { - return {}; // Default: no observable features + // observer_agent_id: The agent observing this object (UINT_MAX means no specific observer) + // Used by Assembler to report agent-specific cooldowns + virtual std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const { + (void)observer_agent_id; // Unused in base class + return {}; // Default: no observable features } // Commons support diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/agent.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/agent.hpp index fbb5d2986ae..74d4e463f80 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/agent.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/agent.hpp @@ -65,7 +65,7 @@ class Agent : public GridObject, public HasInventory, public Usable { // Implementation of Usable interface bool onUse(Agent& actor, ActionArg arg) override; - std::vector obs_features() const override; + std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const override; // Set observation encoder for inventory feature ID lookup void set_obs_encoder(const ObservationEncoder* encoder) { diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/assembler.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/assembler.hpp index 37f73d93580..1960b6d9689 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/assembler.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/assembler.hpp @@ -499,7 +499,8 @@ class Assembler : public GridObject, public Usable { return true; } - virtual std::vector obs_features() const override { + virtual std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const override { + (void)observer_agent_id; // Unused for assemblers std::vector features; unsigned int remaining = std::min(cooldown_remaining(), 255u); diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp index fc48bfe3748..d36854c59f5 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp @@ -125,7 +125,8 @@ class Chest : public GridObject, public Usable, public HasInventory { return false; } - virtual std::vector obs_features() const override { + virtual std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const override { + (void)observer_agent_id; // Unused for chests if (!this->obs_encoder) { throw std::runtime_error("Observation encoder not set for chest"); } diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/commons_chest.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/commons_chest.hpp index 50d02b02a5b..cf2422239b9 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/commons_chest.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/commons_chest.hpp @@ -95,7 +95,8 @@ class CommonsChest : public Chest { } // Override obs_features to observe the commons inventory - virtual std::vector obs_features() const override { + virtual std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const override { + (void)observer_agent_id; // Unused for commons_chests if (!this->obs_encoder) { throw std::runtime_error("Observation encoder not set for commons_chest"); } diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/wall.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/wall.hpp index dc7bcdc09bb..5a20783f55b 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/wall.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/wall.hpp @@ -23,7 +23,8 @@ class Wall : public GridObject { GridObject::init(cfg.type_id, cfg.type_name, GridLocation(r, c), cfg.tag_ids, cfg.initial_vibe, cfg.aoe); } - std::vector obs_features() const override { + std::vector obs_features(unsigned int observer_agent_id = UINT_MAX) const override { + (void)observer_agent_id; // Unused for walls std::vector features; features.reserve(1 + tag_ids.size() + (this->vibe != 0 ? 1 : 0)); diff --git a/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp b/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp index f92d007c84e..8ab7d6c041d 100644 --- a/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp +++ b/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp @@ -208,7 +208,8 @@ bool Agent::onUse(Agent& actor, ActionArg arg) { return false; } -std::vector Agent::obs_features() const { +std::vector Agent::obs_features(unsigned int observer_agent_id) const { + (void)observer_agent_id; // Unused for agents if (!this->obs_encoder) { throw std::runtime_error("Observation encoder not set for agent"); }