#pragma once #include #include struct GameConfig; struct RecipeDef; class Simulation; // Where an item comes from, as far as the player has discovered (REQ-UI-ITEM-TOOLTIP). enum class ItemOrigin { Produced, // at least one recipe the player can run makes it Undiscovered, // recipes make it, but none of them is available yet Salvaged, // no recipe makes it at all -- scrap, which comes from debris }; struct ItemProduction { ItemOrigin origin = ItemOrigin::Salvaged; // The available producers, in config order. Empty unless origin is Produced. std::vector recipes; }; // Every way the player can currently produce the given item, for the tooltip that // explains an item chip (REQ-UI-ITEM-TOOLTIP). // // What counts as available differs by building type, because only Miner and Assembler // recipes are individually unlocked (REQ-LOCK-UI-RECIPE): those are filtered by the // unlock state, while a Smelter's or Reprocessing Plant's recipes // (REQ-BLD-SMELTER, REQ-BLD-REPROCESSING) are filtered by whether their building is // unlocked yet (REQ-LOCK-BUILDING) -- there is no sense in naming a path through a // plant the player cannot place. ItemProduction findItemProduction(const std::string& itemId, const Simulation& sim, const GameConfig& config);