Add support for animal AI
This commit is contained in:
42
src/main/java/com/bartlomiejpluta/demo/ai/AnimalAI.java
Normal file
42
src/main/java/com/bartlomiejpluta/demo/ai/AnimalAI.java
Normal file
@@ -0,0 +1,42 @@
|
||||
package com.bartlomiejpluta.demo.ai;
|
||||
|
||||
import lombok.*;
|
||||
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
|
||||
import com.bartlomiejpluta.base.api.ai.*;
|
||||
import com.bartlomiejpluta.base.api.move.Direction;
|
||||
import com.bartlomiejpluta.base.lib.ai.*;
|
||||
|
||||
import com.bartlomiejpluta.demo.entity.Enemy;
|
||||
import com.bartlomiejpluta.demo.entity.Character;
|
||||
|
||||
public class AnimalAI implements AI {
|
||||
private final Enemy animal;
|
||||
private final Character character;
|
||||
private final int range;
|
||||
private final AI idleAI;
|
||||
private final AI runawayAI;
|
||||
|
||||
public AnimalAI(Enemy animal, Character character, int range) {
|
||||
this.animal = animal;
|
||||
this.character = character;
|
||||
this.range = range;
|
||||
this.idleAI = new RandomMovementAI(animal, 4);
|
||||
this.runawayAI = new RunawayAI<>(animal, character);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nextActivity(ObjectLayer layer, float dt) {
|
||||
if(animal.isMoving()) {
|
||||
return;
|
||||
}
|
||||
|
||||
var distance = animal.manhattanDistance(character);
|
||||
|
||||
if(animal.getHp() < animal.getMaxHp() && distance < range) {
|
||||
runawayAI.nextActivity(layer, dt);
|
||||
return;
|
||||
}
|
||||
|
||||
idleAI.nextActivity(layer, dt);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ 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.base.lib.ai.*;
|
||||
import com.bartlomiejpluta.base.lib.animation.*;
|
||||
|
||||
import com.bartlomiejpluta.demo.runner.DemoRunner;
|
||||
@@ -80,9 +80,13 @@ public class Enemy extends Character implements NPC {
|
||||
}
|
||||
|
||||
public Enemy campAndHunt(Character target, int range) {
|
||||
var ai = new SimpleSniperAI(this, target, range);
|
||||
this.ai = new SimpleSniperAI(this, target, range);
|
||||
|
||||
this.ai = ai;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Enemy asAnimal(Character source, int range) {
|
||||
this.ai = new AnimalAI(this, source, range);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user