Implement simple follow & attack AI for enemies

This commit is contained in:
2022-08-17 19:12:00 +02:00
parent f581805efd
commit 785e1ac524
6 changed files with 83 additions and 2 deletions

View File

@@ -1,17 +1,21 @@
package com.bartlomiejpluta.demo.entity;
import lombok.*;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.ai.AI;
import com.bartlomiejpluta.base.api.ai.NPC;
import com.bartlomiejpluta.base.api.move.MoveEvent;
import com.bartlomiejpluta.base.lib.ai.NoopAI;
import com.bartlomiejpluta.demo.runner.DemoRunner;
import com.bartlomiejpluta.demo.database.model.EnemyModel;
import com.bartlomiejpluta.demo.world.weapon.MeleeWeapon;
import com.bartlomiejpluta.demo.event.EnemyDiedEvent;
import com.bartlomiejpluta.demo.ai.*;
public class Enemy extends Character implements NPC {
private final EnemyModel template;
@@ -41,10 +45,23 @@ public class Enemy extends Character implements NPC {
setZIndex(-1);
ai = NoopAI.INSTANCE;
getLayer().handleEvent(new EnemyDiedEvent(this));
}
@Override
public String toString() {
return template.getName() + "@" + hashCode();
}
public Enemy followAndAttack(Character target, int range) {
var ai = new SimpleEnemyAI(this, target, range);
addEventListener(MoveEvent.TYPE, e -> ai.recomputePath());
addEventListener(EnemyDiedEvent.TYPE, e -> ai.recomputePath());
this.ai = ai;
return this;
}
}