Exemple #1
0
        protected virtual void LoadConditions(IniFile ini)
        {
            var conditions = LinqExtension.RangeFrom()
                             .Select(x => $@"CONDITION_{x}")
                             .TakeWhile(ini.ContainsKey)
                             .Select(x => new {
                Type  = ini[x].GetEnumNullable <PlaceConditionsType>("TYPE"),
                Value = ini[x].GetIntNullable("OBJECTIVE")
            })
                             .ToList();

            if (conditions.Count != 3 || conditions[0].Type == null ||
                conditions.Any(x => x.Value == null || x.Type != null && x.Type != conditions[0].Type))
            {
                AddError(AcErrorType.Data_KunosCareerConditions, ini["CONDITION_0"].GetNonEmpty("TYPE") ?? @"?");
            }
            else
            {
                RemoveError(AcErrorType.Data_KunosCareerConditions);
                ConditionType     = conditions[0].Type.Value;
                FirstPlaceTarget  = conditions[2].Value.Value;
                SecondPlaceTarget = conditions[1].Value.Value;
                ThirdPlaceTarget  = conditions[0].Value.Value;
            }
        }
Exemple #2
0
        public object GetPreview(string serializedData)
        {
            var ini    = IniFile.Parse(serializedData);
            var result = new StringBuilder();

            // input method
            result.AppendFormat(ControlsStrings.Controls_Preview_InputMethod, ini["HEADER"].GetEntry("INPUT_METHOD", Controls.InputMethods).DisplayName);

            // device
            var section = ini["CONTROLLERS"];
            var devices = LinqExtension.RangeFrom().Select(x => section.GetNonEmpty("CON" + x.ToInvariantString())).TakeWhile(x => x != null).Distinct().ToList();

            if (devices.Count > 1)
            {
                result.Append('\n');
                result.AppendFormat(ControlsStrings.Controls_Preview_Devices, devices.JoinToString(@", "));
            }
            else if (devices.Count == 1)
            {
                result.Append('\n');
                result.AppendFormat(ControlsStrings.Controls_Preview_Device, devices[0]);
            }

            return(new BbCodeBlock {
                BbCode = result.ToString()
            });
        }
Exemple #3
0
        public Expression <Func <InfoLog, bool> > CreatCondition(LogQuery logQuery)
        {
            var condition = LinqExtension.True <InfoLog>();

            if (!string.IsNullOrEmpty(logQuery.Content))
            {
                condition.And(a => a.Content.Contains(logQuery.Content));
            }
            if (logQuery.CreatTimeFrom.HasValue)
            {
                condition.And(a => a.CreationTime >= logQuery.CreatTimeFrom);
            }
            if (logQuery.CreatTmeTo.HasValue)
            {
                condition.And(a => a.CreationTime >= logQuery.CreatTmeTo);
            }
            if (!string.IsNullOrEmpty(logQuery.PlatformId))
            {
                condition.And(a => a.PlatformId == new ObjectId(logQuery.PlatformId));
            }
            if (!string.IsNullOrEmpty(logQuery.BusinessPosition))
            {
                condition.And(a => $".{a.BusinessPosition}.".Contains($".{logQuery.BusinessPosition}."));
            }
            if (!string.IsNullOrEmpty(logQuery.TraceInfo))
            {
                condition.And(a => a.TraceInfo.Contains(logQuery.TraceInfo));
            }
            return(condition);
        }
        public static long Evaluate(Dictionary <string, bool> coordinates)
        {
            for (var i = 0; i < 6; i++)
            {
                coordinates.Keys.ToList().ForEach(c =>
                {
                    LinqExtension.DimensionalNeighbors(c.Split(',').Select(int.Parse))
                    .Select(t => string.Join(',', t))
                    .Where(t => !coordinates.ContainsKey(t))
                    .ToList()
                    .ForEach(t => coordinates[t] = false);
                });
                var coordinatesCopy = new Dictionary <string, bool>();

                coordinates.Keys.ToList().ForEach(c =>
                {
                    var activeNeighbors = LinqExtension.DimensionalNeighbors(c.Split(',').Select(int.Parse))
                                          .Select(t => string.Join(',', t))
                                          .Where(t => coordinates.ContainsKey(t))
                                          .Select(t => coordinates[t])
                                          .Count(v => v);
                    coordinatesCopy[c] = coordinates[c] switch
                    {
                        true when(activeNeighbors < 2 || activeNeighbors > 3) => false,
                        false when activeNeighbors == 3 => true,
                        _ => coordinates[c]
                    };
                });

                coordinates = coordinatesCopy;
            }

            return(coordinates.Values.Count(v => v));
        }
        public long Calculate(List <string> input)
        {
            var plane = new TobogganPlane(input);

            return(LinqExtension
                   .TobogganRange(3, 1, input.Count)
                   .Count((t) => plane.IsTree(t.x, t.y)));
        }
