Beispiel #1
0
        private GenericModsEnabler(string rootDirectory, string modsDirectory, bool useHardLinks = true)
        {
            FileUtils.EnsureDirectoryExists(rootDirectory);
            FileUtils.EnsureDirectoryExists(modsDirectory);

            RootDirectory  = rootDirectory;
            ModsDirectory  = modsDirectory;
            ConfigFilename = Path.Combine(ModsDirectory, ConfigFileName);

            _useHardLinks = useHardLinks;
            Mods          = new ChangeableObservableCollection <GenericMod>();
            ScanMods(false);

            FileUtils.EnsureDirectoryExists(modsDirectory);
            _watcher = new FileSystemWatcher {
                Path                  = modsDirectory,
                NotifyFilter          = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
                Filter                = "*",
                EnableRaisingEvents   = true,
                IncludeSubdirectories = true
            };

            _watcher.Changed += OnWatcher;
            _watcher.Created += OnWatcher;
            _watcher.Deleted += OnWatcher;
            _watcher.Renamed += OnWatcher;
        }
Beispiel #2
0
        public ServerPresetsManager()
        {
            SavedDrivers = new ChangeableObservableCollection <ServerSavedDriver>(ServerSavedDriver.Load(DriversFilename));
            SavedDrivers.CollectionChanged   += OnSavedDriversCollectionChanged;
            SavedDrivers.ItemPropertyChanged += OnSavedDriversItemPropertyChanged;

            var directory = Path.GetDirectoryName(DriversFilename);

            if (directory != null)
            {
                Directory.CreateDirectory(directory);

                _directoryWatcher = new FileSystemWatcher {
                    Path                  = directory,
                    NotifyFilter          = NotifyFilters.LastWrite | NotifyFilters.FileName,
                    Filter                = Path.GetFileName(DriversFilename),
                    EnableRaisingEvents   = true,
                    IncludeSubdirectories = false
                };

                _directoryWatcher.Created += OnDirectoryWatcher;
                _directoryWatcher.Renamed += OnDirectoryWatcher;
                _directoryWatcher.Changed += OnDirectoryWatcher;
                _directoryWatcher.Deleted += OnDirectoryWatcher;
            }
        }
 public ViewModel(TrackObject track, TrackSkinObject trackSkin, IEnumerable <TextureEntry> images)
 {
     Track     = track;
     TrackSkin = trackSkin;
     Images    = new ChangeableObservableCollection <TextureEntry>(images);
     Images.ItemPropertyChanged += OnItemPropertyChanged;
     UpdateSummary();
 }
Beispiel #4
0
 public ViewModel(IFilter <RaceResultsObject> filter, List <RaceResultsObject> entries)
 {
     _filter = filter;
     Entries = new ChangeableObservableCollection <RaceResultsObject>(entries);
     Entries.ItemPropertyChanged += OnPropertyChanged;
     _watcher         = new DirectoryWatcher(RaceResultsStorage.Instance.SessionsDirectory);
     _watcher.Update += OnUpdate;
 }
Beispiel #5
0
            public ObsoleteDetails(CarObject car, IEnumerable <ObsoletableAspect> aspects)
            {
                Car          = car;
                Aspects      = new ChangeableObservableCollection <ObsoletableAspect>(aspects);
                LeftUnsolved = Aspects.Count;

                Aspects.ItemPropertyChanged += OnItemPropertyChanged;
            }
 public ServerPresetObject(IFileAcManager manager, string id, bool enabled) : base(manager, id, enabled)
 {
     Sessions = new ChangeableObservableCollection <ServerSessionEntry>(new[] {
         new ServerSessionEntry("BOOK", ToolsStrings.Session_Booking, false, false),
         new ServerSessionEntry("PRACTICE", ToolsStrings.Session_Practice, true, true),
         new ServerSessionEntry("QUALIFY", ToolsStrings.Session_Qualification, true, true),
         new ServerRaceSessionEntry("RACE", ToolsStrings.Session_Race, true, true),
     });
 }
 public ViewModel(string directory, IFilter <FileInfo> filter, IEnumerable <Screenshot> screenshots)
 {
     Screenshots = new ChangeableObservableCollection <Screenshot>(screenshots);
     Screenshots.ItemPropertyChanged += OnPropertyChanged;
     _directory       = directory;
     _filter          = filter;
     _watcher         = new DirectoryWatcher(directory);
     _watcher.Update += OnUpdate;
 }
