#pragma once #include "AttributeInstance.h" class ModifiableAttributeInstance : public AttributeInstance { private: BaseAttributeMap* attributeMap; Attribute* attribute; std::unordered_set modifiers[AttributeModifier::TOTAL_OPERATIONS]; std::unordered_map modifierById; double baseValue; bool dirty; double cachedValue; public: ModifiableAttributeInstance(BaseAttributeMap* attributeMap, Attribute* attribute); ~ModifiableAttributeInstance(); Attribute* getAttribute(); double getBaseValue(); void setBaseValue(double baseValue); std::unordered_set* getModifiers(int operation); void getModifiers(std::unordered_set& result); AttributeModifier* getModifier(eMODIFIER_ID id); void addModifiers(std::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(); };