private async Task RussianRoulette(Player player) { // Kill units locally List <GeneralizedUnitHelper> killedOnes = new List <GeneralizedUnitHelper>(); int unitNumber = _generalizedUnits.Count; Random random = new Random(); while (_supportAmount < _supportNeed) { int killIndex = random.Next(unitNumber); GeneralizedUnitHelper toBeKilled = _generalizedUnits.ElementAt(killIndex); _supportNeed -= toBeKilled.SupportNeed; killedOnes.Add(toBeKilled); _generalizedUnits.RemoveAt(killIndex); unitNumber--; } // Update player var unitGroups = killedOnes.GroupBy(u => u.SquadUnitId).ToList(); foreach (var group in unitGroups) { int squadUnitId = group.Key; int numberOfUnitsInGroup = group.Count(); _squadService.DecreaseUnitTypeNumberForPlayer(player, squadUnitId, numberOfUnitsInGroup); } }
public async Task <int> CoralUpkeeping(Player player) //mennyit fogyasztanak el, azt returnöli+gyilkol Squadon keresztül { List <SquadUnit> squadUnits = await _squadService.GetAllSquadUnitByPlayerId(player.Id); _supportNeed = squadUnits.Sum(s => s.NumberOfUnits * s.Unit.Upkeep); if (_supportNeed > _supportAmount) { foreach (var su in squadUnits) //create generalized units { for (var i = 0; i < su.NumberOfUnits; i++) //create n identical generalizedUnit { GeneralizedUnitHelper newUnit = new GeneralizedUnitHelper { SquadUnitId = su.Id, SupportNeed = su.Unit.Upkeep }; _generalizedUnits.Add(newUnit); } } await RussianRoulette(player); } return(_supportNeed); }