package de.stealmycode.beehive.model.world.animals;
import java.util.List;
import de.stealmycode.beehive.model.world.AbstractDrawableObject;
import de.stealmycode.beehive.model.world.Field;
import de.stealmycode.beehive.model.world.FieldProperty;
import de.stealmycode.beehive.model.world.IAttackable;
import de.stealmycode.beehive.model.world.Pathfinder;
import de.stealmycode.beehive.model.world.World;
import de.stealmycode.beehive.utils.Log;
import de.stealmycode.beehive.utils.Position;
public abstract class AbstractMovableObject extends AbstractDrawableObject implements IMovable, IAttackable {
private List<Position> path = null;
@Override
public abstract int getAttack();
@Override
public abstract int getDefense();
@Override
public abstract int getHealth();
private float progress = 0.0f;
public AbstractMovableObject(Position position) {
super(position);
}
@Override
public abstract int getImageID() ;
@Override
public float getProgress() {
return 0;
}
public void setProgress(float p) {
if (p < 0 || progress > 1) {
// TODO: Print Log Message
if (p < 0) p = p * -1;
if (p > 1) p = p - (int) p;
}
progress = p;
}
public abstract String getAccessibleProperty();
public boolean canStepOn(Field field) {
for (FieldProperty property : field.getProperties()) {
if (property.getName().equals(getAccessibleProperty())) {
return true;
}
}
return false;
}
/**
*
* @param world
* @param field
*/
public void move(World world, Field field) {
if (!canStepOn(field)) return;
Pathfinder pathfinder = new Pathfinder(world, this);
path = pathfinder.calculate(getPosition(), field.getPosition());
if (path != null) {
String strpath = "Path => ";
for (Position position : path) {
strpath += "[" +position.getX() + ", " + position. getY()+"] ";
}
Log.debug(strpath);
System.out.println(path);
}
}
public void move(World world, Position targetPosition) {
Pathfinder pathfinder = new Pathfinder(world, this);
path = pathfinder.calculate(getPosition(), targetPosition);
if (path != null) {
String strpath = "Path => ";
for (Position position : path) {
strpath += "[" +position.getX() + ", " + position. getY()+"] ";
}
Log.debug(strpath);
System.out.println(path);
}
}
public void step() {
if (path != null && path.size() > 0) {
setPosition(path.remove(path.size() - 1));
}
}
}