RuneHive-Game
Loading...
Searching...
No Matches
MutantTarn.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.combat.strategy.npc.boss;
2
3import com.runehive.game.Animation;
4import com.runehive.game.Projectile;
5import com.runehive.game.UpdatePriority;
6import com.runehive.game.world.World;
7import com.runehive.game.world.entity.combat.attack.FightType;
8import com.runehive.game.world.entity.combat.hit.CombatHit;
9import com.runehive.game.world.entity.combat.hit.Hit;
10import com.runehive.game.world.entity.combat.projectile.CombatProjectile;
11import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
12import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
13import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
14import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
15import com.runehive.game.world.entity.mob.Mob;
16import com.runehive.game.world.entity.mob.npc.Npc;
17import com.runehive.game.world.position.Position;
18import com.runehive.util.RandomUtils;
19import com.runehive.util.Utility;
20
21import java.util.Deque;
22import java.util.LinkedList;
23
24import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
25
26/**
27 * The combat Script for Ice Demon Boss.
28 *
29 * @author TJ#5762
30 */
31public class MutantTarn extends MultiStrategy {
32 private static final NpcMeleeStrategy MELEE = NpcMeleeStrategy.get();
33 private static final MagicAttack MAGIC = new MagicAttack();
34 private static final RangedAttack RANGED = new RangedAttack();
35
36 private static final FrozenSpecial FROZEN_SPECIAL = new FrozenSpecial();
37 private static final IceSpecial ICE_SPECIAL = new IceSpecial();
38
39 private static final CombatStrategy<Npc>[] FULL_STRATEGIES = createStrategyArray(MELEE, MAGIC, RANGED);
40 private static final CombatStrategy<Npc>[] NON_MELEE = createStrategyArray(MAGIC, RANGED);
41 private final CombatStrategy<Npc>[] SPECIALS = createStrategyArray(ICE_SPECIAL, FROZEN_SPECIAL);
42
43 private final Deque<CombatStrategy<Npc>> strategyQueue = new LinkedList<>();
44 private int specialIndex;
45
46 public MutantTarn() {
48 }
49
50 @Override
51 public void init(Npc attacker, Mob defender) {
52 if (strategyQueue.isEmpty()) {
53 for (int index = 0; index < 6; index++) {
55 }
57 }
59 }
60
61 @Override
62 public boolean canAttack(Npc attacker, Mob defender) {
63 if (currentStrategy == MELEE && !MELEE.canAttack(attacker, defender)) {
65 }
66 return currentStrategy.canAttack(attacker, defender);
67 }
68
69 @Override
70 public boolean withinDistance(Npc attacker, Mob defender) {
71 if (currentStrategy == MELEE && !MELEE.withinDistance(attacker, defender)) {
73 }
74 return currentStrategy.canAttack(attacker, defender);
75 }
76
77 private static class IceSpecial extends NpcMagicStrategy {
79 super(CombatProjectile.getDefinition("EMPTY"));
80 }
81
82 @Override
83 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
84 return 30;
85 }
86
87 @Override
88 public CombatHit[] getHits(Npc attacker, Mob defender) {
89 CombatHit combatHit = nextMagicHit(attacker, defender, 0);
90 combatHit.setAccurate(true);
91 combatHit.setDamage(-1);
92 return new CombatHit[] { combatHit };
93 }
94 }
95
96 private static class RangedAttack extends NpcMagicStrategy {
97
99 super(CombatProjectile.getDefinition("Mutant Tarn Ranged"));
100 }
101
102 @Override
103 public Animation getAttackAnimation(Npc attacker, Mob defender) {
104 return new Animation(5617, UpdatePriority.HIGH);
105 }
106
107 @Override
108 public CombatHit[] getHits(Npc attacker, Mob defender) {
109 return new CombatHit[] { nextRangedHit(attacker, defender, 32) };
110 }
111 }
112
113 private static class MagicAttack extends NpcMagicStrategy {
114
116 super(CombatProjectile.getDefinition("Shadow Rush"));
117 }
118
119 @Override
120 public Animation getAttackAnimation(Npc attacker, Mob defender) {
121 return new Animation(5617, UpdatePriority.HIGH);
122 }
123
124 @Override
125 public CombatHit[] getHits(Npc attacker, Mob defender) {
126 return new CombatHit[] { nextRangedHit(attacker, defender, 32) };
127 }
128
129 }
130
131 private static class FrozenSpecial extends NpcMagicStrategy {
132 private final Projectile PROJECTILE = new Projectile(1324, 5, 85, 85, 25);
133
135 super(CombatProjectile.getDefinition("Mutant Frozen Special"));
136 }
137
138 @Override
139 public Animation getAttackAnimation(Npc attacker, Mob defender) {
140 return new Animation(5617, UpdatePriority.HIGH);
141 }
142
143 @Override
144 public void hit(Npc attacker, Mob defender, Hit hit) {
145 World.schedule(4, () -> {
146 int randomHit = Utility.random(1, 30);
147 Npc shadow = new Npc(7586, new Position(2524, 4655, 0)) {
148
149 @Override
150 public void appendDeath() {
151 super.appendDeath();
152
153 }
154 };
155 shadow.register();
156 shadow.walkTo(defender, () -> {
157 // World.sendGraphic(new Graphic(1460, true), shadow.getPosition());
158 defender.damage(new Hit(randomHit * shadow.getCurrentHealth() / shadow.getMaximumHealth()));
159 defender.graphic(287);
160 defender.graphic(910);
161 shadow.unregister();
162 });
163 });
164
165 }
166
167 @Override
168 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
169 return 15;
170 }
171
172 @Override
173 public CombatHit[] getHits(Npc attacker, Mob defender) {
174 CombatHit combatHit = nextMagicHit(attacker, defender, -1);
175 combatHit.setAccurate(false);
176 return new CombatHit[] { combatHit };
177 }
178 }
179}
Class that models a single animation used by an entity.
Represents the game world.
Definition World.java:46
static void schedule(Task task)
Submits a new event.
Definition World.java:247
A wrapper for a Hit object, adding additional variables for hit and hitsplat delays.
A Hit object holds the damage amount and hitsplat data.
Definition Hit.java:10
void setDamage(int damage)
Sets the hit damage.
Definition Hit.java:98
final CombatHit nextRangedHit(T attacker, Mob defender)
final CombatHit nextMagicHit(T attacker, Mob defender)
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
Handles the mob class.
Definition Mob.java:66
void walkTo(Position position)
Definition Mob.java:374
Optional< Graphic > graphic
Definition Mob.java:91
Represents a non-player character in the in-game world.
Definition Npc.java:29
void appendDeath()
Handles the mob death.
Definition Npc.java:147
void register()
Registers an entity to the World.
Definition Npc.java:112
void unregister()
Unregisters an entity from the World.
Definition Npc.java:126
Represents a single tile on the game world.
Definition Position.java:14
A static-util class that provides additional functionality for generating pseudo-random numbers.
static< T > T random(T[] array)
Pseudo-randomly retrieves a element from array.
Handles miscellaneous methods.
Definition Utility.java:27
static int random(int bound)
Definition Utility.java:239
Represents different priorities for updating.
The enumerated type whose elements represent the fighting types.