package com.weem.epicinventor.ai;
import com.weem.epicinventor.*;
import com.weem.epicinventor.actor.*;
import com.weem.epicinventor.utility.*;
import java.awt.*;
public class GoalFollow extends Goal {
private final static int CLOSE_DISTANCE = 25;
public GoalFollow(AI a, Registry r, String t, float b) {
super(a, r, t, b);
}
@Override
public float calculateDesire() {
float desire = 0;
Actor actor = ai.getActor();
Player player = registry.getPlayerManager().getPlayerById(target);
if(actor == null || player == null) {
return desire;
}
if(!actor.getIsFollowing()) {
return desire;
}
//figure out the distance between player and target
int actorX = actor.getMapX();
int targetX = player.getMapX();
int distance = Math.abs(targetX - actorX);
//see if the actor needs to move closer
//closer the target is, the better it feels
if (distance <= CLOSE_DISTANCE) {
desire = 0;
} else {
desire = 1.0f - ((float) CLOSE_DISTANCE / (float) distance);
}
desire *= bias;
desire = validateDesire(desire);
return desire;
}
@Override
protected void activate() {
super.activate();
}
@Override
protected void process() {
super.process();
Actor actor = ai.getActor();
Player player = registry.getPlayerManager().getPlayerById(target);
if(actor == null || player == null) {
return;
}
Point p = player.getCenterPoint();
actor.moveTowardsPoint(player.getCenterPoint());
}
@Override
public void terminate() {
super.terminate();
ai.getActor().stopMove();
}
}