units
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#ifndef GAMEMANAGER_H
|
||||
#define GAMEMANAGER_H
|
||||
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <QString>
|
||||
#include "player.h"
|
||||
#include "unitconfig.h"
|
||||
#include "unit.h"
|
||||
#include "city.h"
|
||||
#include "matrix2d.h"
|
||||
#include "terrain.h"
|
||||
|
||||
enum class ActionMode {
|
||||
None,
|
||||
Move,
|
||||
Attack,
|
||||
BuildCity
|
||||
};
|
||||
|
||||
struct FloatingText {
|
||||
QString text;
|
||||
QVector3D worldPos;
|
||||
float life; // Remaining seconds
|
||||
float maxLife;
|
||||
QColor color;
|
||||
};
|
||||
|
||||
class GameManager {
|
||||
public:
|
||||
static GameManager& instance();
|
||||
|
||||
void init(const QString &baseDir, Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
|
||||
void update(float deltaTime, Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
|
||||
|
||||
PlayerManager& players() { return m_playerManager; }
|
||||
UnitConfigManager& unitConfigs() { return m_unitConfigManager; }
|
||||
|
||||
const std::vector<std::shared_ptr<Unit>>& getUnits() const { return m_units; }
|
||||
const std::vector<City>& getCities() const { return m_cities; }
|
||||
const std::vector<FloatingText>& getFloatingTexts() const { return m_floatingTexts; }
|
||||
|
||||
Unit* getSelectedUnit();
|
||||
const Unit* getSelectedUnit() const;
|
||||
void selectUnit(int id);
|
||||
void deselectUnit();
|
||||
|
||||
ActionMode currentActionMode() const { return m_actionMode; }
|
||||
void setActionMode(ActionMode mode) { m_actionMode = mode; }
|
||||
|
||||
Unit* getUnitAt(int tx, int ty);
|
||||
Unit* getUnitById(int id);
|
||||
|
||||
void commandMoveSelected(int targetX, int targetY, Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
|
||||
void commandAttack(Unit *target);
|
||||
void commandBuildCitySelected(Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
|
||||
|
||||
float getTickDuration() const { return m_movementTickDuration; }
|
||||
void setTickDuration(float d) { m_movementTickDuration = std::max(1.0f, d); }
|
||||
float getTickTimer() const { return m_tickTimer; }
|
||||
|
||||
float getSimSpeed() const { return m_simSpeedMultiplier; }
|
||||
void setSimSpeed(float s) { m_simSpeedMultiplier = std::max(0.2f, std::min(10.0f, s)); }
|
||||
|
||||
void addFloatingText(const QString &text, const QVector3D &worldPos, const QColor &color, float duration = 1.8f);
|
||||
|
||||
int getNextUnitId() { return ++m_nextUnitId; }
|
||||
int getNextCityId() { return ++m_nextCityId; }
|
||||
|
||||
Unit* spawnUnit(const QString &configId, int playerId, int tileX, int tileY,
|
||||
Matrix2D<TerrainPoint> *mapPoints, int numPoints05);
|
||||
|
||||
private:
|
||||
GameManager();
|
||||
~GameManager() = default;
|
||||
|
||||
PlayerManager m_playerManager;
|
||||
UnitConfigManager m_unitConfigManager;
|
||||
std::vector<std::shared_ptr<Unit>> m_units;
|
||||
std::vector<City> m_cities;
|
||||
std::vector<FloatingText> m_floatingTexts;
|
||||
|
||||
int m_selectedUnitId;
|
||||
ActionMode m_actionMode;
|
||||
|
||||
float m_movementTickDuration; // Default 30.0s
|
||||
float m_tickTimer;
|
||||
float m_simSpeedMultiplier; // 1.0x, 2.0x, etc.
|
||||
|
||||
int m_nextUnitId;
|
||||
int m_nextCityId;
|
||||
bool m_initialized;
|
||||
};
|
||||
|
||||
#endif // GAMEMANAGER_H
|
||||
Reference in New Issue
Block a user