Implement default best-yield resource and long-press resource selection for city slots

This commit is contained in:
bart
2026-11-08 21:43:11 +01:00
parent 4b237872eb
commit 43b8b1556d
9 changed files with 492 additions and 52 deletions
+18 -1
View File
@@ -7,6 +7,7 @@
#include "player.h"
#include "unitconfig.h"
#include "buildingconfig.h"
#include "roadconfig.h"
#include "unit.h"
#include "city.h"
#include "matrix2d.h"
@@ -18,7 +19,8 @@ enum class ActionMode {
Move,
Attack,
BuildCity,
BuildFarm
BuildFarm,
BuildRoad
};
struct TileImprovement {
@@ -29,6 +31,15 @@ struct TileImprovement {
QVector3D worldPos;
};
struct TileRoad {
QString roadTypeId = "dirt";
int tileX = 0;
int tileY = 0;
int playerId = 1;
QVector3D worldPos;
unsigned char connectionMask = 0; // bit e (0..5) indicates connected across edge e
};
struct FloatingText {
QString text;
QVector3D worldPos;
@@ -48,6 +59,8 @@ public:
UnitConfigManager& unitConfigs() { return m_unitConfigManager; }
BuildingConfigManager& buildingConfigs() { return m_buildingConfigManager; }
const BuildingConfigManager& buildingConfigs() const { return m_buildingConfigManager; }
RoadConfigManager& roadConfigs() { return m_roadConfigManager; }
const RoadConfigManager& roadConfigs() const { return m_roadConfigManager; }
const std::vector<std::shared_ptr<Unit>>& getUnits() const { return m_units; }
const std::vector<City>& getCities() const { return m_cities; }
@@ -79,6 +92,10 @@ public:
CityYieldSummary calculateCityYields(const City &city, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const;
void processTickYields(Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
QMap<QString, int> getTileYields(int tx, int ty, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const;
int getTileYield(int tx, int ty, const QString &res, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const;
QString getBestTileResource(int tx, int ty, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const;
bool isTileOwned(int tx, int ty, int *outOwnerCityId = nullptr) const;
bool buyTileForCity(int cityId, int tx, int ty);