aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ModifiableAttributeInstance.h
blob: 6d1188626b3c6595f5b19ee0e0d7e48e63c84d71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#pragma once

#include "AttributeInstance.h"

class ModifiableAttributeInstance : public AttributeInstance
{
private:
	BaseAttributeMap *attributeMap;
	Attribute *attribute;
	unordered_set<AttributeModifier *> modifiers [AttributeModifier::TOTAL_OPERATIONS];
	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);
	unordered_set<AttributeModifier *> *getModifiers(int operation);
	void getModifiers(unordered_set<AttributeModifier *>& result);
	AttributeModifier *getModifier(eMODIFIER_ID id);
	void addModifiers(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();
};