Implement technology tree, research queue by least remaining work, and unit/building tech availability & obsolescence

This commit is contained in:
2026-11-09 20:28:53 +01:00
parent d4bd9f4711
commit d266715418
30 changed files with 1809 additions and 45 deletions
+22
View File
@@ -14,6 +14,7 @@
#include "terrain.h"
#include "terrainyieldmanager.h"
#include "actionneededmanager.h"
#include "techconfig.h"
enum class ActionMode {
None,
@@ -48,13 +49,32 @@ public:
void update(float deltaTime, Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
PlayerManager& players() { return m_playerManager; }
const PlayerManager& players() const { return m_playerManager; }
UnitConfigManager& unitConfigs() { return m_unitConfigManager; }
const UnitConfigManager& unitConfigs() const { 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; }
ActionNeededManager& actionNeededManager() { return m_actionNeededManager; }
const ActionNeededManager& actionNeededManager() const { return m_actionNeededManager; }
TechTreeManager& techTree() { return m_techTreeManager; }
const TechTreeManager& techTree() const { return m_techTreeManager; }
// Tech Tree View & Research System
bool isTechTreeOpen() const { return m_isTechTreeOpen; }
void openTechTree();
void closeTechTree();
void toggleTechTree();
int calculatePlayerSciencePerTick(int playerId, Matrix2D<TerrainPoint> *mapPoints, int numPoints05) const;
int getTechRemainingScience(const Player &player, const QString &techId) const;
bool selectTechForPlayer(int playerId, const QString &targetTechId, bool appendToQueue = false);
void removeTechFromPlayerQueue(int playerId, const QString &techId);
void clearPlayerResearchQueue(int playerId);
void advancePlayerResearch(Player &player, int scienceGenerated);
QStringList getTechUnlocks(const QString &techId) const;
QStringList getTechObsoletes(const QString &techId) const;
const std::vector<std::shared_ptr<Unit>>& getUnits() const { return m_units; }
const std::vector<City>& getCities() const { return m_cities; }
@@ -149,6 +169,7 @@ private:
BuildingConfigManager m_buildingConfigManager;
RoadConfigManager m_roadConfigManager;
ActionNeededManager m_actionNeededManager;
TechTreeManager m_techTreeManager;
std::vector<std::shared_ptr<Unit>> m_units;
std::vector<City> m_cities;
std::vector<FloatingText> m_floatingTexts;
@@ -157,6 +178,7 @@ private:
int m_selectedUnitId;
int m_activeCityViewId;
bool m_isTechTreeOpen;
ActionMode m_actionMode;
float m_movementTickDuration; // Default 30.0s