Exemple #1
0
 public Car(Telemetry telemetry, int carIdx)
 {
     this.telemetry = telemetry;
     this.carIdx    = carIdx;
     this.driver    = telemetry.SessionData.DriverInfo.Drivers.FirstOrDefault(d => d.CarIdx == carIdx);
     this.Details   = new CarDetails(telemetry, carIdx);
 }
Exemple #2
0
 public Car(Telemetry telemetry, int carIdx)
 {
     this.telemetry = telemetry;
     this.carIdx = carIdx;
     this.driver = telemetry.SessionData.DriverInfo.CompetingDrivers[carIdx];
     this.Details = new CarDetails(telemetry, carIdx);
 }
Exemple #3
0
 public Car(Telemetry telemetry, int carIdx)
 {
     this.telemetry = telemetry;
     this.carIdx    = carIdx;
     this.driver    = telemetry.SessionData.DriverInfo.CompetingDrivers[carIdx];
     this.Details   = new CarDetails(telemetry, carIdx);
 }
        public void Direct(DataSample data)
        {
            if (isWatchingRandomDriver)
                return;

            isWatchingRandomDriver = true;

            finishWatchingRandomDriverAt = data.Telemetry.SessionTimeSpan + stickyTime;

            camera = cameraControl.FindACamera(new[] { CameraAngle.LookingInfrontOfCar, CameraAngle.LookingAtCar, CameraAngle.LookingAtTrack });
            car = FindADriver(data);

            TraceInfo.WriteLine("{0} Changing camera to random driver: {1}; camera: {2}", data.Telemetry.SessionTimeSpan, car.UserName, camera.CameraName);
            cameraControl.CameraOnDriver((short)car.CarNumberRaw, camera.CameraNumber);
        }
 public BattleState(BattlePosition state, CarDetails driver)
 {
     this.State = state;
     this.Driver = driver;
 }
        static CarDetails ChangeCarForCamera(DataSample data, CarDetails driver)
        {
            if (driver == null)
                return null;

            var car = driver.Car(data);

            var otherCar = data.Telemetry.Cars.FirstOrDefault(c => c.Position == car.Position - 1);
            if( otherCar == null)
                return null;

            return otherCar.Details;
        }
        void SwitchToBattle(DataSample data, CarDetails newFollower, bool establishingShot = false)
        {
            if (establishingShot)
                TraceInfo.WriteLine("{0} New Battle started - Searching for a LookingAtCar camera", data.Telemetry.SessionTimeSpan);

            var cameraTypes = establishingShot ? new[] { CameraAngle.LookingAtCar } : new[] { CameraAngle.LookingInfrontOfCar, CameraAngle.LookingBehindCar, CameraAngle.LookingAtCar };

            var newFollowerPosition = newFollower.Car(data).Position;
            battleLeader = data.Telemetry.Cars.First(c => c.Position == newFollowerPosition - 1).Details;
            battleFollower = newFollower;

            car = newFollower;
            camera = cameraControl.FindACamera(cameraTypes, adjustedCamera, 2);
            if (establishingShot)
                adjustedCamera = camera;
            else
                adjustedCamera = null;

            if (camera.CameraAngle == CameraAngle.LookingBehindCar)
            {
                TraceInfo.WriteLine("{0} Changing to forward car, with reverse camera", data.Telemetry.SessionTimeSpan);
                car = battleLeader;
            }

            TraceInfo.WriteLine("{0} Changing camera to driver: {1}; camera: {2}; within {3}",
                data.Telemetry.SessionTimeSpan, 
                car.UserName, 
                camera.CameraName, 
                battleGap);
            
            cameraControl.CameraOnDriver(car.CarNumberRaw, camera.CameraNumber);
        }
        void UpdateBattleCamera(DataSample data)
        {
            if (data.Telemetry.SessionTimeSpan <= cameraChangeTime)
                return;

            cameraChangeTime = data.Telemetry.SessionTimeSpan + this.battleCameraChangePeriod;

            var otherCar = ChangeCarForCamera(data, battleFollower);

            var cameraSet = otherCar == null ? new [] {CameraAngle.LookingInfrontOfCar, CameraAngle.LookingAtCar} : new [] { CameraAngle.LookingInfrontOfCar, CameraAngle.LookingBehindCar, CameraAngle.LookingAtCar };
            camera = cameraControl.FindACamera(cameraSet, adjustedCamera, 2);
            adjustedCamera = null;

            if (camera.CameraAngle == CameraAngle.LookingBehindCar)
            {
                TraceInfo.WriteLine("{0} Changing to forward car, with reverse camera", data.Telemetry.SessionTimeSpan);
                car = otherCar;
            }
            else
            {
                car = battleFollower;
            }
            TraceInfo.WriteLine("{0} Changing camera to driver: {1}; camera: {2}", data.Telemetry.SessionTimeSpan, car.UserName, camera.CameraName);
            cameraControl.CameraOnDriver(car.CarNumberRaw, camera.CameraNumber);
        }
        internal static bool IsInBattle(DataSample data, TimeSpan battleGap, CarDetails follower, CarDetails leader)
        {
            var leaderCar = leader.Car(data);
            var followerCar = follower.Car(data);

            if (Settings.Default.FocusOnPreferedDriver)
            {
                if (!(preferredCarIdxs.Contains(leaderCar.CarIdx) || preferredCarIdxs.Contains(followerCar.CarIdx)))
                {
                    Trace.WriteLine("Current race battle does not include drivers within preferred list");
                    return false;
                }
            }

            if (leaderCar.Position == followerCar.Position + 1)
                return false;

            var timeGap = (leaderCar.TotalDistance - followerCar.TotalDistance) * data.Telemetry.Session.ResultsAverageLapTime;
            return timeGap < battleGap.TotalSeconds;
        }
        private static int? GetPositionFor(DataSample data, CarDetails carDetails)
        {
            var car = carDetails.Car(data);

            if (data.Telemetry.RaceDistance > 1.10)
                return car.Position;

            var session = data.SessionData.SessionInfo.Sessions.Qualifying();
            if (session == null || session.ResultsPositions == null)
                return null;

            var qualifyingResult = session.ResultsPositions.FirstOrDefault(p => p.CarIdx == car.CarIdx);
            if (qualifyingResult == null)
                return null;

            return (int)qualifyingResult.Position;
        }
        void SwitchToBattle(DataSample data, CarDetails newFollower)
        {
            var newFollowerPosition = newFollower.Car(data).Position;
            battleLeader = data.Telemetry.Cars.First(c => c.Position == newFollowerPosition - 1).Details;
            battleFollower = newFollower;

            car = newFollower; //.Car(data).Details;
            camera = cameraControl.FindACamera(CameraAngle.LookingInfrontOfCar, CameraAngle.LookingBehindCar,  CameraAngle.LookingAtCar);
            if (camera.CameraAngle == CameraAngle.LookingBehindCar)
            {
                TraceInfo.WriteLine("{0} Changing to forward car, with reverse camera", data.Telemetry.SessionTimeSpan);
                car = battleLeader;
            }

            TraceInfo.WriteLine("{0} Changing camera to driver: {1}; camera: {2}; within {3}",
                data.Telemetry.SessionTimeSpan, 
                car.UserName, 
                camera.CameraName, 
                battleGap);
            
            cameraControl.CameraOnDriver(car.CarNumberRaw, camera.CameraNumber);
        }