public static double WheelTurnForEndZeroWheelTurnToPoint(this PCar car, Vector point, double finalAngle, double sign)
        {
            PCar physicCar = new PCar(car);

            int                 ticks      = (int)Math.Abs(Math.Round(physicCar.WheelTurn / game.CarWheelTurnChangePerTick));
            AngleReachEvent     angleReach = new AngleReachEvent(finalAngle);
            MoveToAngleFunction mover      = new MoveToAngleFunction(finalAngle);

            for (int i = 0; i < ticks; i++)
            {
                mover.Iteration(physicCar, 1);
                if (angleReach.Check(physicCar))
                {
                    break;
                }
            }

            Vector dir = physicCar.Speed.Length < 1 ? physicCar.Dir : physicCar.Dir * 0.8 + physicCar.Speed.Normalize() * 0.2;

            double distance = -(point - physicCar.Pos).Cross(dir);

            if (Math.Abs(distance) < 10)
            {
                return(0);
            }

            return(car.WheelTurn + sign * game.CarWheelTurnChangePerTick * Math.Sign(distance));
        }
Exemple #2
0
 public void setupAngleReach(Vector angleDir)
 {
     angleReachEvent = new AngleReachEvent(angleDir.Angle);
 }