/// <summary> /// Determines whether a building can be constructed or upgraded in the specified building zone. /// </summary> /// <param name="buildingZone">The building zone to check.</param> /// <param name="buildingId">The building ID. Can be 0 if we're about to construct a new building.</param> /// <returns> /// <c>true</c> if a building can be constructed or upgraded; otherwise, <c>false</c>. /// </returns> public bool CanBuildOrUpgrade(ItemClass.Service buildingZone, ushort buildingId = 0) { int index; switch (buildingZone) { case ItemClass.Service.Residential: index = 0; break; case ItemClass.Service.Commercial: index = 1; break; case ItemClass.Service.Industrial: index = 2; break; case ItemClass.Service.Office: index = 3; break; default: return(true); } HashSet <ushort> buildings = buildingsInConstruction[index]; buildings.RemoveWhere(IsBuildingCompleted); int allowedCount = GetAllowedConstructingUpradingCount(buildingManager.GeBuildingsCount()); bool result = buildings.Count < allowedCount; if (result && buildingId != 0) { buildings.Add(buildingId); } return(result); }