public TailorItemRecipe ToGameData() { var tir = new TailorItemRecipe(); tir.FirstItemTags = new List <string>(FirstItemTags); tir.SecondItemTags = new List <string>(SecondItemTags); tir.SpendRightItem = ConsumeSecondItem; if (CraftedItems.Count > 1) { tir.CraftedItemIDs = new List <string>(); foreach (var entry in CraftedItems) { tir.CraftedItemIDs.Add(Mod.instance.ResolveClothingId(CraftedItems[0]).ToString()); } } else { tir.CraftedItemID = Mod.instance.ResolveClothingId(CraftedItems[0]); } tir.CraftedItemColor = $"{CraftedItemColor.R} {CraftedItemColor.G} {CraftedItemColor.B}"; return(tir); }
/********* ** Public methods *********/ public TailorItemRecipe ToGameData() { var recipe = new TailorItemRecipe { FirstItemTags = new List <string>(this.FirstItemTags), SecondItemTags = new List <string>(this.SecondItemTags), SpendRightItem = this.ConsumeSecondItem, CraftedItemColor = $"{this.CraftedItemColor.R} {this.CraftedItemColor.G} {this.CraftedItemColor.B}" }; if (this.CraftedItems.Count > 1) { recipe.CraftedItemIDs = new List <string>(); foreach (object entry in this.CraftedItems) { recipe.CraftedItemIDs.Add(Mod.instance.ResolveClothingId(this.CraftedItems[0]).ToString()); // TODO: always uses first crafted item? } } else { recipe.CraftedItemID = Mod.instance.ResolveClothingId(this.CraftedItems[0]); } return(recipe); }
public TailorRecipeListTool() : base(Game1.uiViewport.Width / 2 - (632 + IClickableMenu.borderWidth * 2) / 2, Game1.uiViewport.Height / 2 - (600 + IClickableMenu.borderWidth * 2) / 2 - 64, 632 + IClickableMenu.borderWidth * 2, 600 + IClickableMenu.borderWidth * 2 + 64) { TailoringMenu tailoring_menu = new TailoringMenu(); Game1.player.faceDirection(2); Game1.player.FarmerSprite.StopAnimation(); recipeComponents = new List <ClickableTextureComponent>(); _recipeLookup = new Dictionary <string, KeyValuePair <Item, Item> >(); _recipeMetadata = new Dictionary <string, string>(); _recipeColors = new Dictionary <string, Color>(); Item cloth = new Object(Vector2.Zero, 428, 1); foreach (int id in Game1.objectInformation.Keys) { Item key = new Object(Vector2.Zero, id, 1); if (key.Name.Contains("Seeds") || key.Name.Contains("Floor") || key.Name.Equals("Stone") || key.Name.Contains("Weeds") || key.Name.Equals("Lumber") || key.Name.Contains("Fence") || key.Name.Equals("Gate") || key.Name.Contains("Starter") || key.Name.Contains("Twig") || key.Name.Equals("Secret Note") || key.Name.Contains("Guide") || key.Name.Contains("Path") || key.Name.Contains("Ring") || (int)key.category == -22 || key.Name.Contains("Sapling")) { continue; } Item value = tailoring_menu.CraftItem(cloth, key); TailorItemRecipe recipe = tailoring_menu.GetRecipeForItems(cloth, key); KeyValuePair <Item, Item> kvp = new KeyValuePair <Item, Item>(key, value); _recipeLookup[Utility.getStandardDescriptionFromItem(key, 1)] = kvp; string metadata = ""; Color? dye_color = TailoringMenu.GetDyeColor(key); if (dye_color.HasValue) { _recipeColors[Utility.getStandardDescriptionFromItem(key, 1)] = dye_color.Value; } if (recipe != null) { metadata = "clothes id: " + recipe.CraftedItemID + " from "; foreach (string context_tag in recipe.SecondItemTags) { metadata = metadata + context_tag + " "; } metadata.Trim(); } _recipeMetadata[Utility.getStandardDescriptionFromItem(key, 1)] = metadata; ClickableTextureComponent component = new ClickableTextureComponent(new Rectangle(0, 0, 64, 64), null, default(Rectangle), 1f) { myID = 0, name = Utility.getStandardDescriptionFromItem(key, 1), label = key.DisplayName }; recipeComponents.Add(component); } okButton = new ClickableTextureComponent("OK", new Rectangle(xPositionOnScreen + width - IClickableMenu.borderWidth - IClickableMenu.spaceToClearSideBorder - 64, yPositionOnScreen + height - IClickableMenu.borderWidth - IClickableMenu.spaceToClearTopBorder + 16, 64, 64), null, null, Game1.mouseCursors, Game1.getSourceRectForStandardTileSheet(Game1.mouseCursors, 46), 1f) { upNeighborID = -99998, leftNeighborID = -99998, rightNeighborID = -99998, downNeighborID = -99998 }; RepositionElements(); }
/********* ** Private methods *********/ /// <summary>The method to call before <see cref="TailoringMenu.GetRecipeForItems"/>.</summary> /// <returns>Returns whether to run the original method.</returns> private static bool Before_GetRecipeForItems(TailoringMenu __instance, Item left_item, Item right_item, ref TailorItemRecipe __result) { if (left_item == null || right_item == null) { return(true); } for (int i = 0; i < Mod.customTailoringRecipes.Count; ++i) { var recipe = Mod.customTailoringRecipes[i]; bool okay = true; foreach (string tag in recipe.FirstItemTags) { if (!left_item.HasContextTag(tag)) { okay = false; break; } } if (!okay) { continue; } foreach (string tag in recipe.SecondItemTags) { if (!right_item.HasContextTag(tag)) { okay = false; break; } } if (okay) { __result = new TailorItemRecipe() { FirstItemTags = recipe.FirstItemTags, SecondItemTags = recipe.SecondItemTags, SpendRightItem = recipe.ConsumeSecondItem, CraftedItemIDs = new List <string>(new[] { "DGA/TailoringRecipe/" + i }) }; return(false); } } return(true); }