Exemple #6
0
        /// <summary>Adds the specified t aggregate roots.</summary>
        /// <typeparam name="TAggregateRoot">The type of the t aggregate root.</typeparam>
        /// <param name="tAggregateRoots">The t aggregate roots.</param>
        /// <returns>IEnumerable&lt;System.Int64&gt;.</returns>
        public IEnumerable <long> Add <TAggregateRoot>(IEnumerable <TAggregateRoot> tAggregateRoots) where TAggregateRoot : EntityBase
        {
            List <long> ids = new List <long>();

            if (tAggregateRoots.Any <TAggregateRoot>())
            {
                LinqExtension.Each <TAggregateRoot>(tAggregateRoots, (Action <TAggregateRoot>)(x => ids.Add(this.Add <TAggregateRoot>(x))));
            }
            return((IEnumerable <long>)ids);
        }
        public PagedItems <T> ListarPaginado(Expression <Func <T, bool> > predicate, PagedOptions pagedFilter)
        {
            if (string.IsNullOrEmpty(pagedFilter.Sort) && pagedFilter.SortManny == null)
            {
                var props = typeof(T)
                            .GetProperties()
                            .Where(prop =>
                                   Attribute.IsDefined(prop,
                                                       typeof(System.ComponentModel.DataAnnotations.KeyAttribute)));

                pagedFilter.Sort = props.First().Name;
            }

            PagedItems <T> paged = new PagedItems <T>();

            var query = Context
                        .Set <T>()
                        .AsNoTracking()
                        .Where(predicate)
                        .AsQueryable();

            paged.Total = query.Count();

            if (!string.IsNullOrEmpty(pagedFilter.Sort))
            {
                query = LinqExtension.OrderBy(query, pagedFilter.Sort, pagedFilter.Reverse);
            }
            else
            {
                if (pagedFilter.SortManny != null)
                {
                    var list = pagedFilter.SortManny.ToList();
                    for (int i = 0; i < list.Count; i++)
                    {
                        if (i == 0)
                        {
                            query = LinqExtension.OrderBy(query, list[i].Sort, list[i].Reverse);
                        }
                        else
                        {
                            query = LinqExtension.ThenBy(query, list[i].Sort, list[i].Reverse);
                        }
                    }
                }
            }

            var skip = (pagedFilter.Page.Value * pagedFilter.Size.Value) - pagedFilter.Size.Value;

            query = query.Skip(skip);
            query = query.Take(pagedFilter.Size.Value);

            paged.Items = query.ToList();
            return(paged);
        }
        private Expression <Func <Entity.Platform, bool> > CreatCondition(PlatformQuery query)
        {
            var condition = LinqExtension.True <Entity.Platform>();

            if (!string.IsNullOrEmpty(query.AppId))
            {
                condition.And(a => a.Config.AppId == query.AppId);
            }
            if (!string.IsNullOrEmpty(query.Name))
            {
                condition.And(a => a.Name.Contains(query.Name));
            }
            return(condition);
        }
