Files
Ascent-of-Man/unitconfig.h
T
2026-11-08 15:42:54 +01:00

69 lines
2.0 KiB
C++

#ifndef UNITCONFIG_H
#define UNITCONFIG_H
#include <QString>
#include <QStringList>
#include <QMap>
#include <vector>
enum class UnitCategory {
Military, // militair
Reconnaissance, // verkenning
Builder // bouwen
};
inline QString unitCategoryToString(UnitCategory cat) {
switch (cat) {
case UnitCategory::Military: return "Militair";
case UnitCategory::Reconnaissance: return "Verkenning";
case UnitCategory::Builder: return "Bouwen";
}
return "Onbekend";
}
inline UnitCategory stringToUnitCategory(const QString &str) {
QString s = str.trimmed().toLower();
if (s == "militair" || s == "military") return UnitCategory::Military;
if (s == "verkenning" || s == "recon" || s == "scout") return UnitCategory::Reconnaissance;
if (s == "bouwen" || s == "builder" || s == "civilian") return UnitCategory::Builder;
return UnitCategory::Builder;
}
struct UnitConfig {
QString id;
QString name;
UnitCategory category;
int health;
float movementSpeed;
int cost;
int attackDamage;
int attackRange; // 1 for melee, >1 for ranged
QString iconPath;
QStringList actions;
UnitConfig()
: id(""), name(""), category(UnitCategory::Builder), health(100),
movementSpeed(2.0f), cost(10), attackDamage(0), attackRange(1),
iconPath("") {}
bool isRanged() const { return attackRange > 1; }
bool isMilitary() const { return category == UnitCategory::Military; }
bool canAttack() const { return actions.contains("aanvallen") || isMilitary(); }
bool canBuildCity() const { return actions.contains("steden_bouwen") || actions.contains("build_city"); }
};
class UnitConfigManager {
public:
UnitConfigManager();
bool loadFromDirectory(const QString &dirPath);
bool loadConfigFile(const QString &filePath);
const UnitConfig* getConfig(const QString &id) const;
const QMap<QString, UnitConfig>& getAllConfigs() const { return m_configs; }
private:
QMap<QString, UnitConfig> m_configs;
};
#endif // UNITCONFIG_H