Enable automatically picking proper weapon for enemies and update codebase to latest BASE engine
This commit is contained in:
BIN
data.mv.db
BIN
data.mv.db
Binary file not shown.
Binary file not shown.
@@ -44,26 +44,35 @@ public class WeaponBasedAI implements AI {
|
||||
if(lastAttacker != null && lastAttacker instanceof Character) {
|
||||
var attacker = (Character) lastAttacker;
|
||||
if(attacker.isAlive()) {
|
||||
runawayAI.setCharacter(attacker);
|
||||
runawayAI.setDanger(attacker);
|
||||
meleeAI.setTarget(attacker);
|
||||
archerAI.setTarget(attacker);
|
||||
} else {
|
||||
runawayAI.setCharacter(target);
|
||||
runawayAI.setDanger(target);
|
||||
meleeAI.setTarget(target);
|
||||
archerAI.setTarget(target);
|
||||
}
|
||||
}
|
||||
|
||||
if(enemy.getWeapon() == null) {
|
||||
var meleeWeapon = enemy.getMeleeWeapon();
|
||||
var rangedWeapon = enemy.getRangedWeapon();
|
||||
|
||||
if(meleeWeapon == null && rangedWeapon == null) {
|
||||
runawayAI.nextActivity(layer, dt);
|
||||
return;
|
||||
}
|
||||
|
||||
if(rangedWeapon == null || enemy.manhattanDistance(target) == 1) {
|
||||
enemy.setWeapon(meleeWeapon);
|
||||
meleeAI.nextActivity(layer, dt);
|
||||
return;
|
||||
}
|
||||
|
||||
if(enemy.getWeapon() instanceof MeleeWeapon) {
|
||||
meleeAI.nextActivity(layer, dt);
|
||||
}
|
||||
|
||||
if(enemy.getWeapon() instanceof RangedWeapon) {
|
||||
enemy.setWeapon(rangedWeapon);
|
||||
archerAI.nextActivity(layer, dt);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,12 @@ public class Enemy extends Character implements NPC {
|
||||
private AI ai = NoopAI.INSTANCE;
|
||||
private final AnimationRunner dieAnimation;
|
||||
|
||||
@Getter
|
||||
private MeleeWeapon meleeWeapon;
|
||||
|
||||
@Getter
|
||||
private RangedWeapon rangedWeapon;
|
||||
|
||||
@Getter
|
||||
private final String name;
|
||||
|
||||
@@ -42,9 +48,11 @@ public class Enemy extends Character implements NPC {
|
||||
var rangedWeaponTemplate = template.getRangedWeapon();
|
||||
|
||||
if(meleeWeaponTemplate != null) {
|
||||
setWeapon(new MeleeWeapon(context, runner.getMeleeWeaponDAO().find(meleeWeaponTemplate)));
|
||||
} else if(rangedWeaponTemplate != null) {
|
||||
setWeapon(new RangedWeapon(context, runner.getRangedWeaponDAO().find(rangedWeaponTemplate)));
|
||||
this.meleeWeapon = new MeleeWeapon(context, runner.getMeleeWeaponDAO().find(meleeWeaponTemplate));
|
||||
}
|
||||
|
||||
if(rangedWeaponTemplate != null) {
|
||||
this.rangedWeapon = new RangedWeapon(context, runner.getRangedWeaponDAO().find(rangedWeaponTemplate));
|
||||
}
|
||||
|
||||
this.dieAnimation = new SimpleAnimationRunner(template.getDieAnimation());
|
||||
|
||||
@@ -93,6 +93,10 @@ public abstract class BaseMapHandler implements MapHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public Enemy enemy(@NonNull String id) {
|
||||
return new Enemy(context, runner.getEnemyDAO().find(id));
|
||||
}
|
||||
|
||||
public Enemy enemy(int x, int y, @NonNull String id) {
|
||||
var enemy = new Enemy(context, runner.getEnemyDAO().find(id));
|
||||
enemy.setCoordinates(x, y);
|
||||
@@ -108,7 +112,7 @@ public abstract class BaseMapHandler implements MapHandler {
|
||||
}
|
||||
|
||||
public EntitySpawner spawner(int x, int y, ObjectLayer layer) {
|
||||
var spawner = new EntitySpawner(x, y, map, layer).trackEntities(EnemyDiedEvent.TYPE);
|
||||
var spawner = new EntitySpawner(x, y, context, map, layer).trackEntities(EnemyDiedEvent.TYPE);
|
||||
this.spawners.add(spawner);
|
||||
return spawner;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user