Exemple #9
0
 private static void DemoPart2()
 {
     Console.ForegroundColor = ConsoleColor.Green;
     Console.Write("1). WHERE Extension: Onderstaande functie is een aangepaste extension van Where in LINQ.");
     WhiteLine();
     LinqExtension.DemoWhere();
     Breaker();
     Console.Write("2). SELECT Extension: Onderstaande functie is een aangepaste extension van Select in LINQ.");
     WhiteLine();
     LinqExtension.DemoSelect();
     Breaker();
     Console.Write("3). ANY Extension: Onderstaande functie is een aangepaste extension van Any in LINQ.");
     WhiteLine();
     LinqExtension.DemoAny();
     Breaker();
 }
Exemple #10
0
        public static IReadOnlyList <ResolutionEntry> GetResolutions()
        {
            if (InitializeAcVideoModes())
            {
                try {
                    return(AcVideoModes.GetResolutionEntries().ToList());
                } catch (Exception e) {
                    NonfatalError.Notify(ToolsStrings.AcSettings_CannotGetResolutions, e);
                }
            }

            var d = new User32.DEVMODE();

            return(LinqExtension.RangeFrom()
                   .Select(i => User32.EnumDisplaySettings(null, i, ref d)
                                        ? new ResolutionEntry(i + 1, d.dmPelsWidth, d.dmPelsHeight, d.dmDisplayFrequency) : null)
                   .TakeWhile(x => x != null).Distinct().ToList());
        }
        protected override IEnumerable <AcPlaceholderNew> ScanOverride()
        {
            if (OptionIgnoreSkippedEvents)
            {
                return(base.ScanOverride());
            }

            var entries = Directories.GetContentDirectories().Select(x => new {
                Name = Path.GetFileName(x)?.ToLowerInvariant(),
                Path = x
            }).ToList();

            return(LinqExtension.RangeFrom(1)
                   .Select(x => @"event" + x)
                   .Select(x => entries.FirstOrDefault(y => y.Name == x))
                   .TakeWhile(x => x != null)
                   .Select(dir =>
                           CreateAcPlaceholder(Directories.GetId(dir.Path), Directories.CheckIfEnabled(dir.Path))));
        }
Exemple #12
0
        public long Calculate(List <string> input)
        {
            var plane  = new TobogganPlane(input);
            var slopes = new List <(int x, int y)>
            {
                (1, 1),
                (3, 1),
                (5, 1),
                (7, 1),
                (1, 2),
            };

            return(slopes
                   .Select(s => LinqExtension
                           .TobogganRange(s.x, s.y, input.Count)
                           .Count((t) => plane.IsTree(t.x, t.y)))
                   .Select(Convert.ToInt64)
                   .Aggregate((a, x) => a * x));
        }
Exemple #13
0
 /// <summary>修改集合</summary>
 /// <typeparam name="TAggregateRoot">The type of the t aggregate root.</typeparam>
 /// <param name="tAggregateRoots">The t aggregate roots.</param>
 public void Update <TAggregateRoot>(IQueryable <TAggregateRoot> tAggregateRoots) where TAggregateRoot : EntityBase, new()
 {
     LinqExtension.Each <TAggregateRoot>(tAggregateRoots, (Action <TAggregateRoot>)(x => this.Update <TAggregateRoot>(x, new Expression <Func <TAggregateRoot, object> > [0])));
 }
Exemple #14
0
 /// <summary>根据条件逻辑删除</summary>
 /// <typeparam name="TAggregateRoot">The type of the t aggregate root.</typeparam>
 /// <param name="tAggregateRoots">The t aggregate roots.</param>
 public void Delete <TAggregateRoot>(IQueryable <TAggregateRoot> tAggregateRoots) where TAggregateRoot : EntityBase, new()
 {
     LinqExtension.Each <TAggregateRoot>(tAggregateRoots, new Action <TAggregateRoot>(this.Delete <TAggregateRoot>));
 }
Exemple #15
0
 /// <summary>根据条件删除</summary>
 /// <typeparam name="TAggregateRoot">The type of the t aggregate root.</typeparam>
 /// <param name="tAggregateRoots">The t aggregate roots.</param>
 public void Remove <TAggregateRoot>(IQueryable <TAggregateRoot> tAggregateRoots) where TAggregateRoot : EntityBase
 {
     LinqExtension.Each <TAggregateRoot>(tAggregateRoots, new Action <TAggregateRoot>(this.Remove <TAggregateRoot>));
 }
