Gather all enchantment info into a single place
This also resolves several TODO notes about duplicate code and makes cPresetItem::ability an eEnchant
This commit is contained in:
76
src/enchant.cpp
Normal file
76
src/enchant.cpp
Normal file
@@ -0,0 +1,76 @@
|
||||
//
|
||||
// enchant.cpp
|
||||
// BoE
|
||||
//
|
||||
// Created by Celtic Minstrel on 2023-08-28.
|
||||
//
|
||||
//
|
||||
|
||||
#include "enchant.hpp"
|
||||
#include "mathutil.hpp"
|
||||
|
||||
std::map<eEnchant, cEnchant> cEnchant::dictionary;
|
||||
|
||||
cEnchant::cEnchant(eEnchant id, std::string suf) : id(id), suffix(suf) {}
|
||||
|
||||
cEnchant& cEnchant::withCost(short cost) {
|
||||
aug_cost = cost;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withBonus(int bonus) {
|
||||
add_bonus = bonus;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren) {
|
||||
add_ability = abil;
|
||||
abil_strength = stren;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eSpell spell) {
|
||||
withAbility(abil, stren);
|
||||
abil_data.spell = spell;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eDamageType dmg) {
|
||||
withAbility(abil, stren);
|
||||
abil_data.damage = dmg;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withAbility(eItemAbil abil, unsigned int stren, eStatus status) {
|
||||
withAbility(abil, stren);
|
||||
abil_data.status = status;
|
||||
return *this;
|
||||
}
|
||||
|
||||
cEnchant& cEnchant::withCharges(int c) {
|
||||
charges = c;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const cEnchant& cEnchant::finish() {
|
||||
dictionary.emplace(id, *this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
int cEnchant::adjust_value(int initial_value) const {
|
||||
return max(aug_cost * 100, initial_value * (5 + aug_cost));
|
||||
}
|
||||
|
||||
const cEnchant& operator* (eEnchant ench) {
|
||||
static cEnchant none{eEnchant::NONE, ""};
|
||||
if(ench == eEnchant::NONE) return none;
|
||||
return cEnchant::dictionary.at(ench);
|
||||
}
|
||||
|
||||
cEnchant E_PLUS_ONE = cEnchant(eEnchant::PLUS_ONE, "+1").withCost(4).withBonus(1).finish();
|
||||
cEnchant E_PLUS_TWO = cEnchant(eEnchant::PLUS_TWO, "+2").withCost(7).withBonus(2).finish();
|
||||
cEnchant E_PLUS_THREE = cEnchant(eEnchant::PLUS_THREE, "+3").withCost(10).withBonus(3).finish();
|
||||
cEnchant E_SHOOT_FLAME = cEnchant(eEnchant::SHOOT_FLAME, "F").withCost(8).withAbility(eItemAbil::CAST_SPELL, 5, eSpell::FLAME).withCharges(8).finish();
|
||||
cEnchant E_FLAMING = cEnchant(eEnchant::FLAMING, "F!").withCost(15).withAbility(eItemAbil::DAMAGING_WEAPON, 5, eDamageType::FIRE).finish();
|
||||
cEnchant E_PLUS_FIVE = cEnchant(eEnchant::PLUS_FIVE, "+5").withCost(15).withBonus(5).finish();
|
||||
cEnchant E_BLESSED = cEnchant(eEnchant::BLESSED, "B").withCost(10).withBonus(1).withAbility(eItemAbil::AFFECT_STATUS, 5, eStatus::BLESS_CURSE);
|
Reference in New Issue
Block a user