From 9a1d1b8262ae6732755ffde49b771a1e3846befb Mon Sep 17 00:00:00 2001 From: Dale McCoy <21223975+DaleStan@users.noreply.github.com> Date: Sun, 8 Jan 2023 19:29:17 -0500 Subject: [PATCH 1/2] Treat bot-placeable entities as accessible. This makes script-replaced entities accessible, such as the underground pipes from Advanced Fluid Handling (meh) and the rod/plate/gear casters from IR (also makes the recipes tied those casters accessible). --- YAFCparser/Data/FactorioDataDeserializer.cs | 2 +- YAFCparser/Data/FactorioDataDeserializer_Context.cs | 11 +++++++---- YAFCparser/Data/FactorioDataDeserializer_Entity.cs | 11 ++++++++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/YAFCparser/Data/FactorioDataDeserializer.cs b/YAFCparser/Data/FactorioDataDeserializer.cs index 9fb01cc6..f6716505 100644 --- a/YAFCparser/Data/FactorioDataDeserializer.cs +++ b/YAFCparser/Data/FactorioDataDeserializer.cs @@ -291,7 +291,7 @@ private void DeserializeItem(LuaTable table) var item = DeserializeCommon(table, "item"); if (table.Get("place_result", out string placeResult) && !String.IsNullOrEmpty(placeResult)) - placeResults[item] = placeResult; + placeResults[item] = new List() { placeResult }; item.stackSize = table.Get("stack_size", 1); if (item.locName == null && table.Get("placed_as_equipment_result", out string result)) { diff --git a/YAFCparser/Data/FactorioDataDeserializer_Context.cs b/YAFCparser/Data/FactorioDataDeserializer_Context.cs index 5727a4c0..8b706695 100644 --- a/YAFCparser/Data/FactorioDataDeserializer_Context.cs +++ b/YAFCparser/Data/FactorioDataDeserializer_Context.cs @@ -16,7 +16,7 @@ internal partial class FactorioDataDeserializer private readonly DataBucket recipeCategories = new DataBucket(); private readonly DataBucket recipeCrafters = new DataBucket(); private readonly DataBucket recipeModules = new DataBucket(); - private readonly Dictionary placeResults = new Dictionary(); + private readonly Dictionary> placeResults = new Dictionary>(); private readonly List universalModules = new List(); private Item[] allModules; private readonly HashSet sciencePacks = new HashSet(); @@ -227,10 +227,13 @@ private void CalculateMaps() allMechanics.Add(mechanics); break; case Item item: - if (placeResults.TryGetValue(item, out var placeResultStr)) + if (placeResults.TryGetValue(item, out var placeResultNames)) { - item.placeResult = GetObject(placeResultStr); - entityPlacers.Add(item.placeResult, item); + item.placeResult = GetObject(placeResultNames.First()); + foreach (var name in placeResultNames) + { + entityPlacers.Add(GetObject(name), item); + } } if (item.fuelResult != null) miscSources.Add(item.fuelResult, item); diff --git a/YAFCparser/Data/FactorioDataDeserializer_Entity.cs b/YAFCparser/Data/FactorioDataDeserializer_Entity.cs index fdcc7d0a..8d2774e7 100644 --- a/YAFCparser/Data/FactorioDataDeserializer_Entity.cs +++ b/YAFCparser/Data/FactorioDataDeserializer_Entity.cs @@ -155,6 +155,15 @@ private void DeserializeEntity(LuaTable table) var name = table.Get("name", ""); string usesPower; var defaultDrain = 0f; + + if (table.Get("placeable_by", out LuaTable placeableBy) && placeableBy.Get("item", out string itemName)) + { + var item = GetObject(itemName); + if (!placeResults.TryGetValue(item, out var resultNames)) + resultNames = placeResults[item] = new List(); + resultNames.Add(name); + } + switch (factorioType) { case "transport-belt": @@ -282,7 +291,7 @@ private void DeserializeEntity(LuaTable table) { if (possibleRecipe is Recipe rec) CreateLaunchRecipe(crafter, rec, partsRequired, outputCount); - } + } } } } From a905e9f1365c7277047cc0230a098f01369dc932 Mon Sep 17 00:00:00 2001 From: Dale McCoy <21223975+DaleStan@users.noreply.github.com> Date: Sun, 8 Jan 2023 20:00:28 -0500 Subject: [PATCH 2/2] Update the shopping list to show the items that build the entities, instead of the entities. --- YAFC/Workspace/ProductionTable/ProductionTableView.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/YAFC/Workspace/ProductionTable/ProductionTableView.cs b/YAFC/Workspace/ProductionTable/ProductionTableView.cs index c0bba294..62b19766 100644 --- a/YAFC/Workspace/ProductionTable/ProductionTableView.cs +++ b/YAFC/Workspace/ProductionTable/ProductionTableView.cs @@ -906,9 +906,12 @@ private void BuildShoppngList(RecipeRow recipeRoot) { if (recipe.entity != null) { - shopList.TryGetValue(recipe.entity, out var prev); + FactorioObject shopItem = recipe.entity.itemsToPlace?.FirstOrDefault(); + if (shopItem is null) + shopItem = recipe.entity; + shopList.TryGetValue(shopItem, out var prev); var count = MathUtils.Ceil(recipe.buildingCount); - shopList[recipe.entity] = prev + count; + shopList[shopItem] = prev + count; if (recipe.parameters.modules.modules != null) { foreach (var module in recipe.parameters.modules.modules)