Files
Ascent-of-Man/terrainyieldmanager.h

111 lines
3.2 KiB
C++

#ifndef TERRAINYIELDMANAGER_H
#define TERRAINYIELDMANAGER_H
#include <QString>
#include <QMap>
#include <vector>
#include "terrain.h"
#include "matrix2d.h"
struct TerrainYieldConfig {
QString id;
QString name;
bool workable;
int defaultSlots;
QString primaryResource;
QMap<QString, int> 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<QString, int> baseYields;
QMap<QString, int> 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<QString, int> 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<TerrainPoint> *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<QString, ImprovementConfig>& getAllImprovementConfigs() const { return m_improvementConfigs; }
private:
TerrainYieldManager();
~TerrainYieldManager() = default;
QMap<QString, TerrainYieldConfig> m_yieldConfigs;
QMap<QString, ImprovementConfig> m_improvementConfigs;
CityConfig m_cityConfig;
bool m_loaded;
};
#endif // TERRAINYIELDMANAGER_H