Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic CraftTreePatcher #520

Merged
merged 1 commit into from
Jan 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Updated CraftTreePatcher to work at any time instead of only once.......
  • Loading branch information
MrPurple6411 committed Jan 1, 2024
commit 835f3b2b0516e803de6e9060916c31be707417a8
143 changes: 80 additions & 63 deletions Nautilus/Handlers/CraftTreeHandler.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Nautilus.Handlers;

using System.Linq;
using System.Collections.Generic;
using Nautilus.Crafting;
using Nautilus.Patchers;

Expand All @@ -22,13 +22,14 @@ public static class CraftTreeHandler
/// </param>
public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem, params string[] stepsToTab)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.CraftingNodes.TryGetValue(craftTree, out var nodes))
{
root.AddCraftNode(craftingItem, stepsToTab.LastOrDefault());
return;
nodes = new List<CraftingNode>();
}

CraftTreePatcher.CraftingNodes.Add(new CraftingNode(stepsToTab, craftTree, craftingItem));
nodes.Add(new CraftingNode(stepsToTab, craftTree, craftingItem));
CraftTreePatcher.CraftingNodes[craftTree] = nodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
Expand All @@ -39,12 +40,14 @@ public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingIt

public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingItem)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.CraftingNodes.TryGetValue(craftTree, out var nodes))
{
root.AddCraftNode(craftingItem);
return;
nodes = new List<CraftingNode>();
}
CraftTreePatcher.CraftingNodes.Add(new CraftingNode(new string[0], craftTree, craftingItem));

nodes.Add(new CraftingNode(new string[0], craftTree, craftingItem));
CraftTreePatcher.CraftingNodes[craftTree] = nodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

#if SUBNAUTICA
Expand All @@ -57,12 +60,14 @@ public static void AddCraftingNode(CraftTree.Type craftTree, TechType craftingIt
/// <param name="sprite">The sprite of the tab.</param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
root.AddTabNode(name, displayName, sprite);
return;
craftTreeTabNodes = new List<TabNode>();
}
CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, sprite, name, displayName));

craftTreeTabNodes.Add(new TabNode(new string[0], craftTree, sprite, name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
Expand All @@ -75,12 +80,14 @@ public static void AddTabNode(CraftTree.Type craftTree, string name, string disp

public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
root.AddTabNode(name, displayName, sprite);
return;
craftTreeTabNodes = new List<TabNode>();
}
CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, new Atlas.Sprite(sprite), name, displayName));

craftTreeTabNodes.Add(new TabNode(new string[0], craftTree, new Atlas.Sprite(sprite), name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
Expand All @@ -98,12 +105,14 @@ public static void AddTabNode(CraftTree.Type craftTree, string name, string disp
/// </param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, Atlas.Sprite sprite, params string[] stepsToTab)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
root.AddTabNode(name, displayName, sprite, "English", stepsToTab.LastOrDefault());
return;
craftTreeTabNodes = new List<TabNode>();
}
CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, name, displayName));

craftTreeTabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
Expand All @@ -121,55 +130,61 @@ public static void AddTabNode(CraftTree.Type craftTree, string name, string disp
/// </param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite, params string[] stepsToTab)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
root.AddTabNode(name, displayName, sprite, "English", stepsToTab.LastOrDefault());
return;
craftTreeTabNodes = new List<TabNode>();
}
CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, new Atlas.Sprite(sprite), name, displayName));

