/// <summary> /// Adds all building prerequisites for this building if they do not exist yet. /// After this you should call RemoveDuplicates(). /// </summary> /// <param name="acc"></param> /// <param name="vill"></param> /// <param name="building"></param> /// <returns>Whether we have all prerequisite buildings</returns> public static bool AddBuildingPrerequisites(Account acc, Village vill, BuildingEnum building, bool bottom = true) { RemoveFinishedCB(vill); (var tribe, var prereqs) = BuildingsData.GetBuildingPrerequisites(building); if (acc.AccInfo.Tribe != tribe && tribe != TribeEnum.Any) { return(false); } if (prereqs.Count == 0) { return(true); } var ret = true; foreach (var prereq in prereqs) { var prereqBuilding = vill.Build.Buildings.Where(x => x.Type == prereq.Building); // Prerequired building already exists and is on on/above/being upgraded on desired level if (prereqBuilding.Any(x => prereq.Level <= x.Level + (x.UnderConstruction ? 1 : 0)) ) { continue; } if (bottom && vill.Build.Tasks.Any(x => prereq.Building == x.Building && prereq.Level <= x.Level)) { continue; } // If there is no required building, build it's prerequisites first if (!prereqBuilding.Any()) { AddBuildingPrerequisites(acc, vill, prereq.Building); } AddBuildingTask(acc, vill, new BuildingTask() { Building = prereq.Building, Level = prereq.Level, TaskType = BuildingType.General }, bottom); ret = false; } return(ret); }
public static bool BuildingRequirementsAreMet(BuildingEnum building, Village vill, TribeEnum tribe) //check if user can construct this building { bool exists = (vill.Build.Buildings.FirstOrDefault(x => x.Type == building) != null); //there is already a building of this type in the vill if (exists) { //check cranny/warehouse/grannary/trapper/GG/GW switch (building) { case BuildingEnum.Warehouse: return(BuildingIsOnLevel(BuildingEnum.Warehouse, 20, vill)); case BuildingEnum.Granary: return(BuildingIsOnLevel(BuildingEnum.Granary, 20, vill)); case BuildingEnum.GreatWarehouse: return(BuildingIsOnLevel(BuildingEnum.GreatWarehouse, 20, vill)); case BuildingEnum.GreatGranary: return(BuildingIsOnLevel(BuildingEnum.GreatGranary, 20, vill)); case BuildingEnum.Trapper: return(BuildingIsOnLevel(BuildingEnum.Trapper, 20, vill)); case BuildingEnum.Cranny: return(BuildingIsOnLevel(BuildingEnum.Cranny, 10, vill)); default: return(false); } } //check for prerequisites for this building (var ReqTribe, var Prerequisites) = BuildingsData.GetBuildingPrerequisites(building); if (ReqTribe != TribeEnum.Any && ReqTribe != tribe) { return(false); } //if we either already have this building OR is on our build task list, requirements are met. foreach (var prerequisite in Prerequisites) { if (!vill.Build.Buildings.Any(x => x.Level >= prerequisite.Level && x.Type == prerequisite.Building) && !vill.Build.Tasks.Any(x => x.Level >= prerequisite.Level && x.Building == prerequisite.Building)) { return(false); } } return(true); }
public static List <string> SetPrereqCombo(Account acc, Village vill) { var ret = new List <string>(); for (int i = 5; i <= 45; i++) // Go through each building { var building = (BuildingEnum)i; // Don't show these buildings: if (building == BuildingEnum.GreatWarehouse || building == BuildingEnum.GreatGranary ) { continue; } if (vill.Build.Buildings.Any(x => x.Type == building)) { continue; } if (vill.Build.Tasks.Any(x => x.Building == building)) { continue; } (var reqTribe, var prerequisites) = BuildingsData.GetBuildingPrerequisites((BuildingEnum)i); if (reqTribe != TribeEnum.Any && reqTribe != acc.AccInfo.Tribe) { continue; } ret.Add(building.ToString()); } return(ret); }