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); }
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); }