Merge branch 'main' into session/builder-roads
This commit is contained in:
+67
-25
@@ -76,10 +76,8 @@ void GameManager::init(const QString &baseDir, Matrix2D<TerrainPoint> *mapPoints
|
||||
City initialCity(cId, 1, "Roma", 35, 17, QVector3D(w.x(), w.y(), gz),
|
||||
cCfg.initialInhabitants, cCfg.inhabitantsPerPop, cCfg.initialBorderRadius);
|
||||
|
||||
// Assign initial 1 pop to work the city center tile
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(35, 17, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
QString defRes = yCfg ? yCfg->primaryResource : "voedsel";
|
||||
// Assign initial 1 pop to work the city center tile with best yield resource
|
||||
QString defRes = getBestTileResource(35, 17, mapPoints, numPoints05);
|
||||
initialCity.assignWorker(35, 17, defRes);
|
||||
|
||||
m_cities.push_back(initialCity);
|
||||
@@ -251,6 +249,67 @@ void GameManager::exitCityView()
|
||||
m_activeCityViewId = -1;
|
||||
}
|
||||
|
||||
QMap<QString, int> GameManager::getTileYields(int tx, int ty, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const
|
||||
{
|
||||
QMap<QString, int> yields;
|
||||
const CityConfig &cCfg = TerrainYieldManager::instance().getCityConfig();
|
||||
QStringList resources = cCfg.resourcePriority;
|
||||
if (resources.isEmpty()) {
|
||||
resources = {"voedsel", "arbeid", "goud", "kennis", "cultuur", "geloof"};
|
||||
}
|
||||
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(tx, ty, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
const TileImprovement *imp = getImprovementAt(tx, ty);
|
||||
const ImprovementConfig *iCfg = imp ? TerrainYieldManager::instance().getImprovementConfig(imp->improvementId) : nullptr;
|
||||
|
||||
for (const QString &res : resources) {
|
||||
int amount = yCfg ? yCfg->getYield(res) : 0;
|
||||
if (iCfg && iCfg->yieldBonus.contains(res)) {
|
||||
amount += iCfg->yieldBonus.value(res, 0);
|
||||
}
|
||||
yields[res] = amount;
|
||||
}
|
||||
return yields;
|
||||
}
|
||||
|
||||
int GameManager::getTileYield(int tx, int ty, const QString &res, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const
|
||||
{
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(tx, ty, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
int amount = yCfg ? yCfg->getYield(res) : 0;
|
||||
const TileImprovement *imp = getImprovementAt(tx, ty);
|
||||
if (imp) {
|
||||
const ImprovementConfig *iCfg = TerrainYieldManager::instance().getImprovementConfig(imp->improvementId);
|
||||
if (iCfg && iCfg->yieldBonus.contains(res)) {
|
||||
amount += iCfg->yieldBonus.value(res, 0);
|
||||
}
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
QString GameManager::getBestTileResource(int tx, int ty, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const
|
||||
{
|
||||
const CityConfig &cCfg = TerrainYieldManager::instance().getCityConfig();
|
||||
QStringList priority = cCfg.resourcePriority;
|
||||
if (priority.isEmpty()) {
|
||||
priority = {"voedsel", "arbeid", "goud", "kennis", "cultuur", "geloof"};
|
||||
}
|
||||
|
||||
QMap<QString, int> yields = getTileYields(tx, ty, mapPoints, numPoints05);
|
||||
QString bestRes = priority.first();
|
||||
int maxYield = -1;
|
||||
|
||||
for (const QString &res : priority) {
|
||||
int y = yields.value(res, 0);
|
||||
if (y > maxYield) {
|
||||
maxYield = y;
|
||||
bestRes = res;
|
||||
}
|
||||
}
|
||||
return bestRes;
|
||||
}
|
||||
|
||||
CityYieldSummary GameManager::calculateCityYields(const City &city, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const
|
||||
{
|
||||
CityYieldSummary summary;
|
||||
@@ -270,20 +329,7 @@ CityYieldSummary GameManager::calculateCityYields(const City &city, Matrix2D<Ter
|
||||
int ty = pair.first.second;
|
||||
QString assignedRes = pair.second;
|
||||
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(tx, ty, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
if (!yCfg) continue;
|
||||
|
||||
int amount = yCfg->getYield(assignedRes);
|
||||
|
||||
// Add bonus from tile improvements (e.g. farm bonus)
|
||||
const TileImprovement *imp = getImprovementAt(tx, ty);
|
||||
if (imp) {
|
||||
const ImprovementConfig *iCfg = TerrainYieldManager::instance().getImprovementConfig(imp->improvementId);
|
||||
if (iCfg && iCfg->yieldBonus.contains(assignedRes)) {
|
||||
amount += iCfg->yieldBonus.value(assignedRes, 0);
|
||||
}
|
||||
}
|
||||
int amount = getTileYield(tx, ty, assignedRes, mapPoints, numPoints05);
|
||||
|
||||
if (assignedRes == "voedsel") summary.food += amount;
|
||||
else if (assignedRes == "arbeid") summary.labor += amount;
|
||||
@@ -636,10 +682,8 @@ void GameManager::commandBuildCitySelected(Matrix2D<TerrainPoint> *mapPoints, in
|
||||
QVector3D(w.x(), w.y(), gz),
|
||||
cCfg.initialInhabitants, cCfg.inhabitantsPerPop, cCfg.initialBorderRadius);
|
||||
|
||||
// Assign initial worker to center tile
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(tx, ty, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
QString defRes = yCfg ? yCfg->primaryResource : "voedsel";
|
||||
// Assign initial worker to center tile with best yield resource
|
||||
QString defRes = getBestTileResource(tx, ty, mapPoints, numPoints05);
|
||||
newCity.assignWorker(tx, ty, defRes);
|
||||
|
||||
m_cities.push_back(newCity);
|
||||
@@ -1084,9 +1128,7 @@ void GameManager::processUnitActionQueue(Unit &unit, Matrix2D<TerrainPoint> *map
|
||||
QVector3D(w.x(), w.y(), gz),
|
||||
cCfg.initialInhabitants, cCfg.inhabitantsPerPop, cCfg.initialBorderRadius);
|
||||
|
||||
QString tType = TerrainYieldManager::instance().getTerrainType(tx, ty, mapPoints, numPoints05);
|
||||
const TerrainYieldConfig *yCfg = TerrainYieldManager::instance().getYieldConfig(tType);
|
||||
QString defRes = yCfg ? yCfg->primaryResource : "voedsel";
|
||||
QString defRes = getBestTileResource(tx, ty, mapPoints, numPoints05);
|
||||
newCity.assignWorker(tx, ty, defRes);
|
||||
|
||||
m_cities.push_back(newCity);
|
||||
|
||||
Reference in New Issue
Block a user