Files
cursebreaker-parser/include/configs/achievements.hpp

67 lines
1.9 KiB
C++

#pragma once
#include <string>
#include <vector>
#include <unordered_map>
#include <tinyxml2.h>
#include "constants.h"
namespace cursebreaker {
struct AchievementRequirement
{
ActionType action{};
uint16_t targetId{}; // e.g., item id, npc id, etc.
uint16_t count{};
std::string description;
};
struct Achievement
{
uint16_t id{};
uint16_t points{};
uint16_t category{};
std::string name;
std::string description;
std::string icon;
std::vector<AchievementRequirement> requirements;
Achievement() = default;
};
// Achievements configuration manager
class AchievementsConfig {
public:
static AchievementsConfig& getInstance() {
static AchievementsConfig instance;
return instance;
}
bool loadFromXML(const std::string& filepath);
const Achievement* getAchievementById(int id) const;
const std::unordered_map<int, Achievement>& getAllAchievements() const { return m_achievements; }
private:
AchievementsConfig() = default;
~AchievementsConfig() = default;
AchievementsConfig(const AchievementsConfig&) = delete;
AchievementsConfig& operator=(const AchievementsConfig&) = delete;
std::unordered_map<int, Achievement> m_achievements;
// Helper methods for parsing
void parseAchievement(tinyxml2::XMLElement* achievementElement);
void parseRequirements(tinyxml2::XMLElement* achievementElement, Achievement& achievement);
std::string getAttributeValue(tinyxml2::XMLElement* element, const char* attribute, const std::string& defaultValue = "");
int getAttributeValueInt(tinyxml2::XMLElement* element, const char* attribute, int defaultValue = 0);
bool getAttributeValueBool(tinyxml2::XMLElement* element, const char* attribute, bool defaultValue = false);
};
// Helper functions for enum conversions
ActionType stringToActionType(const std::string& str);
} // namespace cursebreaker