#pragma once #include "AttributeInstance.h" class ModifiableAttributeInstance : public AttributeInstance { private: BaseAttributeMap *attributeMap; Attribute *attribute; unordered_set modifiers [AttributeModifier::TOTAL_OPERATIONS]; unordered_map modifierById; double baseValue; bool dirty; double cachedValue; public: ModifiableAttributeInstance(BaseAttributeMap *attributeMap, Attribute *attribute); ~ModifiableAttributeInstance(); Attribute *getAttribute(); double getBaseValue(); void setBaseValue(double baseValue); unordered_set *getModifiers(int operation); void getModifiers(unordered_set& result); AttributeModifier *getModifier(eMODIFIER_ID id); void addModifiers(unordered_set *modifiers); void addModifier(AttributeModifier *modifier); private: void setDirty(); public: void removeModifier(AttributeModifier *modifier); void removeModifier(eMODIFIER_ID id); void removeModifiers(); double getValue(); private: double calculateValue(); };