v3.3.0: moved handing unreachable target in hunting to its own method

This commit is contained in:
Evan Debenham
2025-10-20 13:11:02 -04:00
parent be97730e01
commit f95f20fa82
5 changed files with 54 additions and 74 deletions

View File

@@ -178,19 +178,7 @@ public class DM200 extends Mob {
} else {
//attempt to swap targets if the current one can't be reached or vented at
if (!recursing) {
Char oldEnemy = enemy;
enemy = null;
enemy = chooseEnemy();
if (enemy != null && enemy != oldEnemy) {
recursing = true;
boolean result = act(enemyInFOV, justAlerted);
recursing = false;
return result;
}
}
spend( TICK );
return true;
return handleUnreachableTarget(enemyInFOV, justAlerted);
}
}

View File

@@ -247,19 +247,7 @@ public class Golem extends Mob {
} else {
//attempt to swap targets if the current one can't be reached or teleported
if (!recursing) {
Char oldEnemy = enemy;
enemy = null;
enemy = chooseEnemy();
if (enemy != null && enemy != oldEnemy) {
recursing = true;
boolean result = act(enemyInFOV, justAlerted);
recursing = false;
return result;
}
}
spend( TICK );
return true;
return handleUnreachableTarget(enemyInFOV, justAlerted);
}
}

View File

@@ -181,8 +181,6 @@ public class Guard extends Mob {
&& !isCharmedBy( enemy )
&& !canAttack( enemy )
&& Dungeon.level.distance( pos, enemy.pos ) < 5
&& chain(enemy.pos)){
return !(sprite.visible || enemy.sprite.visible);
} else {

View File

@@ -1214,9 +1214,6 @@ public abstract class Mob extends Char {
public static final String TAG = "HUNTING";
//prevents rare infinite loop cases
protected boolean recursing = false;
@Override
public boolean act( boolean enemyInFOV, boolean justAlerted ) {
enemySeen = enemyInFOV;
@@ -1252,27 +1249,7 @@ public abstract class Mob extends Char {
} else {
//if moving towards an enemy isn't possible, try to switch targets to another enemy that is closer
//unless we have already done that and still can't move toward them, then move on.
if (!recursing) {
Char oldEnemy = enemy;
enemy = null;
enemy = chooseEnemy();
if (enemy != null && enemy != oldEnemy) {
recursing = true;
boolean result = act(enemyInFOV, justAlerted);
recursing = false;
return result;
}
}
spend( TICK );
if (!enemyInFOV) {
sprite.showLost();
state = WANDERING;
target = ((Mob.Wandering)WANDERING).randomDestination();
}
return true;
return handleUnreachableTarget(enemyInFOV, justAlerted);
}
}
}
@@ -1293,6 +1270,33 @@ public abstract class Mob extends Char {
}
return swapped;
}
//prevents rare infinite loop cases
protected boolean recursing = false;
//Try to switch targets to another enemy that is closer or reachable
//unless we have already done that and still can't move toward them, then move on.
protected boolean handleUnreachableTarget(boolean enemyInFOV, boolean justAlerted){
if (!recursing) {
Char oldEnemy = enemy;
enemy = null;
enemy = chooseEnemy();
if (enemy != null && enemy != oldEnemy) {
recursing = true;
boolean result = act(enemyInFOV, justAlerted);
recursing = false;
return result;
}
}
spend( TICK );
if (!enemyInFOV) {
sprite.showLost();
state = WANDERING;
target = ((Mob.Wandering)WANDERING).randomDestination();
}
return true;
}
}
protected class Fleeing implements AiState {

View File

@@ -400,9 +400,12 @@ public class Tengu extends Mob {
} else {
//Try to switch targets to another enemy that is closer
//unless we have already done that and still can't attack them, then move on.
if (!recursing) {
return handleUnreachableTarget(enemyInFOV, justAlerted);
}
}
@Override
protected boolean handleUnreachableTarget(boolean enemyInFOV, boolean justAlerted) {
Char oldEnemy = enemy;
enemy = null;
enemy = chooseEnemy();
@@ -412,9 +415,9 @@ public class Tengu extends Mob {
recursing = false;
return result;
}
}
//attempt to use an ability, even if enemy can't be decided
//Tengu is always hunting, so we don't lose enemy in this case
if (canUseAbility()){
return useAbility();
}
@@ -424,7 +427,6 @@ public class Tengu extends Mob {
}
}
}
//*****************************************************************************************
//***** Tengu abilities. These are expressed in game logic as buffs, blobs, and items *****