Add support for animal AI

This commit is contained in:
2022-08-18 12:02:01 +02:00
parent 2bd9d077cc
commit e28667c14e
2 changed files with 49 additions and 3 deletions

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

View File

@@ -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;
}