Rogue: Savage Rats, a retro-themed dungeon crawler
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.
 
 
rogue-savage-rats/src/mightypork/rogue/world/entity/entities/PlayerEntity.java

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