#pragma once #include "modules/Materials.h" #include "df/organic_mat_category.h" namespace df { struct creature_raw; struct caste_raw; } /** * Helper class for mapping the various organic mats between their material indices * and their index in the stockpile_settings structures. */ class OrganicMatLookup { // pair of material type and index typedef std::pair FoodMatPair; // map for using type,index pairs to find the food index typedef std::map FoodMatMap; public: struct FoodMat { DFHack::MaterialInfo material; df::creature_raw *creature; df::caste_raw * caste; FoodMat() : material ( -1 ), creature ( 0 ), caste ( 0 ) {} }; static void food_mat_by_idx ( std::ostream &out, df::enums::organic_mat_category::organic_mat_category mat_category, std::vector::size_type food_idx, FoodMat & food_mat ); static std::string food_token_by_idx ( std::ostream &out, df::enums::organic_mat_category::organic_mat_category mat_category, std::vector::size_type idx ); static size_t food_max_size ( df::enums::organic_mat_category::organic_mat_category mat_category ); static void food_build_map ( std::ostream &out ); static int16_t food_idx_by_token ( std::ostream &out, df::enums::organic_mat_category::organic_mat_category mat_category, const std::string & token ); static DFHack::MaterialInfo food_mat_by_token ( std::ostream &out, const std::string & token ); static bool index_built; static std::vector food_index; private: OrganicMatLookup(); };