#ifndef UNITCONFIG_H #define UNITCONFIG_H #include #include #include #include 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& getAllConfigs() const { return m_configs; } private: QMap m_configs; }; #endif // UNITCONFIG_H