public void RequestIngredients(ResourceTypeSource[] resourceTypes) { if (RequestedNetworkResourceList.Any() || RequestedHexagonResourceList.Any()) { throw new InvalidOperationException("Can't request new Resources until all current requests are completed"); } if (HasAdjacentWater && Structure.Description.CanExtractWater && resourceTypes.Any(r => r.SourceType == SourceType.Network && r.ResourceType == ResourceType.Water)) { var waterCount = resourceTypes.Count(r => r.SourceType == SourceType.Network && (r.ResourceType == ResourceType.PureWater || r.ResourceType == ResourceType.Water)); resourceTypes = resourceTypes.Where(r => r.SourceType == SourceType.Network && r.ResourceType != ResourceType.Water && r.ResourceType != ResourceType.PureWater).ToArray(); for (int i = 0; i < waterCount; i++) { RequestedHexagonResourceList.Add(ResourceType.PureWater); } } foreach (var resourceType in resourceTypes) { if (resourceType.SourceType == SourceType.Network) { var resourcePackage = World.ResourceManager.RequestResource(Structure, resourceType.ResourceType, Priority); RequestedNetworkResourceList.Add(resourcePackage); } else { RequestedHexagonResourceList.Add(resourceType.ResourceType); } } }
public void ResourceArrived(ResourcePackage resourcePackage) { RequestedNetworkResourceList.Remove(resourcePackage); ArrivedResourceList.Add(resourcePackage.ResourceType); NewResourceAvailable(); }