104 lines
3.0 KiB
C++
104 lines
3.0 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;
|
|
|
|
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)
|
|
{
|
|
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
|