#include "DamageProfile.h" #include "tinyxml2.h" std::map DamageProfile::s_DamageProfiles; void DamageProfile::LoadDamageProfiles(const std::string& filename) { tinyxml2::XMLDocument doc; doc.LoadFile(filename.c_str()); auto root = doc.FirstChildElement("DamageProfiles"); for (auto element = root->FirstChildElement("DamageProfile"); element != nullptr; element = element->NextSiblingElement("DamageProfile")) { auto skillID = element->IntAttribute("skillID"); DamageProfile damageProfile(skillID); for (auto damageElement = element->FirstChildElement("Damage"); damageElement != nullptr; damageElement = damageElement->NextSiblingElement("Damage")) { auto statType = damageElement->IntAttribute("type"); auto value = damageElement->FloatAttribute("value"); damageProfile.AddDamageProfile(static_cast(statType), value); } s_DamageProfiles.emplace(skillID, damageProfile); } } DamageProfile* DamageProfile::FindDamageProfile(int32_t skillID) { const auto& it = s_DamageProfiles.find(skillID); if (it != s_DamageProfiles.end()) { return &it->second; } return nullptr; } DamageProfile::DamageProfile(int32_t skillID) { this->m_SkillID = skillID; } void DamageProfile::AddDamageProfile(eStatTypes statType, float value) { m_DamageProfile[statType] = value; } float DamageProfile::GetDamageProfile(eStatTypes statType) const { const auto& it = m_DamageProfile.find(statType); if (it != m_DamageProfile.end()) { return it->second; } return 0.0f; }