From f4f2626f84f17df774a53622bbb894cc879c52d9 Mon Sep 17 00:00:00 2001 From: David Bloomin Date: Sat, 13 Dec 2025 22:14:24 -0800 Subject: [PATCH] cp --- .../mettagrid/cpp/include/mettagrid/objects/chest.hpp | 4 +++- .../mettagrid/cpp/include/mettagrid/objects/inventory.hpp | 1 + packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp | 2 +- packages/mettagrid/docs/simulator_api.md | 8 +++++--- .../python/src/mettagrid/config/mettagrid_c_config.py | 4 +--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp index 34e58c997c6..6ef1ca77d55 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/chest.hpp @@ -1,6 +1,7 @@ #ifndef PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_OBJECTS_CHEST_HPP_ #define PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_OBJECTS_CHEST_HPP_ +#include #include #include #include @@ -125,7 +126,8 @@ class Chest : public GridObject, public Usable, public HasInventory { throw std::runtime_error("Observation encoder not set for chest"); } std::vector features; - features.reserve(1 + this->inventory.get().size() + this->tag_ids.size() + 3); + // Up to 2 tokens per inventory item (low byte + optional high byte) + features.reserve(1 + this->inventory.get().size() * 2 + this->tag_ids.size() + (this->vibe != 0 ? 1 : 0)); if (this->vibe != 0) features.push_back({ObservationFeature::Vibe, static_cast(this->vibe)}); diff --git a/packages/mettagrid/cpp/include/mettagrid/objects/inventory.hpp b/packages/mettagrid/cpp/include/mettagrid/objects/inventory.hpp index 910772b60cd..9eb0552b577 100644 --- a/packages/mettagrid/cpp/include/mettagrid/objects/inventory.hpp +++ b/packages/mettagrid/cpp/include/mettagrid/objects/inventory.hpp @@ -1,6 +1,7 @@ #ifndef PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_OBJECTS_INVENTORY_HPP_ #define PACKAGES_METTAGRID_CPP_INCLUDE_METTAGRID_OBJECTS_INVENTORY_HPP_ +#include #include #include #include diff --git a/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp b/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp index 886175b3b6e..dd2736640b6 100644 --- a/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp +++ b/packages/mettagrid/cpp/src/mettagrid/objects/agent.cpp @@ -209,7 +209,7 @@ std::vector Agent::obs_features() const { if (!this->obs_encoder) { throw std::runtime_error("Observation encoder not set for agent"); } - const size_t num_tokens = this->inventory.get().size() + this->tag_ids.size() + 5; + const size_t num_tokens = this->inventory.get().size() * 2 + this->tag_ids.size() + 5; std::vector features; features.reserve(num_tokens); diff --git a/packages/mettagrid/docs/simulator_api.md b/packages/mettagrid/docs/simulator_api.md index b244aa54d9a..a6c6ddefa1a 100644 --- a/packages/mettagrid/docs/simulator_api.md +++ b/packages/mettagrid/docs/simulator_api.md @@ -265,9 +265,11 @@ obs = agent.observation for token in obs.tokens: if token.feature.name == "object_type": print(f"Object at ({token.col()}, {token.row()}): {token.value}") - elif token.feature.name.startswith("inv:"): - resource = token.feature.name[4:] # Remove "inv:" prefix - print(f"Inventory {resource}: {token.value}") + +# For inventory, use the agent.inventory property which handles the encoding +inventory = agent.inventory +for resource, amount in inventory.items(): + print(f"Inventory {resource}: {amount}") ``` ## Event Handling diff --git a/packages/mettagrid/python/src/mettagrid/config/mettagrid_c_config.py b/packages/mettagrid/python/src/mettagrid/config/mettagrid_c_config.py index 6d84183d6fa..35783878836 100644 --- a/packages/mettagrid/python/src/mettagrid/config/mettagrid_c_config.py +++ b/packages/mettagrid/python/src/mettagrid/config/mettagrid_c_config.py @@ -348,9 +348,7 @@ def convert_to_cpp_game_config(mettagrid_config: dict | GameConfig): if name in resource_name_to_id } limit_defs.append( - CppLimitDef( - resources=resource_ids, base_limit=min(resource_limit.limit, 255), modifiers=modifier_ids - ) + CppLimitDef(resources=resource_ids, base_limit=resource_limit.limit, modifiers=modifier_ids) ) inventory_config = CppInventoryConfig()