You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
2.1 KiB
119 lines
2.1 KiB
package mightypork.rogue.world.entity.entities;
|
|
|
|
|
|
import mightypork.gamecore.util.math.algo.Coord;
|
|
import mightypork.gamecore.util.math.algo.pathfinding.PathFinder;
|
|
import mightypork.rogue.world.entity.Entity;
|
|
import mightypork.rogue.world.entity.EntityModel;
|
|
import mightypork.rogue.world.entity.EntityModule;
|
|
import mightypork.rogue.world.entity.EntityPathFinder;
|
|
import mightypork.rogue.world.entity.EntityType;
|
|
import mightypork.rogue.world.entity.modules.EntityMoveListener;
|
|
import mightypork.rogue.world.entity.renderers.EntityRenderer;
|
|
import mightypork.rogue.world.entity.renderers.EntityRendererMobLR;
|
|
import mightypork.rogue.world.level.Level;
|
|
|
|
|
|
public class PlayerEntity extends Entity {
|
|
|
|
class PlayerAi extends EntityModule implements EntityMoveListener {
|
|
|
|
public PlayerAi(Entity entity)
|
|
{
|
|
super(entity);
|
|
health.setMaxHealth(24);
|
|
health.fill();
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onStepFinished()
|
|
{
|
|
entity.getLevel().explore(entity.pos.getCoord());
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onPathFinished()
|
|
{
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onPathInterrupted()
|
|
{
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean isModuleSaved()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
private PathFinder pathf;
|
|
private EntityRenderer renderer;
|
|
|
|
private final PlayerAi ai = new PlayerAi(this);
|
|
|
|
|
|
public PlayerEntity(EntityModel model, int eid)
|
|
{
|
|
super(model, eid);
|
|
|
|
pos.setStepTime(0.25);
|
|
|
|
addModule("ai", ai);
|
|
pos.addMoveListener(ai);
|
|
}
|
|
|
|
|
|
@Override
|
|
public PathFinder getPathFinder()
|
|
{
|
|
if (pathf == null) {
|
|
pathf = new EntityPathFinder(this) {
|
|
|
|
@Override
|
|
public int getCost(Coord from, Coord to)
|
|
{
|
|
if (!getLevel().getTile(pos.getCoord()).isExplored()) {
|
|
return 1000;
|
|
}
|
|
|
|
return super.getCost(from, to);
|
|
};
|
|
};
|
|
}
|
|
|
|
return pathf;
|
|
}
|
|
|
|
|
|
@Override
|
|
public void setLevel(Level level)
|
|
{
|
|
super.setLevel(level);
|
|
ai.onStepFinished(); // explore start area
|
|
}
|
|
|
|
|
|
@Override
|
|
protected EntityRenderer getRenderer()
|
|
{
|
|
if (renderer == null) {
|
|
renderer = new EntityRendererMobLR(this, "sprite.player");
|
|
}
|
|
|
|
return renderer;
|
|
}
|
|
|
|
|
|
@Override
|
|
public EntityType getType()
|
|
{
|
|
return EntityType.PLAYER;
|
|
}
|
|
}
|
|
|