Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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());
        }