RuneHive-Game
Loading...
Searching...
No Matches
Modifier.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.attack;
2
3import java.util.function.Function;
4
5public class Modifier {
6 private Function<Integer, Integer> attackModifier = Function.identity();
7 private Function<Integer, Integer> magicModifier = Function.identity();
8 private Function<Integer, Integer> rangedModifier = Function.identity();
9 private Function<Integer, Integer> aggressiveModifier = Function.identity();
10 private Function<Integer, Integer> defensiveModifier = Function.identity();
11
12 private Function<Integer, Integer> maxHitModifier = Function.identity();
13 private Function<Integer, Integer> damageModifier = Function.identity();
14
15 /* ************************************************************ */
16
17 protected final Modifier attackPercent(double percentage) {
19 return this;
20 }
21
22 protected final Modifier ranged(double percentage) {
24 return this;
25 }
26
27 protected final Modifier magic(double percentage) {
29 return this;
30 }
31
32 protected final Modifier aggressive(double percentage) {
34 return this;
35 }
36
37 protected final Modifier defensive(double percentage) {
39 return this;
40 }
41
42 protected final Modifier maxHit(double percentage) {
44 return this;
45 }
46
47 /* ************************************************************ */
48
49 protected final Modifier attack(int level) {
51 return this;
52 }
53
54 protected final Modifier ranged(int level) {
55 rangedModifier = rangedModifier.andThen(addition(level));
56 return this;
57 }
58
59 protected final Modifier magic(int level) {
60 magicModifier = magicModifier.andThen(addition(level));
61 return this;
62 }
63
64 protected final Modifier aggressive(int level) {
66 return this;
67 }
68
69 protected final Modifier defensive(int level) {
71 return this;
72 }
73
74 protected final Modifier maxHit(int level) {
75 maxHitModifier = maxHitModifier.andThen(addition(level));
76 return this;
77 }
78
79 /* ************************************************************ */
80
81 public static Modifier link(Modifier first, Modifier second) {
82 Modifier modifier = new Modifier();
83 modifier.attackModifier = first.attackModifier.andThen(second.attackModifier);
84 modifier.magicModifier = first.magicModifier.andThen(second.magicModifier);
85 modifier.rangedModifier = first.rangedModifier.andThen(second.rangedModifier);
86 modifier.aggressiveModifier = first.aggressiveModifier.andThen(second.aggressiveModifier);
87 modifier.defensiveModifier = first.defensiveModifier.andThen(second.defensiveModifier);
88 modifier.maxHitModifier = first.maxHitModifier.andThen(second.maxHitModifier);
89 modifier.damageModifier = first.damageModifier.andThen(second.damageModifier);
90 return modifier;
91 }
92
93 public int modifyAttack(int level) {
94 return attackModifier.apply(level);
95 }
96
97 public int modifyRanged(int level) {
98 return rangedModifier.apply(level);
99 }
100
101 public int modifyMagic(int level) {
102 return magicModifier.apply(level);
103 }
104
105 public int modifyAggressive(int level) {
106 return aggressiveModifier.apply(level);
107 }
108
109 public int modifyDefensive(int level) {
110 return defensiveModifier.apply(level);
111 }
112
113 public int modifyMaxHit(int max) {
114 return maxHitModifier.apply(max);
115 }
116
117 public int modifyDamage(int damage) {
118 return damageModifier.apply(damage);
119 }
120
121 private static Function<Integer, Integer> link(Function<Integer, Integer> modifier, Function<Integer, Integer> next) {
122 return modifier.andThen(next);
123 }
124
125 private static Function<Integer, Integer> addition(int amount) {
126 return modifier -> modifier + amount;
127 }
128
129 private static Function<Integer, Integer> percentage(double percent) {
130 return modifier -> (int) (modifier * (1 + percent));
131 }
132
133 private static Modifier attack(double percent) {
134 return new Modifier() {{ attackPercent(percent); }};
135 }
136
137 public static void main(String[] args) {
138 Modifier godsword = attack(0.25);
139 Modifier agsMaxHit = attack(0.10);
140
141 Modifier chain = link(godsword, agsMaxHit);
142 Modifier linked = link(attack(0.25), attack(0.10));
143
144 double total;
145
146 total = link(chain, linked).modifyAttack(10000) / 10000.0;
147 System.out.println(total);
148
149 total = link(chain, linked).modifyAttack(10000) / 10000.0;
150 System.out.println(total);
151 }
152
153
154}
final Modifier magic(double percentage)
Definition Modifier.java:27
final Modifier attackPercent(double percentage)
Definition Modifier.java:17
static Function< Integer, Integer > percentage(double percent)
final Modifier aggressive(double percentage)
Definition Modifier.java:32
static Modifier link(Modifier first, Modifier second)
Definition Modifier.java:81
final Modifier defensive(double percentage)
Definition Modifier.java:37
final Modifier maxHit(double percentage)
Definition Modifier.java:42
Function< Integer, Integer > aggressiveModifier
Definition Modifier.java:9
final Modifier ranged(double percentage)
Definition Modifier.java:22
static Function< Integer, Integer > link(Function< Integer, Integer > modifier, Function< Integer, Integer > next)
static Function< Integer, Integer > addition(int amount)