RuneHive-Game
Loading...
Searching...
No Matches
CorporealBeast.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.UpdatePriority;
5import com.runehive.game.world.entity.combat.CombatType;
6import com.runehive.game.world.entity.combat.attack.FightType;
7import com.runehive.game.world.entity.combat.hit.CombatHit;
8import com.runehive.game.world.entity.combat.hit.Hit;
9import com.runehive.game.world.entity.combat.projectile.CombatProjectile;
10import com.runehive.game.world.entity.combat.strategy.CombatStrategy;
11import com.runehive.game.world.entity.combat.strategy.npc.MultiStrategy;
12import com.runehive.game.world.entity.combat.strategy.npc.NpcMagicStrategy;
13import com.runehive.game.world.entity.combat.strategy.npc.NpcMeleeStrategy;
14import com.runehive.game.world.entity.mob.Mob;
15import com.runehive.game.world.entity.mob.npc.Npc;
16import com.runehive.util.Items;
17
18import static com.runehive.game.world.entity.combat.CombatUtil.createStrategyArray;
19import static com.runehive.game.world.entity.combat.CombatUtil.randomStrategy;
20
21/** @author Daniel */
22public class CorporealBeast extends MultiStrategy {
23 private static final MagicAttack MAGIC = new MagicAttack();
24 private static final CrushMelee MELEE = new CrushMelee();
25 private static final CombatStrategy<Npc>[] STRATEGIES = createStrategyArray(MAGIC, MELEE);
29
30
31
32 public CorporealBeast() {
33 currentStrategy = randomStrategy(STRATEGIES);
34 }
35
36 @Override
37 public boolean canAttack(Npc attacker, Mob defender) {
38 return currentStrategy.canAttack(attacker, defender);
39 }
40
41 @Override
42 public void finishOutgoing(Npc attacker, Mob defender) {
43 currentStrategy.finishOutgoing(attacker, defender);
44 currentStrategy = randomStrategy(STRATEGIES);
45 }
46
47 @Override
48 public void block(Mob attacker, Npc defender, Hit hit, CombatType combatType) {
49 //TODO: 1/8 chance that the dark core will spawn
50 defender.getCombat().attack(attacker);
51 super.block(attacker, defender, hit, combatType);
52 }
53
54 @Override
55 public int getAttackDelay(Npc attacker, Mob defender, FightType fightType) {
56 return attacker.definition.getAttackDelay();
57 }
58
59 @Override
60 public int modifyAccuracy(Npc attacker, Mob defender, int roll) {
61 return (int) (roll * 5.05);
62 }
63
64 private static final class CrushMelee extends NpcMeleeStrategy {
65 private static final Animation ANIMATION = new Animation(1682, UpdatePriority.HIGH);
66
67 @Override
68 public int getAttackDistance(Npc attacker, FightType fightType) {
69 return 2;
70 }
71
72 @Override
73 public Animation getAttackAnimation(Npc attacker, Mob defender) {
74 return ANIMATION;
75 }
76
77 @Override
78 public CombatHit[] getHits(Npc attacker, Mob defender) {
79 return new CombatHit[]{nextMeleeHit(attacker, defender)};
80 }
81 }
82
83 private static class MagicAttack extends NpcMagicStrategy {
84 private static final Animation ANIMATION = new Animation(1679, UpdatePriority.HIGH);
85
86 private MagicAttack() {
87 super(CombatProjectile.getDefinition("Corporeal Beast Magic"));
88 }
89
90 @Override
91 public void start(Npc attacker, Mob defender, Hit[] hits) {
92 super.start(attacker, defender, hits);
93 }
94
95 @Override
96 public void hit(Npc attacker, Mob defender, Hit hit) {
97 super.hit(attacker, defender, hit);
98 }
99
100 @Override
101 public CombatHit[] getHits(Npc attacker, Mob defender) {
102 return new CombatHit[] { nextMagicHit(attacker, defender, 65) };
103 }
104
105 @Override
106 public Animation getAttackAnimation(Npc attacker, Mob defender) {
107 return ANIMATION;
108 }
109
110 @Override
111 public int getAttackDistance(Npc attacker, FightType fightType) {
112 return 10;
113 }
114 }
115}
Class that models a single animation used by an entity.
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
final CombatHit nextMagicHit(T attacker, Mob defender)
int getAttackDelay(Npc attacker, Mob defender, FightType fightType)
void block(Mob attacker, Npc defender, Hit hit, CombatType combatType)
Handles the mob class.
Definition Mob.java:66
Represents a non-player character in the in-game world.
Definition Npc.java:29
Combat< Npc > getCombat()
The combat of the mob.
Definition Npc.java:156
static final int BRONZE_SPEAR
Definition Items.java:1242
static final int MITHRIL_SPEAR
Definition Items.java:1248
static final int ADAMANT_SPEAR
Definition Items.java:1250
static final int ZAMORAKIAN_HASTA
Definition Items.java:11894
static final int BLACK_SPEAR
Definition Items.java:4585
static final int RUNE_SPEAR
Definition Items.java:1252
static final int IRON_SPEAR
Definition Items.java:1244
static final int DRAGON_SPEAR
Definition Items.java:1254
static final int STEEL_SPEAR
Definition Items.java:1246
static final int ZAMORAKIAN_SPEAR
Definition Items.java:11829
static final int GUTHANS_WARSPEAR
Definition Items.java:4731
Represents different priorities for updating.
The enumerated type whose elements represent the fighting types.