public void OnLoad(ConfigNode node) { Body = node.GetValue("Body"); Biome = node.GetValue("Biome"); bool isEstablished = false; node.TryGetValue("IsEstablished", ref isEstablished); IsEstablished = isEstablished; bool isSurveyed = false; node.TryGetValue("IsSurveyed", ref isSurveyed); IsSurveyed = isSurveyed; var streamNodes = node.GetNodes(); foreach (var streamNode in streamNodes) { var resourceName = streamNode.GetValue("ResourceName"); if (!_resourceStreams.ContainsKey(resourceName)) { var stream = new ResourceStream(resourceName); stream.Incoming = int.Parse(streamNode.GetValue("Incoming")); stream.Outgoing = int.Parse(streamNode.GetValue("Outgoing")); _resourceStreams.Add(resourceName, stream); } } }
public NegotiationResult NegotiateProvider(Dictionary <string, int> providedResources) { // If any of the quantities are negative, make sure that they won't break consumer dependencies var negativeResources = providedResources .Where(r => r.Value < 0); if (negativeResources.Any()) { var brokenDependencies = new List <string>(); foreach (var resource in negativeResources) { var resourceName = resource.Key; if (!_resourceStreams.ContainsKey(resourceName)) { brokenDependencies.Add(resourceName); continue; } var removedQuantity = resource.Value; // this will be a negative value var stream = _resourceStreams[resourceName]; if (stream.Available + removedQuantity < 0) { brokenDependencies.Add(resourceName); } if (brokenDependencies.Any()) { return(new BrokenNegotiationResult(brokenDependencies)); } } } foreach (var resource in providedResources) { IResourceStream stream; if (_resourceStreams.ContainsKey(resource.Key)) { stream = _resourceStreams[resource.Key]; } else { stream = new ResourceStream(resource.Key); _resourceStreams.Add(resource.Key, stream); } stream.Incoming += resource.Value; // Sanity check if (stream.Incoming < 0) { stream.Incoming = 0; } } return(new OkNegotiationResult()); }