public static string GetUrlAutoResFIelds(Village vill, BuildingTask task) { List <Models.ResourceModels.Building> buildings; //potential buildings to be upgraded next :) switch (task.ResourceType) { case ResTypeEnum.AllResources: buildings = vill.Build.Buildings.Where(x => x.Type == Classificator.BuildingEnum.Woodcutter || x.Type == Classificator.BuildingEnum.ClayPit || x.Type == Classificator.BuildingEnum.IronMine || x.Type == Classificator.BuildingEnum.Cropland).ToList(); break; case ResTypeEnum.ExcludeCrop: buildings = vill.Build.Buildings.Where(x => x.Type == Classificator.BuildingEnum.Woodcutter || x.Type == Classificator.BuildingEnum.ClayPit || x.Type == Classificator.BuildingEnum.IronMine).ToList(); break; case ResTypeEnum.OnlyCrop: buildings = vill.Build.Buildings.Where(x => x.Type == Classificator.BuildingEnum.Cropland).ToList(); break; default: return(null); } buildings = buildings.Where(x => x.Level < task.Level).ToList(); //only select res fields that are below desired level foreach (var b in buildings.ToList()) { if (b.Level == task.Level - 1 && b.UnderConstruction) { buildings.Remove(b); //its already being upgraded to selected lvl } } Models.ResourceModels.Building buildingToUpgrade = null; switch (task.BuildingStrategy) { case BuildingStrategyEnum.BasedOnLevel: buildingToUpgrade = FindLowestLevelBuilding(buildings); break; case BuildingStrategyEnum.BasedOnProduction: buildingToUpgrade = GetLowestProduction(buildings, vill); break; case BuildingStrategyEnum.BasedOnRes: buildingToUpgrade = GetLowestRes(buildings, vill); break; } if (buildingToUpgrade == null) { vill.Build.Tasks.Remove(task); return(null); } task.BuildingId = buildingToUpgrade.Id; task.Building = buildingToUpgrade.Type; return(buildingToUpgrade.Id.ToString()); }
private static Models.ResourceModels.Building FindLowestLevelBuilding(List <Models.ResourceModels.Building> buildings) { if (buildings.Count == 0) { return(null); } Models.ResourceModels.Building lowestBuilding = buildings[0]; for (int i = 1; i < buildings.Count; i++) { if (lowestBuilding.Level > buildings[i].Level) { lowestBuilding = buildings[i]; } } return(lowestBuilding); }