예제 #1
0
        private void ScanMods(bool force, params string[] filenames)
        {
            void Scan()
            {
                var directories = Directory.GetDirectories(ModsDirectory).Where(x => Path.GetFileName(x)?.StartsWith("!") == false).ToList();
                var replaceMods = force || !directories.SequenceEqual(Mods.Select(x => x.ModDirectory));

                if (replaceMods)
                {
                    Mods.ReplaceEverythingBy_Direct(Directory.GetDirectories(ModsDirectory).Where(x => Path.GetFileName(x)?.StartsWith("!") == false).Select(x => new GenericMod(this, x)));
                }
                else
                {
                    foreach (var changed in filenames.Where(x => x?.EndsWith(GenericMod.DescriptionExtension, StringComparison.OrdinalIgnoreCase) == true))
                    {
                        Mods.FirstOrDefault(x => FileUtils.IsAffectedBy(changed, x.ModDirectory))?.Description.Reset();
                    }
                }

                if (replaceMods || filenames.Any(x => x == null || FileUtils.ArePathsEqual(x, ConfigFilename)))
                {
                    var state = new FileInfo(ConfigFileName);
                    if (!_lastSaved.HasValue || !state.Exists || state.LastWriteTime > _lastSaved)
                    {
                        LoadState();
                    }
                }
            }

            _operationBusy.Do(Scan);
        }
예제 #2
0
 private void ScanMods()
 {
     _operationBusy.Do(() => {
         Mods.ReplaceEverythingBy_Direct(Directory.GetDirectories(ModsDirectory)
                                         .Where(x => Path.GetFileName(x)?.StartsWith("!") == false)
                                         .Select(x => new GenericMod(this, x)));
         LoadState();
     });
 }
예제 #3
0
 private void AllowedTyres_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _legalTyresBusy.Do(() => {
         var server = Model?.SelectedObject;
         if (server == null)
         {
             return;
         }
         server.LegalTyres = AllowedTyres.SelectedItems.OfType <ServerPresetObject.TyresItem>().ToList();
     });
 }
예제 #4
0
 private void FixedSetups_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     _defaultSetupItemBusy.Do(() => {
         var server = Model?.SelectedObject;
         if (server == null)
         {
             return;
         }
         var item = e.AddedItems.OfType <ServerPresetObject.SetupItem>().FirstOrDefault();
         server.DefaultSetupItem = item;
         if (SetupItems.SelectedItems.Count > 1)
         {
             SetupItems.SelectedItems.Clear();
             SetupItems.SelectedItems.Add(item);
         }
     });
 }
예제 #5
0
 private void OnCarNodePropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
 {
     if (propertyChangedEventArgs.PropertyName == nameof(CarNode.CurrentSkin))
     {
         _busy.Do(() => {
             Skin = Car != null ? (Car.GetSkinById(CarNode?.CurrentSkin ?? "") ?? Car.SelectedSkin) : null;
         });
     }
 }
예제 #6
0
        private void UpdateSlots()
        {
            var newList = Renderer.CarSlots.Select(x => Slots.FirstOrDefault(y => ReferenceEquals(y.Slot, x)) ?? new CarSlotWrapped(x));

            _listBusy.Do(() => Slots.ReplaceIfDifferBy(newList));

            foreach (var slot in Slots)
            {
                slot.MainCar = ReferenceEquals(Renderer.MainSlot, slot.Slot);
            }
        }
예제 #7
0
        public async Task Test()
        {
            var busy  = new Busy();
            var value = 0;

            busy.DoDelay(() => value++, 10).Ignore();
            busy.Do(() => value++);
            Assert.AreEqual(0, value);
            await Task.Delay(100);

            Assert.AreEqual(1, value);
        }