craftTreeTabNodes.Add(new TabNode(stepsToTab, craftTree, new Atlas.Sprite(sprite), name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

#elif BELOWZERO
/// <summary>
/// Adds a new tab node to the root of the specified crafting tree.
/// </summary>
/// <param name="craftTree">The target craft tree to edit.</param>
/// <param name="name">The ID of the tab node. Must be unique!</param>
/// <param name="displayName">The display name of the tab, which will show up when you hover your mouse on the tab.</param>
/// <param name="sprite">The sprite of the tab.</param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite)
/// <summary>
/// Adds a new tab node to the root of the specified crafting tree.
/// </summary>
/// <param name="craftTree">The target craft tree to edit.</param>
/// <param name="name">The ID of the tab node. Must be unique!</param>
/// <param name="displayName">The display name of the tab, which will show up when you hover your mouse on the tab.</param>
/// <param name="sprite">The sprite of the tab.</param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite)
{
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
if(CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
{
root.AddTabNode(name, displayName, sprite);
return;
}
CraftTreePatcher.TabNodes.Add(new TabNode(new string[0], craftTree, sprite, name, displayName));
craftTreeTabNodes = new List<TabNode>();
}

/// <summary>
/// Adds a new tab node to the root of the specified crafting tree, at the specified tab location.
/// </summary>
/// <param name="craftTree">The target craft tree to edit.</param>
/// <param name="name">The ID of the tab node. Must be unique!</param>
/// <param name="displayName">The display name of the tab, which will show up when you hover your mouse on the tab.</param>
/// <param name="sprite">The sprite of the tab.</param>
/// <param name="stepsToTab">
/// <para>The steps to the target tab.</para>
/// <para>These must match the id value of the CraftNode in the crafting tree you're targeting.</para>
/// <para>Do not include "root" in this path.</para>
/// <para>See <see href="https://subnauticamodding.github.io/Nautilus/tutorials/craft-tree-paths.html"/> or use the <see cref="Paths"/> class for examples of valid parameters.</para>
/// </param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite, params string[] stepsToTab)
craftTreeTabNodes.Add(new TabNode(new string[0], craftTree, sprite, name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
/// Adds a new tab node to the root of the specified crafting tree, at the specified tab location.
/// </summary>
/// <param name="craftTree">The target craft tree to edit.</param>
/// <param name="name">The ID of the tab node. Must be unique!</param>
/// <param name="displayName">The display name of the tab, which will show up when you hover your mouse on the tab.</param>
/// <param name="sprite">The sprite of the tab.</param>
/// <param name="stepsToTab">
/// <para>The steps to the target tab.</para>
/// <para>These must match the id value of the CraftNode in the crafting tree you're targeting.</para>
/// <para>Do not include "root" in this path.</para>
/// <para>See <see href="https://subnauticamodding.github.io/Nautilus/tutorials/craft-tree-paths.html"/> or use the <see cref="Paths"/> class for examples of valid parameters.</para>
/// </param>
public static void AddTabNode(CraftTree.Type craftTree, string name, string displayName, UnityEngine.Sprite sprite, params string[] stepsToTab)
{
if (!CraftTreePatcher.TabNodes.TryGetValue(craftTree, out var craftTreeTabNodes))
{
if(CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
{
root.AddTabNode(name, displayName, sprite, stepsToTab.LastOrDefault());
return;
}
CraftTreePatcher.TabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, name, displayName));
craftTreeTabNodes = new List<TabNode>();
}

craftTreeTabNodes.Add(new TabNode(stepsToTab, craftTree, sprite, name, displayName));
CraftTreePatcher.TabNodes[craftTree] = craftTreeTabNodes;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

#endif

/// <summary>
Expand All @@ -187,12 +202,14 @@ public static void AddTabNode(CraftTree.Type craftTree, string name, string disp

public static void RemoveNode(CraftTree.Type craftTree, params string[] stepsToNode)
{
if (CraftTreePatcher.CustomTrees.TryGetValue(craftTree, out var root))
if (!CraftTreePatcher.NodesToRemove.TryGetValue(craftTree, out var nodesToRemove))
{
root.GetNode(stepsToNode)?.RemoveNode();
return;
nodesToRemove = new List<Node>();
}
CraftTreePatcher.NodesToRemove.Add(new Node(stepsToNode, craftTree));

nodesToRemove.Add(new Node(stepsToNode, craftTree));
CraftTreePatcher.NodesToRemove[craftTree] = nodesToRemove;
CraftTreePatcher.CachedTrees.Remove(craftTree);
}

/// <summary>
Expand Down
Loading
Loading