Beispiel #8
0
 public CarPaint(string detailsTexture, int flakesSize = 256, Color?defaultColor = null) : base(true)
 {
     LiveryPriority = 1;
     FlakesSize     = flakesSize;
     SupportsFlakes = flakesSize > 0;
     DetailsTexture = detailsTexture;
     DefaultColor   = defaultColor ?? Color.FromRgb(255, 255, 255);
     Patterns       = new ChangeableObservableCollection <CarPaintPattern>();
     Patterns.ItemPropertyChanged += OnPatternChanged;
     AffectedTextures.Add(detailsTexture);
 }
Beispiel #9
0
        public ServerPresetObject(IFileAcManager manager, string id, bool enabled) : base(manager, id, enabled)
        {
            SimpleSessions = new[] {
                new ServerSessionEntry("BOOK", ToolsStrings.Session_Booking, false, false),
                new ServerSessionEntry("PRACTICE", ToolsStrings.Session_Practice, true, true),
                new ServerQualificationSessionEntry("QUALIFY", ToolsStrings.Session_Qualification, true, true)
            };

            RaceSession = new ServerRaceSessionEntry("RACE", ToolsStrings.Session_Race, true, true);
            Sessions    = new ChangeableObservableCollection <ServerSessionEntry>(SimpleSessions.Append(RaceSession));
            Sessions.ItemPropertyChanged += OnSessionEntryPropertyChanged;
        }
Beispiel #10
0
        private static async Task <ChangeableObservableCollection <TyresMachineInfo> > LoadMachinesAsyncInner()
        {
            FilesStorage.Instance.Watcher(ContentCategory.NeuralTyresMachines).Update += OnUpdate;
            _list = new ChangeableObservableCollection <TyresMachineInfo>(await Task.Run(() => GetList()));
            return(_list);

            IEnumerable <TyresMachineInfo> GetList()
            {
                return(FilesStorage.Instance.GetContentFiles(ContentCategory.NeuralTyresMachines)
                       .TryToSelect(CreateTyresMachineInfo, e => NonfatalError.NotifyBackground("Failed to load tyres machine", e))
                       .ToList());
            }
        }
            public ViewModel()
            {
                Entries = new ChangeableObservableCollection <PresetPerMode>();
                Modes   = new BetterObservableCollection <Mode>();

                AppPresets   = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AppsPresetsKey));
                AudioPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.AudioPresetsKey));
                VideoPresets = new HierarchicalGroup("", UserPresetsControl.GroupPresets(AcSettingsHolder.VideoPresetsKey));

                UpdateModes();
                FilesStorage.Instance.Watcher(ContentCategory.PresetsPerModeConditions).Update += OnCategoriesUpdate;

                Saveable.Initialize();

                Entries.CollectionChanged   += OnCollectionChanged;
                Entries.ItemPropertyChanged += OnItemPropertyChanged;
            }
        protected override async Task <bool> LoadOverride(IProgress <AsyncProgressEntry> progress, CancellationToken cancellation)
        {
            await CarsManager.Instance.EnsureLoadedAsync();

            Entries = new ChangeableObservableCollection <CarObjectEntry>(
                CarsManager.Instance.EnabledOnly.OrderBy(x => x.DisplayName).Select(x => new CarObjectEntry(x)));

            for (var i = 0; i < Entries.Count; i++)
            {
                var entry = Entries[i];
                progress.Report(new AsyncProgressEntry($"Loading skins ({entry.Car.DisplayName})…", i, Entries.Count));
                await entry.Car.SkinsManager.EnsureLoadedAsync();

                entry.SelectedSkins = entry.Car.EnabledOnlySkins.Where(x => x.HasError(AcErrorType.CarSkin_PreviewIsMissing)).ToList();
            }

            Entries.ItemPropertyChanged += OnEntryPropertyChanged;
            SelectedEntry = Entries.FirstOrDefault();
            UpdateTotalSelected();
            return(Entries.Any());
        }
Beispiel #13
0
        /// <summary>
        /// Don’t forget to call it in overrided versions.
        /// </summary>
        public void Initialize(bool reset)
        {
            // ReSharper disable once VirtualMemberCallInConstructor
            _saveable = CreateSaveable();
            if (reset)
            {
                _saveable.Reset();
            }
            else
            {
                _saveable.LoadOrReset();
            }

            Slots = new ChangeableObservableCollection <CarSlotWrapped>(Renderer.CarSlots.Select(x => new CarSlotWrapped(x)));
            Slots.ItemPropertyChanged += OnSlotPropertyChanged;
            Slots.CollectionChanged   += OnSlotsCollectionChanged;
            Renderer.PropertyChanged  += OnRendererPropertyChanged;

            foreach (var slot in Slots)
            {
                slot.MainCar = ReferenceEquals(Renderer.MainSlot, slot.Slot);
            }
        }