Exemple #16
0
 /// <summary>根据条件删除</summary>
 /// <typeparam name="TAggregateRoot">The type of the t aggregate root.</typeparam>
 /// <param name="filter">The filter.</param>
 public void Remove <TAggregateRoot>(ISpecification <TAggregateRoot> filter) where TAggregateRoot : EntityBase
 {
     LinqExtension.Each <TAggregateRoot>(this.CreateSet <TAggregateRoot>().Where <TAggregateRoot>(filter.SatisfiedBy()), new Action <TAggregateRoot>(this.Remove <TAggregateRoot>));
 }
        public async Task <IList <Game.AiCar> > GenerateGameEntries(CancellationToken cancellation = default(CancellationToken))
        {
            if (IsBusy)
            {
                await RebuildGridAsync();

                if (cancellation.IsCancellationRequested)
                {
                    return(null);
                }
            }

            var opponentsNumber = OpponentsNumberLimited;

            if (FilteredView.Count == 0 || opponentsNumber == 0)
            {
                return(new Game.AiCar[0]);
            }

            var skins = new Dictionary <string, GoodShuffle <CarSkinObject> >();

            foreach (var car in FilteredView.OfType <RaceGridEntry>().Where(x => x.CarSkin == null).Select(x => x.Car).Distinct())
            {
                await car.SkinsManager.EnsureLoadedAsync();

                if (cancellation.IsCancellationRequested)
                {
                    return(null);
                }

                skins[car.Id] = GoodShuffle.Get(car.EnabledOnlySkins);
            }

            NameNationality[] nameNationalities;
            if (opponentsNumber == 7 && OptionNfsPorscheNames)
            {
                nameNationalities = new[] {
                    new NameNationality {
                        Name = "Dylan", Nationality = "Wales"
                    },
                    new NameNationality {
                        Name = "Parise", Nationality = "Italy"
                    },
                    new NameNationality {
                        Name = "Steele", Nationality = "United States"
                    },
                    new NameNationality {
                        Name = "Wingnut", Nationality = "England"
                    },
                    new NameNationality {
                        Name = "Leadfoot", Nationality = "Australia"
                    },
                    new NameNationality {
                        Name = "Amazon", Nationality = "United States"
                    },
                    new NameNationality {
                        Name = "Backlash", Nationality = "United States"
                    }
                };
            }
            else if (DataProvider.Instance.NationalitiesAndNames.Any())
            {
                nameNationalities = GoodShuffle.Get(DataProvider.Instance.NationalitiesAndNamesList).Take(opponentsNumber).ToArray();
            }
            else
            {
                nameNationalities = null;
            }

            List <int> aiLevels;

            if (AiLevelFixed)
            {
                aiLevels = null;
            }
            else
            {
                var aiLevelsInner = from i in Enumerable.Range(0, opponentsNumber)
                                    select AiLevelMin + ((opponentsNumber < 2 ? 1d : 1d - i / (opponentsNumber - 1d)) * (AiLevel - AiLevelMin)).RoundToInt();
                if (AiLevelArrangeReverse)
                {
                    aiLevelsInner = aiLevelsInner.Reverse();
                }

                if (Equals(AiLevelArrangeRandom, 1d))
                {
                    aiLevelsInner = GoodShuffle.Get(aiLevelsInner);
                }
                else if (AiLevelArrangeRandom > 0d)
                {
                    aiLevelsInner = LimitedShuffle.Get(aiLevelsInner, AiLevelArrangeRandom);
                }

                aiLevels = aiLevelsInner.Take(opponentsNumber).ToList();
                Logging.Debug("AI levels: " + aiLevels.Select(x => $@"{x}%").JoinToString(@", "));
            }

            IEnumerable <RaceGridEntry> final;

            if (Mode.CandidatesMode)
            {
                var list = FilteredView.OfType <RaceGridEntry>().SelectMany(x => new[] { x }.Repeat(x.CandidatePriority)).ToList();

                if (ShuffleCandidates)
                {
                    var shuffled = GoodShuffle.Get(list);

                    if (_playerCar != null)
                    {
                        var same = list.FirstOrDefault(x => x.Car == _playerCar);
                        if (same != null)
                        {
                            shuffled.IgnoreOnce(same);
                        }
                    }

                    final = shuffled.Take(opponentsNumber);
                }
                else
                {
                    var skip = _playerCar;
                    final = LinqExtension.RangeFrom().Select(x => list.RandomElement()).Where(x => {
                        if (x.Car == skip)
                        {
                            skip = null;
                            return(false);
                        }

                        return(true);
                    }).Take(opponentsNumber);
                }
            }
            else
            {
                final = NonfilteredList.Where(x => !x.SpecialEntry);
            }

            if (_playerCar != null)
            {
                skins.GetValueOrDefault(_playerCar.Id)?.IgnoreOnce(_playerCar.SelectedSkin);
            }

            var takenNames = new List <string>(opponentsNumber);

            return(final.Take(opponentsNumber).Select((entry, i) => {
                var level = entry.AiLevel ?? aiLevels?[i] ?? 100;

                var skin = entry.CarSkin;
                if (skin == null)
                {
                    skin = skins.GetValueOrDefault(entry.Car.Id)?.Next;
                }

                var name = entry.Name;
                if (string.IsNullOrWhiteSpace(name) && SettingsHolder.Drive.QuickDriveUseSkinNames)
                {
                    var skinDriverNames = skin?.DriverName?.Split(',').Select(x => x.Trim()).Where(x => x.Length > 0).ToList();
                    if (skinDriverNames?.Count > 0)
                    {
                        name = GoodShuffle.Get(skinDriverNames).Take(skinDriverNames.Count).FirstOrDefault(x => !takenNames.Contains(x)) ?? name;
                        takenNames.Add(name);
                    }
                }

                if (string.IsNullOrWhiteSpace(name))
                {
                    name = nameNationalities?[i].Name ?? @"AI #" + i;
                    takenNames.Add(name);
                }

                var nationality = entry.Nationality ?? nameNationalities?[i].Nationality ?? @"Italy";
                var skinId = skin?.Id;

                return new Game.AiCar {
                    AiLevel = level,
                    CarId = entry.Car.Id,
                    DriverName = AiLevelInDriverName ? $@"{name} ({level}%)" : name,
                    Nationality = nationality,
                    Setup = "",
                    SkinId = skinId
                };
            }).ToList());
        }
