v0.6.2: fixed bugs and improved ai of sad ghost and evil eyes
This commit is contained in:
parent
051dddf835
commit
6a3eeb62cc
|
@ -94,7 +94,7 @@ public class Eye extends Mob {
|
|||
beamTarget = aim.collisionPos;
|
||||
return true;
|
||||
} else
|
||||
//if the beam is charged, it has to attack, will aim at previous location of hero.
|
||||
//if the beam is charged, it has to attack, will aim at previous location of target.
|
||||
return beamCharged;
|
||||
} else
|
||||
return super.canAttack(enemy);
|
||||
|
@ -229,8 +229,8 @@ public class Eye extends Mob {
|
|||
private class Hunting extends Mob.Hunting{
|
||||
@Override
|
||||
public boolean act(boolean enemyInFOV, boolean justAlerted) {
|
||||
//always attack if the beam is charged, no exceptions
|
||||
if (beamCharged && canAttack(enemy)) {
|
||||
//even if enemy isn't seen, attack them if the beam is charged
|
||||
if (beamCharged && enemy != null && canAttack(enemy)) {
|
||||
enemySeen = enemyInFOV;
|
||||
return doAttack(enemy);
|
||||
}
|
||||
|
|
|
@ -69,7 +69,6 @@ import com.watabou.utils.PathFinder;
|
|||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class DriedRose extends Artifact {
|
||||
|
||||
|
@ -414,6 +413,8 @@ public class DriedRose extends Artifact {
|
|||
public void saySpawned(){
|
||||
if (Messages.lang() != Languages.ENGLISH) return; //don't say anything if not on english
|
||||
int i = (Dungeon.depth - 1) / 5;
|
||||
fieldOfView = new boolean[Dungeon.level.length()];
|
||||
Dungeon.level.updateFieldOfView(this, fieldOfView);
|
||||
if (chooseEnemy() == null)
|
||||
yell( Random.element( VOICE_AMBIENT[i] ) );
|
||||
else
|
||||
|
@ -461,37 +462,16 @@ public class DriedRose extends Artifact {
|
|||
return super.act();
|
||||
}
|
||||
|
||||
//prioritizes closest enemy, and will never attack something far from the player
|
||||
@Override
|
||||
protected Char chooseEnemy() {
|
||||
if (enemy == null
|
||||
|| !enemy.isAlive()
|
||||
|| !Dungeon.level.mobs.contains(enemy)
|
||||
|| Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) > 8
|
||||
|| enemy.alignment != Alignment.ENEMY
|
||||
|| state == WANDERING) {
|
||||
Char enemy = super.chooseEnemy();
|
||||
|
||||
HashSet<Mob> enemies = new HashSet<>();
|
||||
for (Mob mob : Dungeon.level.mobs) {
|
||||
if (mob.alignment == Alignment.ENEMY
|
||||
&& fieldOfView[mob.pos]
|
||||
&& Dungeon.level.distance(mob.pos, Dungeon.hero.pos) <= 8
|
||||
&& mob.state != mob.PASSIVE) {
|
||||
enemies.add(mob);
|
||||
}
|
||||
}
|
||||
|
||||
//go for closest enemy
|
||||
Char closest = null;
|
||||
for (Char curr : enemies){
|
||||
if (closest == null
|
||||
|| Dungeon.level.distance(pos, curr.pos) < Dungeon.level.distance(pos, closest.pos)){
|
||||
closest = curr;
|
||||
}
|
||||
}
|
||||
return closest;
|
||||
//will never attack something far from the player
|
||||
if (enemy != null && Dungeon.level.distance(enemy.pos, Dungeon.hero.pos) <= 8){
|
||||
return enemy;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
return enemy;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue
Block a user