Beispiel #14
0
 protected TexturePattern(bool enabledByDefault) : base(enabledByDefault)
 {
     Patterns = new ChangeableObservableCollection <CarPaintPattern>();
     Patterns.ItemPropertyChanged += OnPatternChanged;
 }
Beispiel #15
0
 private ContentInstallationManager()
 {
     DownloadList = new ChangeableObservableCollection <ContentInstallationEntry>();
 }
Beispiel #16
0
        protected override void LoadData(IniFile ini)
        {
            foreach (var session in Sessions)
            {
                session.Load(ini);
            }

            IsPickupModeAvailable = !Sessions.GetById(@"BOOK").IsEnabled;

            var section = ini["SERVER"];

            Name          = section.GetPossiblyEmpty("NAME");
            Password      = section.GetNonEmpty("PASSWORD");
            AdminPassword = section.GetNonEmpty("ADMIN_PASSWORD");
            ShowOnLobby   = section.GetBool("REGISTER_TO_LOBBY", true);
            LoopMode      = section.GetBool("LOOP_MODE", true);
            PickupMode    = section.GetBool("PICKUP_MODE_ENABLED", false);
            RaceOverTime  = TimeSpan.FromSeconds(section.GetDouble("RACE_OVER_TIME", 60d));
            Capacity      = section.GetInt("MAX_CLIENTS", 3);

            UdpPort        = section.GetInt("UDP_PORT", 9600);
            TcpPort        = section.GetInt("TCP_PORT", 9600);
            HttpPort       = section.GetInt("HTTP_PORT", 8081);
            SendIntervalHz = section.GetInt("CLIENT_SEND_INTERVAL_HZ", 18);
            Threads        = section.GetInt("NUM_THREADS", 2);

            TrackId       = section.GetNonEmpty("TRACK", "imola");
            TrackLayoutId = section.GetNonEmpty("CONFIG_TRACK");
            CarIds        = section.GetStrings("CARS", ';');

            Abs                = section.GetIntEnum("ABS_ALLOWED", ServerPresetAssistState.Factory);
            TractionControl    = section.GetIntEnum("TC_ALLOWED", ServerPresetAssistState.Factory);
            StabilityControl   = section.GetBool("STABILITY_ALLOWED", false);
            AutoClutch         = section.GetBool("AUTOCLUTCH_ALLOWED", false);
            TyreBlankets       = section.GetBool("TYRE_BLANKETS_ALLOWED", false);
            ForceVirtualMirror = section.GetBool("FORCE_VIRTUAL_MIRROR", true);

            FuelRate               = section.GetInt("FUEL_RATE", 100);
            DamageRate             = section.GetInt("DAMAGE_MULTIPLIER", 100);
            TyreWearRate           = section.GetInt("TYRE_WEAR_RATE", 100);
            AllowTyresOut          = section.GetInt("ALLOWED_TYRES_OUT", 2);
            MaxBallast             = section.GetInt("MAX_BALLAST_KG", 0);
            QualifyLimitPercentage = section.GetInt("QUALIFY_MAX_WAIT_PERC", 120);
            JumpStart              = section.GetIntEnum("START_RULE", ServerPresetJumpStart.CarLocked);

            SunAngle            = section.GetDouble("SUN_ANGLE", 0d);
            DynamicTrackEnabled = ini.ContainsKey(@"DYNAMIC_TRACK");
            TrackProperties     = Game.TrackProperties.Load(DynamicTrackEnabled ? ini["DYNAMIC_TRACK"] : ini["__CM_DYNAMIC_TRACK_OFF"]);

            KickVoteQuorum     = section.GetInt("KICK_QUORUM", 85);
            SessionVoteQuorum  = section.GetInt("VOTING_QUORUM", 80);
            VoteDuration       = TimeSpan.FromSeconds(section.GetDouble("VOTE_DURATION", 20d));
            BlacklistMode      = section.GetBool("BLACKLIST_MODE", true);
            MaxCollisionsPerKm = section.GetInt("MAX_CONTACTS_PER_KM", -1);

            // At least one weather entry is needed in order to launch the server
            var weather = new ChangeableObservableCollection <ServerWeatherEntry>(ini.GetSections("WEATHER").Select(x => new ServerWeatherEntry(x)));

            if (weather.Count == 0)
            {
                weather.Add(new ServerWeatherEntry());
            }
            Weather = weather;
        }
Beispiel #17
0
 private void LoadEntryListData(IniFile ini)
 {
     DriverEntries = new ChangeableObservableCollection <ServerPresetDriverEntry>(ini.GetSections("CAR").Select(x => new ServerPresetDriverEntry(x)));
 }