diff --git a/data.mv.db b/data.mv.db index fa0788b..831c088 100644 Binary files a/data.mv.db and b/data.mv.db differ diff --git a/maps/f845355e-b9ad-4884-a217-dd3a4c18a3fa.dat b/maps/f845355e-b9ad-4884-a217-dd3a4c18a3fa.dat index de2ff58..b51af9c 100644 Binary files a/maps/f845355e-b9ad-4884-a217-dd3a4c18a3fa.dat and b/maps/f845355e-b9ad-4884-a217-dd3a4c18a3fa.dat differ diff --git a/src/main/java/com/bartlomiejpluta/demo/ai/WeaponBasedAI.java b/src/main/java/com/bartlomiejpluta/demo/ai/WeaponBasedAI.java index 03d0251..422911b 100644 --- a/src/main/java/com/bartlomiejpluta/demo/ai/WeaponBasedAI.java +++ b/src/main/java/com/bartlomiejpluta/demo/ai/WeaponBasedAI.java @@ -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) { - archerAI.nextActivity(layer, dt); - } + enemy.setWeapon(rangedWeapon); + archerAI.nextActivity(layer, dt); } } \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java index bca87eb..ee1768d 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Enemy.java @@ -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()); diff --git a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java index 9b29bf3..0aa8966 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java @@ -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; }