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