mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 03:53:39 +00:00
41 lines
1.2 KiB
C++
41 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "AttributeInstance.h"
|
|
|
|
class ModifiableAttributeInstance : public AttributeInstance {
|
|
private:
|
|
BaseAttributeMap* attributeMap;
|
|
Attribute* attribute;
|
|
std::unordered_set<AttributeModifier*>
|
|
modifiers[AttributeModifier::TOTAL_OPERATIONS];
|
|
std::unordered_map<unsigned int, AttributeModifier*> 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<AttributeModifier*>* getModifiers(int operation);
|
|
void getModifiers(std::unordered_set<AttributeModifier*>& result);
|
|
AttributeModifier* getModifier(eMODIFIER_ID id);
|
|
void addModifiers(std::unordered_set<AttributeModifier*>* 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();
|
|
}; |