#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; float cityViewZoom; int baseResourceYieldPerTick; int tileCultureCost; float foodToInhabitantsRatio; int maxProductionQueueSize; int slotLongPressDurationMs; QStringList resourcePriority; QMap baseYields; QMap initialNationalResources; CityConfig() : initialInhabitants(1000), inhabitantsPerPop(100000), initialBorderRadius(1), maxWorkableRadius(3), defaultTileSlots(1), cityViewZoom(4.8f), baseResourceYieldPerTick(500), tileCultureCost(10000), foodToInhabitantsRatio(1.0f), maxProductionQueueSize(6), slotLongPressDurationMs(400), resourcePriority({"voedsel", "arbeid", "goud", "kennis", "cultuur", "geloof"}) { baseYields["voedsel"] = 500; baseYields["arbeid"] = 500; baseYields["kennis"] = 500; baseYields["cultuur"] = 500; baseYields["geloof"] = 500; baseYields["goud"] = 500; initialNationalResources["cultuur"] = 10000; initialNationalResources["kennis"] = 0; initialNationalResources["geloof"] = 0; initialNationalResources["goud"] = 0; } int getBaseYield(const QString &res) const { return baseYields.value(res, baseResourceYieldPerTick); } }; struct ImprovementConfig { QString id; QString name; QString action; QString texturePath; float textureScale; QString textureMapping; // "world" or "hex" QStringList validTerrains; QMap yieldBonus; // e.g. "voedsel": 1000 ImprovementConfig() : id(""), name(""), action(""), texturePath("images/farm.jpeg"), textureScale(0.6f), textureMapping("world") {} }; 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; } const ImprovementConfig* getImprovementConfig(const QString &id) const; const QMap& getAllImprovementConfigs() const { return m_improvementConfigs; } private: TerrainYieldManager(); ~TerrainYieldManager() = default; QMap m_yieldConfigs; QMap m_improvementConfigs; CityConfig m_cityConfig; bool m_loaded; }; #endif // TERRAINYIELDMANAGER_H