#ifndef UNIT_H #define UNIT_H #include #include #include #include #include "unitconfig.h" #include "terrain.h" #include "matrix2d.h" enum class UnitState { Idle, Moving, Attacking, Building }; class Unit { public: Unit(int uId, int pId, const UnitConfig &cfg, int startX, int startY, float groundZ); int id; int playerId; UnitConfig config; int tileX; int tileY; QVector3D worldPos; float health; float maxHealth; int buildCharges; UnitState state; // Movement Path std::vector> path; size_t pathIndex; float moveProgress; // 0.0 to 1.0 between hexes int targetTileX; int targetTileY; // Attack cooldown / flash float attackFlashTimer; // Building State float buildProgress; // 0.0 to 1.0 float buildDuration; QString buildingImprovementId; void update(float deltaTime, float tickDuration, float simSpeedMultiplier, Matrix2D *mapPoints, int numPoints05); void setPath(const std::vector> &newPath); void stopMovement(); void startBuilding(const QString &impId, float duration); void cancelBuilding(); bool isBuilding() const { return state == UnitState::Building; } bool canAttack(const Unit &other) const; void performAttack(Unit &target); void takeDamage(float damage); bool isDead() const { return health <= 0.001f; } bool isNaval() const { return config.isNaval(); } bool isLand() const { return config.isLand(); } static float getTerrainHeight(float worldX, float worldY, Matrix2D *mapPoints, int numPoints05); }; #endif // UNIT_H