public IEnumerable <Act.Status> GoToRandomTarget(float radius) { Vector3 randomVector = MathFunctions.RandVector3Cube() * radius; Vector3 target = Physics.ClampToBounds(Position + randomVector); float dist = (target - Position).Length(); Timer timout = new Timer(3.0f, false); while (dist > 3.0f) { timout.Update(DwarfTime.LastTime); if (timout.HasTriggered) { break; } Vector3 output = Creature.Controller.GetOutput(DwarfTime.Dt, target, Position); output.Normalize(); output *= 10; Physics.ApplyForce(new Vector3(output.X, 0.0f, output.Z), DwarfTime.Dt); dist = (target - Position).Length(); yield return(Act.Status.Running); } yield return(Act.Status.Success); }