Enable automatically picking proper weapon for enemies and update codebase to latest BASE engine

This commit is contained in:
2022-08-19 14:38:05 +02:00
parent 9124f5c58a
commit ccd3e44130
5 changed files with 31 additions and 10 deletions

Binary file not shown.

View File

@@ -44,26 +44,35 @@ public class WeaponBasedAI implements AI {
if(lastAttacker != null && lastAttacker instanceof Character) { if(lastAttacker != null && lastAttacker instanceof Character) {
var attacker = (Character) lastAttacker; var attacker = (Character) lastAttacker;
if(attacker.isAlive()) { if(attacker.isAlive()) {
runawayAI.setCharacter(attacker); runawayAI.setDanger(attacker);
meleeAI.setTarget(attacker); meleeAI.setTarget(attacker);
archerAI.setTarget(attacker); archerAI.setTarget(attacker);
} else { } else {
runawayAI.setCharacter(target); runawayAI.setDanger(target);
meleeAI.setTarget(target); meleeAI.setTarget(target);
archerAI.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); 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) { if(enemy.getWeapon() instanceof MeleeWeapon) {
meleeAI.nextActivity(layer, dt); meleeAI.nextActivity(layer, dt);
} }
if(enemy.getWeapon() instanceof RangedWeapon) { enemy.setWeapon(rangedWeapon);
archerAI.nextActivity(layer, dt); archerAI.nextActivity(layer, dt);
}
} }
} }

View File

@@ -25,6 +25,12 @@ public class Enemy extends Character implements NPC {
private AI ai = NoopAI.INSTANCE; private AI ai = NoopAI.INSTANCE;
private final AnimationRunner dieAnimation; private final AnimationRunner dieAnimation;
@Getter
private MeleeWeapon meleeWeapon;
@Getter
private RangedWeapon rangedWeapon;
@Getter @Getter
private final String name; private final String name;
@@ -42,9 +48,11 @@ public class Enemy extends Character implements NPC {
var rangedWeaponTemplate = template.getRangedWeapon(); var rangedWeaponTemplate = template.getRangedWeapon();
if(meleeWeaponTemplate != null) { if(meleeWeaponTemplate != null) {
setWeapon(new MeleeWeapon(context, runner.getMeleeWeaponDAO().find(meleeWeaponTemplate))); this.meleeWeapon = new MeleeWeapon(context, runner.getMeleeWeaponDAO().find(meleeWeaponTemplate));
} else if(rangedWeaponTemplate != null) { }
setWeapon(new RangedWeapon(context, runner.getRangedWeaponDAO().find(rangedWeaponTemplate)));
if(rangedWeaponTemplate != null) {
this.rangedWeapon = new RangedWeapon(context, runner.getRangedWeaponDAO().find(rangedWeaponTemplate));
} }
this.dieAnimation = new SimpleAnimationRunner(template.getDieAnimation()); this.dieAnimation = new SimpleAnimationRunner(template.getDieAnimation());

View File

@@ -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) { public Enemy enemy(int x, int y, @NonNull String id) {
var enemy = new Enemy(context, runner.getEnemyDAO().find(id)); var enemy = new Enemy(context, runner.getEnemyDAO().find(id));
enemy.setCoordinates(x, y); enemy.setCoordinates(x, y);
@@ -108,7 +112,7 @@ public abstract class BaseMapHandler implements MapHandler {
} }
public EntitySpawner spawner(int x, int y, ObjectLayer layer) { 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); this.spawners.add(spawner);
return spawner; return spawner;
} }