1package com.osroyale.game.world.entity.combat.formula;
3import com.osroyale.game.world.entity.combat.FormulaModifier;
4import com.osroyale.game.world.entity.mob.Mob;
7import java.util.LinkedList;
9public class CombatFormula<T
extends Mob> implements FormulaModifier<T> {
10 private final Deque<FormulaModifier<? super T>> modifiers =
new LinkedList<>();
12 public void addFirst(FormulaModifier<? super T> modifier) {
13 modifiers.addFirst(modifier);
16 public void removeFirst() {
17 modifiers.removeFirst();
20 public boolean add(FormulaModifier<? super T> modifier) {
21 return !modifiers.contains(modifier) && modifiers.add(modifier);
24 public boolean remove(FormulaModifier<? super T> modifier) {
25 return modifiers.remove(modifier);
29 public int modifyAttackLevel(T attacker, Mob defender,
int level) {
30 for (FormulaModifier<? super T> modifier : modifiers) {
31 level = modifier.modifyAttackLevel(attacker, defender, level);
37 public int modifyStrengthLevel(T attacker, Mob defender,
int level) {
38 for (FormulaModifier<? super T> modifier : modifiers) {
39 level = modifier.modifyStrengthLevel(attacker, defender, level);
45 public int modifyDefenceLevel(Mob attacker, T defender,
int level) {
46 for (FormulaModifier<? super T> modifier : modifiers) {
47 level = modifier.modifyDefenceLevel(attacker, defender, level);
53 public int modifyRangedLevel(T attacker, Mob defender,
int level) {
54 for (FormulaModifier<? super T> modifier : modifiers) {
55 level = modifier.modifyRangedLevel(attacker, defender, level);
61 public int modifyMagicLevel(T attacker, Mob defender,
int level) {
62 for (FormulaModifier<? super T> modifier : modifiers) {
63 level = modifier.modifyMagicLevel(attacker, defender, level);
69 public int modifyAccuracy(T attacker, Mob defender,
int roll) {
70 for (FormulaModifier<? super T> modifier : modifiers) {
71 roll = modifier.modifyAccuracy(attacker, defender, roll);
77 public int modifyAggressive(T attacker, Mob defender,
int roll) {
78 for (FormulaModifier<? super T> modifier : modifiers) {
79 roll = modifier.modifyAggressive(attacker, defender, roll);
85 public int modifyDefensive(Mob attacker, T defender,
int roll) {
86 for (FormulaModifier<? super T> modifier : modifiers) {
87 roll = modifier.modifyDefensive(attacker, defender, roll);
93 public int modifyDamage(T attacker, Mob defender,
int damage) {
94 for (FormulaModifier<? super T> modifier : modifiers) {
95 damage = modifier.modifyDamage(attacker, defender, damage);
101 public int modifyOffensiveBonus(T attacker, Mob defender,
int bonus) {
102 for (FormulaModifier<? super T> modifier : modifiers) {
103 bonus = modifier.modifyOffensiveBonus(attacker, defender, bonus);
109 public int modifyAggressiveBonus(T attacker, Mob defender,
int bonus) {
110 for (FormulaModifier<? super T> modifier : modifiers) {
111 bonus = modifier.modifyAggressiveBonus(attacker, defender, bonus);
117 public int modifyDefensiveBonus(Mob attacker, T defender,
int bonus) {
118 for (FormulaModifier<? super T> modifier : modifiers) {
119 bonus = modifier.modifyDefensiveBonus(attacker, defender, bonus);