package game.ai; import game.entity.types.EntityLiving; import game.world.Vec3; public class EntityAIWander extends EntityAIBase { private EntityLiving entity; private double xPosition; private double yPosition; private double zPosition; private double speed; private int executionChance; // private boolean mustUpdate; public EntityAIWander(EntityLiving creatureIn, double speedIn) { this(creatureIn, speedIn, 120); } public EntityAIWander(EntityLiving creatureIn, double speedIn, int chance) { this.entity = creatureIn; this.speed = speedIn; this.executionChance = chance; this.setMutexBits(1); } /** * Returns whether the EntityAIBase should begin execution. */ public boolean shouldExecute() { // if (!this.mustUpdate) // { // if (this.entity.getAge() >= 100) // { // return false; // } if (this.entity.getRNG().zrange(this.executionChance) != 0) { return false; } // } Vec3 vec3 = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7); if (vec3 == null) { return false; } else { this.xPosition = vec3.xCoord; this.yPosition = vec3.yCoord; this.zPosition = vec3.zCoord; // this.mustUpdate = false; return true; } } /** * Returns whether an in-progress EntityAIBase should continue executing */ public boolean continueExecuting() { return !this.entity.getNavigator().noPath(); } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed); } // /** // * Makes task to bypass chance // */ // public void makeUpdate() // { // this.mustUpdate = true; // } // // /** // * Changes task random possibility for execution // */ // public void setExecutionChance(int newchance) // { // this.executionChance = newchance; // } }