1package com.fs.starfarer.api.combat;
3import java.util.HashMap;
4import java.util.LinkedHashMap;
13 public static enum StatModType {
19 public static class StatMod {
21 public String desc =
null;
24 public StatMod(String source, StatModType type,
float value) {
29 public StatMod(String source, StatModType type,
float value, String desc) {
36 public String getSource() {
42 public float getValue() {
45 public String getDesc() {
57 private LinkedHashMap<String, StatMod> flatMods;
58 private LinkedHashMap<String, StatMod> percentMods;
59 private LinkedHashMap<String, StatMod> multMods;
61 transient private boolean needsRecompute =
false;
63 transient private float flatMod;
64 transient private float percentMod;
65 transient private float mult = 1f;
73 if (flatMods ==
null) {
74 flatMods =
new LinkedHashMap<String, StatMod>();
76 if (percentMods ==
null) {
77 percentMods =
new LinkedHashMap<String, StatMod>();
79 if (multMods ==
null) {
80 multMods =
new LinkedHashMap<String, StatMod>();
83 needsRecompute =
true;
105 needsRecompute =
true;
112 needsRecompute =
true;
116 return (flatMods ==
null ||
getFlatMods().isEmpty()) &&
126 if (flatMods ==
null) {
127 flatMods =
new LinkedHashMap<String, StatMod>();
133 if (percentMods ==
null) {
134 percentMods =
new LinkedHashMap<String, StatMod>();
140 if (multMods ==
null) {
141 multMods =
new LinkedHashMap<String, StatMod>();
180 public void modifyFlat(String source,
float value, String desc) {
182 if (mod ==
null && value == 0)
return;
183 if (mod !=
null && mod.value == value) {
188 mod =
new StatMod(source, StatModType.FLAT, value, desc);
190 needsRecompute =
true;
199 if (mod ==
null && value == 0)
return;
200 if (mod !=
null && mod.value == value) {
205 mod =
new StatMod(source, StatModType.PERCENT, value, desc);
207 needsRecompute =
true;
211 StatMod mod =
new StatMod(source, StatModType.PERCENT, value, desc);
213 needsRecompute =
true;
220 public void modifyMult(String source,
float value, String desc) {
222 if (mod ==
null && value == 1)
return;
223 if (mod !=
null && mod.value == value) {
228 mod =
new StatMod(source, StatModType.MULT, value, desc);
230 needsRecompute =
true;
234 StatMod mod =
new StatMod(source, StatModType.MULT, value, desc);
236 needsRecompute =
true;
240 StatMod mod =
new StatMod(source, StatModType.FLAT, value, desc);
242 needsRecompute =
true;
249 needsRecompute =
true;
253 if (flatMods !=
null) {
255 if (mod !=
null && mod.value != 0) needsRecompute =
true;
258 if (percentMods !=
null) {
260 if (mod !=
null && mod.value != 0) needsRecompute =
true;
263 if (multMods !=
null) {
265 if (mod !=
null && mod.value != 1) needsRecompute =
true;
270 if (flatMods ==
null)
return;
273 if (mod !=
null && mod.value != 0) needsRecompute =
true;
277 if (percentMods ==
null)
return;
280 if (mod !=
null && mod.value != 0) needsRecompute =
true;
284 if (multMods ==
null)
return;
287 if (mod !=
null && mod.value != 1) needsRecompute =
true;
290 private void recompute() {
295 if (percentMods !=
null) {
297 percentMod += mod.value;
301 if (flatMods !=
null) {
303 flatMod += mod.value;
307 if (multMods !=
null) {
318 needsRecompute =
false;
322 if (needsRecompute) recompute();
327 if (needsRecompute) recompute();
332 if (needsRecompute) recompute();
337 if (multMods ==
null)
return 1f;
346 if (needsRecompute) recompute();
351 if (needsRecompute) recompute();
360 if (this.base !=
base) needsRecompute =
true;
void modifyFlatAlways(String source, float value, String desc)
void modifyMult(String source, float value, String desc)
void modifyPercent(String source, float value, String desc)
StatMod getMultStatMod(String source)
void setBaseValue(float base)
void modifyFlat(String source, float value)
void modifyPercent(String source, float value)
void applyMods(MutableStat other)
HashMap< String, StatMod > getPercentMods()
void unmodifyMult(String source)
void unmodifyFlat(String source)
void applyMods(StatBonus other)
void unmodifyPercent(String source)
StatMod getFlatStatMod(String source)
void modifyMult(String source, float value)
StatMod getPercentStatMod(String source)
HashMap< String, StatMod > getFlatMods()
void unmodify(String source)
void modifyPercentAlways(String source, float value, String desc)
void modifyFlat(String source, float value, String desc)
void modifyMultAlways(String source, float value, String desc)
HashMap< String, StatMod > getMultMods()
HashMap< String, StatMod > getFlatBonuses()
HashMap< String, StatMod > getMultBonuses()
HashMap< String, StatMod > getPercentBonuses()