#pragma once #include #include #include #include "maths/util.hpp" #include "Inventory.hpp" class Level; using inventories_map = std::unordered_map>; /// @brief Inventories runtime storage class Inventories { Level& level; inventories_map map; util::PseudoRandom random; public: Inventories(Level& level); ~Inventories(); /// @brief Create new inventory with new id std::shared_ptr create(size_t size); /// @brief Create runtime-only inventory (has negative id) std::shared_ptr createVirtual(size_t size); /// @brief Check and add inventory to the storage void store(const std::shared_ptr& inv); /// @brief Remove inventory from map void remove(int64_t id); /// @brief Get inventory by id (works with both real and virtual) std::shared_ptr get(int64_t id); /// @brief Create inventory non-virtual copy std::shared_ptr clone(int64_t id); const inventories_map& getMap() const; };