#ifndef TERRAINYIELDMANAGER_H #define TERRAINYIELDMANAGER_H #include #include #include #include "terrain.h" #include "matrix2d.h" struct TerrainYieldConfig { QString id; QString name; bool workable; int defaultSlots; QString primaryResource; QMap yields; // "voedsel", "arbeid", "kennis", "cultuur", "geloof", "goud" TerrainYieldConfig() : id(""), name(""), workable(true), defaultSlots(1), primaryResource("voedsel") {} int getYield(const QString &res) const { return yields.value(res, 0); } }; struct CityConfig { int initialInhabitants; int inhabitantsPerPop; int initialBorderRadius; int maxWorkableRadius; int defaultTileSlots; CityConfig() : initialInhabitants(1000), inhabitantsPerPop(100000), initialBorderRadius(1), maxWorkableRadius(3), defaultTileSlots(1) {} }; class TerrainYieldManager { public: static TerrainYieldManager& instance(); bool loadConfigs(const QString &baseDir); QString getTerrainType(int tx, int ty, Matrix2D *mapPoints, int numPoints05) const; const TerrainYieldConfig* getYieldConfig(const QString &terrainType) const; const CityConfig& getCityConfig() const { return m_cityConfig; } private: TerrainYieldManager(); ~TerrainYieldManager() = default; QMap m_yieldConfigs; CityConfig m_cityConfig; bool m_loaded; }; #endif // TERRAINYIELDMANAGER_H