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())); }
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))); }