public RulePaceLaps(CameraControl cameraControl, EditMarker restartMarker, EditMarker battleMarker)
        {
            this.cameraControl = cameraControl;
            this.restartMarker = restartMarker;
            this.battleMarker = battleMarker;

            wasUnderPaceCar = false;
        }
 public RuleBattle(CameraControl cameraControl, EditMarker editMarker, TimeSpan cameraStickyPeriod, TimeSpan battleStickyPeriod, TimeSpan battleGap, double battleFactor)
 {
     this.cameraControl = cameraControl;
     this.editMarker = editMarker;
     this.battleStickyPeriod = battleStickyPeriod;
     this.battleCameraChangePeriod = cameraStickyPeriod;
     this.battleGap = battleGap;
     this.battleFactor = battleFactor;
 }
        public RuleIncident(CameraControl cameraControl, RemovalEdits removalEdits, Incidents incidents, int limitDownTo)
        {
            this.editMarker = removalEdits.For(InterestState.Incident);
            this.cameraControl = cameraControl;
            this.limitDownTo = limitDownTo;

            nextIncident = incidents.GetEnumerator();
            nextIncident.MoveNext();
            if (nextIncident.Current != null)
                TraceInfo.WriteLine("First incident at {0}", nextIncident.Current.StartSessionTime);
        }
        public RuleRandomDriver(CameraControl cameraControl, SessionData sessionData, TimeSpan stickyTime)
        {
            this.cameraControl = cameraControl;
            this.sessionData = sessionData;
            this.stickyTime = stickyTime;

            allCarIndexes = sessionData.DriverInfo.CompetingDrivers.Where(x => !x.IsPaceCar).Select(x => x.CarIdx).ToArray();

            if (Settings.Default.PreferredDriverNames != null && Settings.Default.PreferredDriverNames.Length > 0)
            {
                preferredCarIndexes = sessionData.DriverInfo.CompetingDrivers
                    .Where(x => Settings.Default.PreferredDrivers.Contains(x.UserName.ToLower()))
                    .Select(x => x.CarIdx)
                    .ToArray();
            }
            else
                preferredCarIndexes = allCarIndexes;

            randomDriverNumber = new Random();
        }
        public ReplayControl(SessionData sessionData, Incidents incidents, RemovalEdits removalEdits, TrackCameras trackCameras)
        {
            var cameras = trackCameras.Where(tc => tc.TrackName == sessionData.WeekendInfo.TrackDisplayName).ToArray();

            TraceInfo.WriteLineIf(cameras.Count() <= 0, "Track Cameras not defined for {0}", sessionData.WeekendInfo.TrackDisplayName);
            Debug.Assert(cameras.Count() > 0, "Track Cameras not defined for {0}".F(sessionData.WeekendInfo.TrackDisplayName));

            foreach (var tc in cameras)
                tc.CameraNumber = (short)sessionData.CameraInfo.Groups.First(g => g.GroupName.ToLower() == tc.CameraName.ToLower()).GroupNum;

            var camera = cameras.First(tc => tc.IsRaceStart);

            var cameraControl = new CameraControl(cameras);
            cameraControl.CameraOnPositon(1, camera.CameraNumber);

            var battleMarker = removalEdits.For(InterestState.Battle);
            var restartMarker = removalEdits.For(InterestState.Restart);

            var ruleLastSectors = new RuleLastLapPeriod(cameraControl, removalEdits);
            var ruleUnlimitedIncident = new RuleIncident(cameraControl, removalEdits, incidents, 999);
            var ruleLimitedIncident = new RuleIncident(cameraControl, removalEdits, incidents, Settings.Default.IgnoreIncidentsBelowPosition);
            var ruleFirstSectors = new RuleFirstLapPeriod(cameraControl, removalEdits);
            var rulePaceLaps = new RulePaceLaps(cameraControl, restartMarker, battleMarker);
            var ruleBattle = new RuleBattle(cameraControl, battleMarker, Settings.Default.CameraStickyPeriod, Settings.Default.BattleStickyPeriod, Settings.Default.BattleGap, Settings.Default.BattleFactor2);
            ruleRandom = new RuleRandomDriver(cameraControl, sessionData, Settings.Default.CameraStickyPeriod);

            var ruleForFirstSectors = Settings.Default.IgnoreIncidentsDuringRaceStart ? ruleFirstSectors : ruleFirstSectors.WithVeto(ruleUnlimitedIncident);

            directionRules = new IDirectionRule[] { 
                ruleLastSectors,
                ruleForFirstSectors,
                rulePaceLaps.WithVeto(ruleUnlimitedIncident.WithVeto(ruleLastSectors)),
                ruleBattle.WithVeto(ruleLimitedIncident.WithVeto(ruleLastSectors)),
                ruleUnlimitedIncident.WithVeto(ruleLastSectors),
                ruleRandom.WithVeto(ruleLastSectors)
            };

            currentRule = directionRules[0];
        }
 public RuleLastLapPeriod(CameraControl cameraControl, RemovalEdits removalEdits)
 {
     this.editMarker = removalEdits.For(InterestState.LastLap);
     this.cameraControl = cameraControl;
 }
Example #7
0
 public RuleFirstLapPeriod(CameraControl cameraControl, RemovalEdits removalEdits)
 {
     editMarker         = removalEdits.For(InterestState.FirstLap);
     this.cameraControl = cameraControl;
 }