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) {
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);
}
}
}

View File

@@ -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());

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) {
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;
}