private void CalculateHitpoints(Ship ship) { double maxHP = ship.Hitpoints; foreach (double amount in ship.Boosts.Where(x => x.Type == BoosterType.HITPOINTS).Select(x => x.Amount)) { maxHP *= amount; } bool isFullDroneDesign = Drones.GroupBy(x => x.StatsDesignID).Count() == 1; if (isFullDroneDesign) { maxHP *= Math.Max(1, Drones.First().StatsDesignID.FromDroneDesigns().Full.Where(x => x.Type == BoosterType.HITPOINTS).Sum(x => x.Amount)); } else { maxHP *= Math.Max(1, Drones.Sum(x => x.StatsDesignID.FromDroneDesigns().Single.Where(y => y.Type == BoosterType.HITPOINTS).Sum(y => y.Amount))); } MaxHitpoints = (int)maxHP; }