-
Notifications
You must be signed in to change notification settings - Fork 0
/
BossMinionSpawn.java
93 lines (84 loc) · 3.08 KB
/
BossMinionSpawn.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import greenfoot.*;
/**
* Hier wird die Minion-spawn fähigkeit implementiert. Es werden 4 Gegner um den Boss rum
* gespawnt, die den Spieler mit begrenzter Lebenszeit verfolgen
*
* @author Alex, Daniel
* @version 26.06.2020
*/
public class BossMinionSpawn implements IBossAbility {
// Wie lange soll die Fähigkeit dauern?
private final int MAX_ABILITY_TIME = 400;
private int abilityTimer = 0;
// Feld in dem die gespawnten Gegner gespeichert werden
private Bird[] minions;
/**
* Führt einen Schritt der Fähigkeit aus.
* @param boss Boss, der die Fähigkeit ausführt
* @return Boolean, ob die Methode nochmal aufgerufen werden soll / Die Fähigkeit nicht zu ende ist
*/
public boolean useAbility(Boss boss) {
boss.setInAbility(true);
// Beim starten alle Minions spawnen
if(abilityTimer == 0) {
SoundManager.playSound("sounds/boss_minions.wav", SoundManager.getSFXVol());
minions = new Bird[4];
// 4 Vögel-gegner erzeugen und zur Welt hinzufügen
for(int i = 0; i < 4; ++i)
minions[i] = new Bird();
int bossX = boss.getX(), bossY = boss.getY(), bossWidth = boss.getImage().getWidth(), bossHeight = boss.getImage().getHeight();
DungeonWorld.getWorld().addObject(minions[0], bossX - bossWidth, bossY);
DungeonWorld.getWorld().addObject(minions[1], bossX + bossWidth, bossY);
DungeonWorld.getWorld().addObject(minions[2], bossX, bossY - bossHeight);
DungeonWorld.getWorld().addObject(minions[3], bossX, bossY + bossHeight);
// Gegner die ausserhalb des Raumes sind entfernen
for(Bird b : minions) {
if(WorldManager.outOfBounds(b.getX(), b.getY()) || b.inCollider())
b.kill();
}
}
// Dem Spieler weiterhin folgen
boss.followPlayer();
abilityTimer++;
// Zurückgeben ob noch Zeit über ist
return abilityTimer <= MAX_ABILITY_TIME;
}
/**
* Stoppt die Fähigkeit und resettet alles
* @param boss Boss, für den die Fähigkeit gestoppt werden soll
*/
public void stopAbility(Boss boss) {
// Alle Gegner löschen
if(minions != null) {
for(int i = 0; i < 4; ++i) {
if(minions[i] != null)
minions[i].kill();
}
minions = null;
}
abilityTimer = 0;
boss.setInAbility(false);
}
/**
* Gibt den Namen der Fähigkeit zurück
* @return Name der Fähigkeit als String
*/
public String getAbilityName() {
return "minion";
}
// Autor: Daniel
/**
* Verwaltet die Animation des Bosses in Berücksichtigung der aktuellen Fähigkeit.
* @author Daniel
*/
public void manageAnim(Boss boss) {
if( abilityTimer >= 32){
boss.setBossState("NORMAL");
boss.manageNormalAnim();
}
else{
boss.setBossState(getAbilityName());
boss.setAnimationState("IDLE");
}
}
}