public Engine GetEngine(IEnumerable <IFighterStats> fighters, MatchOptionsDto optionsDto)
        {
            var qualified = fighters;

            if (optionsDto.MaxPowerlevel != null)
            {
                qualified = qualified.Where(o => o.Stats.PowerLevel() <= optionsDto.MaxPowerlevel);
            }

            if ((optionsDto.BotCount > 0 && optionsDto.BotCount < 1000) && optionsDto.BotPowerlevel > 10)
            {
                qualified = qualified
                            .Union(FighterFactory.GetFighters(optionsDto.BotCount.Value, optionsDto.BotPowerlevel.Value));
            }

            return(new Engine(
                       cfg =>
            {
                cfg.ActionsPerRound = optionsDto.ActionsPerRound;
                cfg.Battlefield = battlefields.FirstOrDefault(o => o.Id == optionsDto.Battlefield);
                cfg.Bounds = bounds.FirstOrDefault(o => o.Id == optionsDto.Bounds);
                cfg.Features = engineFeatures.Where(o => optionsDto.Features.Contains(o.Id)).ToList();
                cfg.MoveOrder = moveOrders.FirstOrDefault(o => o.Id == optionsDto.MoveOrder);
                cfg.PositionGenerator = fighterPositionGenerators.FirstOrDefault(o => o.Id == optionsDto.PositionGenerator);
                cfg.StaleCondition = staleConditions.FirstOrDefault(o => o.Id == optionsDto.StaleCondition);
                cfg.WinCondition = winConditions.FirstOrDefault(o => o.Id == optionsDto.WinCondition);

                cfg.CalculationValues.VisionFactor = 10;

                return cfg;
            }, qualified.ToList()));
        }
示例#2
0
        public async Task <ActionResult <MatchDto> > CreateMatchLobby([FromBody] MatchOptionsDto dto)
        {
            var userId = User.Claims.GetUserId();

            if (userId == null)
            {
                return(Forbid());
            }

            var match = new Match()
            {
                CreatorUserId = userId,
                Created       = dateTimeProvider.Now,
                Options       = dto,
            };

            Context.Add(match);
            await Context.SaveChangesAsync();

            return(Ok(Mapper.Map <MatchDto>(match)));
        }