v2.3.0: improved DM-201 target selection when shooting gas
This commit is contained in:
@@ -40,7 +40,7 @@ public class DM201 extends DM200 {
|
||||
|
||||
properties.add(Property.IMMOVABLE);
|
||||
|
||||
HUNTING = new Mob.Hunting();
|
||||
HUNTING = new Hunting();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -50,30 +50,6 @@ public class DM201 extends DM200 {
|
||||
|
||||
private boolean threatened = false;
|
||||
|
||||
@Override
|
||||
protected boolean act() {
|
||||
|
||||
//in case DM-201 hasn't been able to act yet
|
||||
if (fieldOfView == null || fieldOfView.length != Dungeon.level.length()){
|
||||
fieldOfView = new boolean[Dungeon.level.length()];
|
||||
Dungeon.level.updateFieldOfView( this, fieldOfView );
|
||||
}
|
||||
|
||||
if (paralysed <= 0 && state == HUNTING && enemy != null && enemySeen && threatened
|
||||
&& canVent(enemy.pos) && !Dungeon.level.adjacent(pos, enemy.pos)
|
||||
&& fieldOfView[enemy.pos] && enemy.invisible <= 0){
|
||||
enemySeen = enemy.isAlive() && fieldOfView[enemy.pos] && enemy.invisible <= 0;
|
||||
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
|
||||
sprite.zap( enemy.pos );
|
||||
return false;
|
||||
} else {
|
||||
zap();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.act();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void damage(int dmg, Object src) {
|
||||
if ((src instanceof Char && !Dungeon.level.adjacent(pos, ((Char)src).pos))
|
||||
@@ -101,14 +77,19 @@ public class DM201 extends DM200 {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canVent(int target) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean getCloser(int target) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean getFurther(int target) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -124,4 +105,25 @@ public class DM201 extends DM200 {
|
||||
Dungeon.level.drop( new MetalShard(), pos + ofs ).sprite.drop( pos );
|
||||
}
|
||||
|
||||
private class Hunting extends Mob.Hunting {
|
||||
|
||||
@Override
|
||||
public boolean act( boolean enemyInFOV, boolean justAlerted ) {
|
||||
|
||||
if (threatened && enemyInFOV){
|
||||
if (sprite != null && (sprite.visible || enemy.sprite.visible)) {
|
||||
sprite.zap( enemy.pos );
|
||||
return false;
|
||||
} else {
|
||||
zap();
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return super.act( enemyInFOV, justAlerted );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user