Exemple #18
0
 public static IEnumerable <string> GetSectionNames(string prefixName, int startFrom)
 {
     return(LinqExtension.RangeFrom(startFrom == -1 ? 0 : startFrom)
            .Select(x => startFrom == -1 && x == 0 ? prefixName : $"{prefixName}_{x}"));
 }
Exemple #19
0
        private void LoadOpponents()
        {
            if (Type != KunosCareerObjectType.Championship)
            {
                return;
            }

            InitializeEventsManager();
            var firstEvent = GetFirstEventOrNull();

            if (firstEvent == null)
            {
                AddError(AcErrorType.Data_KunosCareerEventsAreMissing, DisplayName);
            }

            var ini     = new IniFile(OpponentsIniFilename);
            var drivers = LinqExtension.RangeFrom(1).Select(x => $"AI{x}").TakeWhile(ini.ContainsKey).Select(x => ini[x]).Select((section, id) => {
                var model = section.GetNonEmpty("MODEL");
                if (model == null)
                {
                    Logging.Error($"Section AI{id + 1}: MODEL is required, fallback to default");
                    model = CarsManager.Instance.GetDefault()?.Id ?? "";
                }

                var skin = section.GetNonEmpty("SKIN");
                if (skin == null)
                {
                    Logging.Error($"Section AI{id + 1}: SKIN is required, fallback to default");
                }

                var car = CarsManager.Instance.GetById(model);
                CarSkinObject carSkin;
                if (car == null)
                {
                    AddError(AcErrorType.Data_KunosCareerCarIsMissing, section.GetNonEmpty("MODEL"));
                    carSkin = null;
                }
                else
                {
                    carSkin = skin == null ? car.GetFirstSkinOrNull() : car.GetSkinByIdFromConfig(skin);
                    if (carSkin == null)
                    {
                        if (!KunosEventObjectBase.OptionIgnoreMissingSkins)
                        {
                            AddError(AcErrorType.Data_KunosCareerCarSkinIsMissing, car.DisplayName, section.GetNonEmpty("SKIN"));
                        }

                        carSkin = (CarSkinObject)car.SkinsManager.WrappersList.RandomElementOrDefault()?.Loaded();
                    }
                }

                return(new ChampionshipDriverEntry {
                    Id = id,
                    Name = section.GetPossiblyEmpty("DRIVER_NAME"),
                    Nationality = section.GetPossiblyEmpty("NATIONALITY"),
                    AiLevel = section.GetInt("AI_LEVEL", 100),
                    SetupId = section.GetPossiblyEmpty("SETUP"),
                    Car = car,
                    CarSkin = carSkin
                });
            }).Prepend(new ChampionshipDriverEntry {
                Id          = -1,
                Name        = SettingsHolder.Drive.PlayerName,
                Nationality = SettingsHolder.Drive.PlayerNationality,
                Car         = firstEvent?.CarObject,
                CarSkin     = firstEvent?.CarSkin,
                IsPlayer    = true
            });

            ChampionshipDrivers.ReplaceEverythingBy(drivers);
        }
        public void AddPartsByRef(List <BonusRef> bonusRefs, GetBonusDto dto)
        {
            if (bonusRefs == null || bonusRefs.Count == 0)
            {
                return;
            }
            var grps = bonusRefs.GroupBy(x => x.Type);

            foreach (var grp in grps)
            {
                var stacks = LinqExtension.DoesStack(grp.Key);
                if (stacks)
                {
                    //value = bonuesValues.Sum();
                    //var bonuesValues = grp.Select(x => x.GetBonus(dto).GetValueOrDefault()).ToList();
                    foreach (var bonuesValue in grp)
                    {
                        AddIfNotZero(bonuesValue.Parent.Name, bonuesValue.GetCondition(), new DiceRoll
                        {
                            FixedAmount = bonuesValue.GetBonus(dto).GetFixedAmount()
                        });
                    }
                }
                else
                {
                    var bonuesValues = grp.Select(x => new
                    {
                        Name      = x.Parent.Name,
                        Value     = x.GetBonus(dto).GetFixedAmount(),
                        Condition = x.Bonues.GetCondition()
                    }).ToList();
                    var min = bonuesValues.OrderByDescending(x => x.Value).First();
                    var max = bonuesValues.OrderBy(x => x.Value).First();
                    if (min.Value < 0 && max.Value > 0)
                    {
                        AddIfNotZero(max.Name, max.Condition, new DiceRoll
                        {
                            FixedAmount = max.Value
                        });
                        AddIfNotZero(min.Name, min.Condition, new DiceRoll
                        {
                            FixedAmount = min.Value
                        });
                        //value += max + min;
                    }
                    else if (min.Value < 0 && max.Value < 0)
                    {
                        AddIfNotZero(min.Name, min.Condition, new DiceRoll
                        {
                            FixedAmount = min.Value
                        });
                        //value += min;
                    }
                    //prefer bonus without conditions
                    else if (string.IsNullOrWhiteSpace(max.Condition))
                    {
                        AddIfNotZero(max.Name, max.Condition, new DiceRoll
                        {
                            FixedAmount = max.Value
                        });
                        //value += max;
                    }
                    else
                    {
                        AddIfNotZero(min.Name, min.Condition, new DiceRoll
                        {
                            FixedAmount = min.Value
                        });
                        //value += max;
                    }
                }
            }
        }