Exemplo n.º 1
0
        public static Blueprint ProcessPart(AvailablePart part)
        {
            var resources = new Dictionary <string, WorkshopResource>();

            if (PartRecipes.ContainsKey(part.name))
            {
                var recipe = PartRecipes[part.name];
                foreach (var workshopResource in recipe.Prepare(part.partPrefab.mass))
                {
                    if (resources.ContainsKey(workshopResource.Name))
                    {
                        resources[workshopResource.Name].Merge(workshopResource);
                    }
                    else
                    {
                        resources[workshopResource.Name] = workshopResource;
                    }
                }
            }
            else
            {
                foreach (var workshopResource in DefaultPartRecipe.Prepare(part.partPrefab.mass))
                {
                    if (resources.ContainsKey(workshopResource.Name))
                    {
                        resources[workshopResource.Name].Merge(workshopResource);
                    }
                    else
                    {
                        resources[workshopResource.Name] = workshopResource;
                    }
                }
            }

            foreach (PartResource partResource in part.partPrefab.Resources)
            {
                if (ResourceRecipes.ContainsKey(partResource.resourceName))
                {
                    var definition = PartResourceLibrary.Instance.GetDefinition(partResource.resourceName);
                    var recipe     = ResourceRecipes[partResource.resourceName];
                    foreach (var workshopResource in recipe.Prepare(partResource.maxAmount * definition.density))
                    {
                        if (resources.ContainsKey(workshopResource.Name))
                        {
                            resources[workshopResource.Name].Merge(workshopResource);
                        }
                        else
                        {
                            resources[workshopResource.Name] = workshopResource;
                        }
                    }
                }
            }

            var blueprint = new Blueprint();

            blueprint.AddRange(resources.Values);
            blueprint.Funds = Mathf.Max(0, part.cost - (float)blueprint.ResourceCosts());
            return(blueprint);
        }
Exemplo n.º 2
0
        public static Blueprint ProcessPart(AvailablePart part, Recipe workshopRecipe = null)
        {
            var resources = new Dictionary <string, WorkshopResource>();
            List <WorkshopResource> prepResources = null;
            double complexity = 1;

            //Use part recipe
            if (PartRecipes.ContainsKey(part.name) && WorkshopOptions.EnableRecipes)
            {
                prepResources = PartRecipes[part.name].Prepare(part.partPrefab.mass);
                if (HighLogic.CurrentGame.Parameters.CustomParams <Workshop_Settings>().useComplexity)
                {
                    complexity += PartRecipes[part.name].Complexity;
                }
            }

            //Use workshop recipe override
            else
            {
                if (workshopRecipe != null)
                {
                    prepResources = workshopRecipe.Prepare(part.partPrefab.mass);
                }

                //Use default recipe
                else
                {
                    prepResources = DefaultPartRecipe.Prepare(part.partPrefab.mass);
                }
            }
            //Now combine all the required resources
            foreach (var workshopResource in prepResources)
            {
                if (resources.ContainsKey(workshopResource.Name))
                {
                    resources[workshopResource.Name].Merge(workshopResource);
                }
                else
                {
                    resources[workshopResource.Name] = workshopResource;
                }
            }

            foreach (PartResource partResource in part.partPrefab.Resources)
            {
                if (ResourceRecipes.ContainsKey(partResource.resourceName))
                {
                    var definition = PartResourceLibrary.Instance.GetDefinition(partResource.resourceName);
                    var recipe     = ResourceRecipes[partResource.resourceName];
                    foreach (var workshopResource in recipe.Prepare(partResource.maxAmount * definition.density))
                    {
                        if (resources.ContainsKey(workshopResource.Name))
                        {
                            resources[workshopResource.Name].Merge(workshopResource);
                        }
                        else
                        {
                            resources[workshopResource.Name] = workshopResource;
                        }
                    }
                }
            }

            var blueprint = new Blueprint();

            blueprint.AddRange(resources.Values);
            blueprint.Complexity = complexity;
            blueprint.Funds      = Mathf.Max(0, part.cost - (float)blueprint.ResourceCosts());
            return(blueprint);
        }