2024-06-02 07:53:56 +00:00
|
|
|
#include "ModifierType.h"
|
|
|
|
#include <unordered_map>
|
2024-07-05 22:02:30 +00:00
|
|
|
#include <unordered_set>
|
2024-06-02 07:53:56 +00:00
|
|
|
|
|
|
|
using namespace nejlika;
|
|
|
|
|
|
|
|
namespace
|
|
|
|
{
|
|
|
|
|
|
|
|
const std::unordered_map<ModifierType, std::string> colorMap = {
|
|
|
|
{ModifierType::Health, "#750000"},
|
|
|
|
{ModifierType::Armor, "#525252"},
|
|
|
|
{ModifierType::Imagination, "#0077FF"},
|
|
|
|
{ModifierType::Offensive, "#71583B"},
|
|
|
|
{ModifierType::Defensive, "#71583B"},
|
2024-07-05 22:02:30 +00:00
|
|
|
{ModifierType::Physical, "#666666"},
|
|
|
|
{ModifierType::Pierce, "#4f4f4f"},
|
|
|
|
{ModifierType::Vitality, "#e84646"},
|
2024-06-02 07:53:56 +00:00
|
|
|
{ModifierType::Fire, "#ff0000"},
|
|
|
|
{ModifierType::Cold, "#94d0f2"},
|
|
|
|
{ModifierType::Lightning, "#00a2ff"},
|
|
|
|
{ModifierType::Corruption, "#3d00ad"},
|
2024-07-05 22:02:30 +00:00
|
|
|
{ModifierType::Psychic, "#4b0161"},
|
|
|
|
{ModifierType::Acid, "#00ff00"},
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_map<ModifierType, std::string> nameMap = {
|
|
|
|
{ModifierType::Health, "Health"},
|
|
|
|
{ModifierType::Armor, "Armor"},
|
|
|
|
{ModifierType::Imagination, "Imagination"},
|
|
|
|
{ModifierType::Offensive, "Offensive Ability"},
|
|
|
|
{ModifierType::Defensive, "Defensive Ability"},
|
|
|
|
{ModifierType::Physical, "Physical Damage"},
|
|
|
|
{ModifierType::Pierce, "Pierce Damage"},
|
|
|
|
{ModifierType::Vitality, "Vitality Damage"},
|
|
|
|
{ModifierType::Fire, "Fire Damage"},
|
|
|
|
{ModifierType::Cold, "Cold Damage"},
|
|
|
|
{ModifierType::Lightning, "Lightning Damage"},
|
|
|
|
{ModifierType::Corruption, "Corruption Damage"},
|
|
|
|
{ModifierType::Psychic, "Psychic Damage"},
|
|
|
|
{ModifierType::Acid, "Acid Damage"},
|
|
|
|
{ModifierType::InternalDisassembly, "Internal Disassembly"},
|
|
|
|
{ModifierType::InternalDisassemblyDuration, "Internal Disassembly Duration"},
|
|
|
|
{ModifierType::Burn, "Burn"},
|
|
|
|
{ModifierType::BurnDuration, "Burn Duration"},
|
|
|
|
{ModifierType::Frostburn, "Frostburn"},
|
|
|
|
{ModifierType::FrostburnDuration, "Frostburn Duration"},
|
|
|
|
{ModifierType::Poison, "Poison"},
|
|
|
|
{ModifierType::PoisonDuration, "Poison Duration"},
|
|
|
|
{ModifierType::Electrocute, "Electrocute"},
|
|
|
|
{ModifierType::ElectrocuteDuration, "Electrocute Duration"},
|
|
|
|
{ModifierType::VitalityDecay, "Vitality Decay"},
|
|
|
|
{ModifierType::VitalityDecayDuration, "Vitality Decay Duration"},
|
|
|
|
{ModifierType::Seperation, "Seperation"},
|
|
|
|
{ModifierType::SeperationDuration, "Seperation Duration"},
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_map<ModifierType, ModifierType> resistanceMap = {
|
|
|
|
{ModifierType::Physical, ModifierType::Physical},
|
|
|
|
{ModifierType::Pierce, ModifierType::Pierce},
|
|
|
|
{ModifierType::Vitality, ModifierType::Vitality},
|
|
|
|
{ModifierType::Fire, ModifierType::Fire},
|
|
|
|
{ModifierType::Cold, ModifierType::Cold},
|
|
|
|
{ModifierType::Lightning, ModifierType::Lightning},
|
|
|
|
{ModifierType::Corruption, ModifierType::Corruption},
|
|
|
|
{ModifierType::Psychic, ModifierType::Psychic},
|
|
|
|
{ModifierType::Acid, ModifierType::Acid},
|
|
|
|
{ModifierType::InternalDisassembly, ModifierType::Physical},
|
|
|
|
{ModifierType::Burn, ModifierType::Fire},
|
|
|
|
{ModifierType::Frostburn, ModifierType::Cold},
|
|
|
|
{ModifierType::Poison, ModifierType::Acid},
|
|
|
|
{ModifierType::VitalityDecay, ModifierType::Vitality},
|
|
|
|
{ModifierType::Electrocute, ModifierType::Lightning},
|
|
|
|
{ModifierType::Seperation, ModifierType::Seperation}
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_set<ModifierType> normalDamageTypes = {
|
|
|
|
ModifierType::Physical,
|
|
|
|
ModifierType::Pierce,
|
|
|
|
ModifierType::Vitality,
|
|
|
|
ModifierType::Fire,
|
|
|
|
ModifierType::Cold,
|
|
|
|
ModifierType::Lightning,
|
|
|
|
ModifierType::Corruption,
|
|
|
|
ModifierType::Psychic,
|
|
|
|
ModifierType::Acid
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_map<ModifierType, ModifierType> durationMap = {
|
|
|
|
{ModifierType::InternalDisassembly, ModifierType::InternalDisassemblyDuration},
|
|
|
|
{ModifierType::Burn, ModifierType::BurnDuration},
|
|
|
|
{ModifierType::Frostburn, ModifierType::FrostburnDuration},
|
|
|
|
{ModifierType::Poison, ModifierType::PoisonDuration},
|
|
|
|
{ModifierType::VitalityDecay, ModifierType::VitalityDecayDuration},
|
|
|
|
{ModifierType::Electrocute, ModifierType::ElectrocuteDuration},
|
|
|
|
{ModifierType::Seperation, ModifierType::SeperationDuration}
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_map<ModifierType, ModifierType> overTimeMap = {
|
|
|
|
{ModifierType::Physical, ModifierType::InternalDisassembly},
|
|
|
|
{ModifierType::Fire, ModifierType::Burn},
|
|
|
|
{ModifierType::Cold, ModifierType::Frostburn},
|
|
|
|
{ModifierType::Poison, ModifierType::Poison},
|
|
|
|
{ModifierType::Vitality, ModifierType::VitalityDecay},
|
|
|
|
{ModifierType::Lightning, ModifierType::Electrocute}
|
|
|
|
};
|
|
|
|
|
|
|
|
const std::unordered_set<ModifierType> isOverTimeMap = {
|
|
|
|
ModifierType::InternalDisassembly,
|
|
|
|
ModifierType::Burn,
|
|
|
|
ModifierType::Frostburn,
|
|
|
|
ModifierType::Poison,
|
|
|
|
ModifierType::VitalityDecay,
|
|
|
|
ModifierType::Electrocute,
|
|
|
|
ModifierType::Seperation
|
2024-06-02 07:53:56 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& nejlika::GetModifierTypeColor(ModifierType type)
|
|
|
|
{
|
|
|
|
const auto color = colorMap.find(type);
|
|
|
|
|
|
|
|
if (color != colorMap.end()) {
|
|
|
|
return color->second;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const std::string white = "#FFFFFF";
|
|
|
|
|
|
|
|
return white;
|
2024-07-05 22:02:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const std::string& nejlika::GetModifierTypeName(ModifierType type) {
|
|
|
|
const auto name = nameMap.find(type);
|
|
|
|
|
|
|
|
if (name != nameMap.end()) {
|
|
|
|
return name->second;
|
|
|
|
}
|
|
|
|
|
|
|
|
static const std::string invalid = "Invalid";
|
|
|
|
|
|
|
|
return invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
const ModifierType nejlika::GetResistanceType(ModifierType type) {
|
|
|
|
const auto resistance = resistanceMap.find(type);
|
|
|
|
|
|
|
|
if (resistance != resistanceMap.end()) {
|
|
|
|
return resistance->second;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ModifierType::Invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
const bool nejlika::IsNormalDamageType(ModifierType type) {
|
|
|
|
return normalDamageTypes.find(type) != normalDamageTypes.end();
|
|
|
|
}
|
|
|
|
|
|
|
|
const ModifierType nejlika::GetOverTimeType(ModifierType type) {
|
|
|
|
const auto overTime = overTimeMap.find(type);
|
|
|
|
|
|
|
|
if (overTime != overTimeMap.end()) {
|
|
|
|
return overTime->second;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ModifierType::Invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
const ModifierType nejlika::GetDurationType(ModifierType type) {
|
|
|
|
const auto duration = durationMap.find(type);
|
|
|
|
|
|
|
|
if (duration != durationMap.end()) {
|
|
|
|
return duration->second;
|
|
|
|
}
|
|
|
|
|
|
|
|
return ModifierType::Invalid;
|
|
|
|
}
|
|
|
|
|
|
|
|
const bool nejlika::IsOverTimeType(ModifierType type) {
|
|
|
|
return isOverTimeMap.find(type) != isOverTimeMap.end();
|
|
|
|
}
|