tcr/java/src/game/ai/EntityAIWander.java

95 lines
2.2 KiB
Java
Raw Normal View History

2025-03-11 00:23:54 +01:00
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;
// }
}