Beispiel #1
0
        private static RouteTypes RunRoute(Player player, RouteTypes routeTypes)
        {
            double time = 0;

            routeTypes.ResetChanges();
            double maxSpeed     = GetMaxSpeed(player.GetSpeed());
            double acceleration = GetAcceleration(player.GetAcceleration());

            while (time < TIME_VAL)
            {
                double currSpeed         = routeTypes.CurrSpeed;
                double distanceTravelled = 0;
                if (maxSpeed == currSpeed)
                {
                    distanceTravelled = MetersToFeet(CalculateDistance(MPHtoMPS(currSpeed), TIME_VAL - time));
                }
                else
                {
                    distanceTravelled = MetersToFeet(CalculateDistance(MPHtoMPS(currSpeed), TIME_VAL - time, acceleration));
                    currSpeed         = MPStoMPH(CalculateFinalSpeed(MPHtoMPS(currSpeed), TIME_VAL - time, acceleration));
                }
                double distanceLeft = routeTypes.GetDistanceLeftOnCurrentBranch();

                if (distanceLeft == -1)
                {
                    routeTypes.Ended = true;
                    break;
                }

                if (distanceLeft > distanceTravelled)
                {
                    time = TIME_VAL;
                }
                else
                {
                    routeTypes.ChangeDirection();
                    double oldDistance = distanceTravelled;
                    distanceTravelled = distanceLeft;
                    if (maxSpeed == routeTypes.CurrSpeed)
                    {
                        time = CalculateTime(MPHtoMPS(maxSpeed), FeetToMeters(distanceTravelled));
                    }
                    else
                    {
                        double addedTime = CalculateTime(MPHtoMPS(routeTypes.CurrSpeed), FeetToMeters(distanceTravelled), acceleration);
                        time     += addedTime;
                        currSpeed = MPStoMPH(CalculateFinalSpeed(MPHtoMPS(currSpeed), addedTime, acceleration));
                    }
                }
                routeTypes.Location += distanceTravelled;
                routeTypes.CurrSpeed = currSpeed;
            }

            return(routeTypes);
        }