Skip to content

Commit afc1fc9

Browse files
committed
Sync with ReClass.NET code changes.
1 parent 32b4992 commit afc1fc9

5 files changed

+81
-112
lines changed

FrostbitePlugin.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
</Compile>
7474
<Compile Include="WeakPtrCodeGenerator.cs" />
7575
<Compile Include="WeakPtrNode.cs" />
76-
<Compile Include="WeakPtrSchemaConverter.cs" />
76+
<Compile Include="WeakPtrNodeConverter.cs" />
7777
</ItemGroup>
7878
<ItemGroup>
7979
<ProjectReference Include="..\ReClass.NET\ReClass.NET.csproj">

FrostbitePluginExt.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class FrostbitePluginExt : Plugin
1717

1818
private INodeInfoReader reader;
1919

20-
private WeakPtrSchemaConverter converter;
20+
private WeakPtrNodeConverter converter;
2121
private WeakPtrCodeGenerator generator;
2222

2323
public override Image Icon => Properties.Resources.logo_frostbite;
@@ -45,7 +45,7 @@ public override bool Initialize(IPluginHost host)
4545
host.RegisterNodeInfoReader(reader);
4646

4747
// Register the WeakPtr node
48-
converter = new WeakPtrSchemaConverter();
48+
converter = new WeakPtrNodeConverter();
4949
generator = new WeakPtrCodeGenerator();
5050
host.RegisterNodeType(typeof(WeakPtrNode), "Frostbite WeakPtr", Icon, converter, generator);
5151

WeakPtrNode.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ class WeakPtrNode : BaseReferenceNode
1717
/// <summary>Disable the cycle check for pointer references.</summary>
1818
public override bool PerformCycleCheck => false;
1919

20+
/// <summary>Creates a new instance of this class to clone it.</summary>
21+
protected override BaseNode CreateCloneInstance() => new WeakPtrNode();
22+
2023
/// <summary>Called when the node was created. Creates a new class as inner node.</summary>
2124
public override void Intialize()
2225
{
23-
var node = ClassManager.CreateClass();
26+
var node = ClassNode.Create();
2427
node.Intialize();
2528
node.AddBytes(64);
2629
InnerNode = node;

WeakPtrNodeConverter.cs

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System.Collections.Generic;
2+
using System.Diagnostics.Contracts;
3+
using System.Linq;
4+
using System.Xml.Linq;
5+
using ReClassNET.DataExchange;
6+
using ReClassNET.Logger;
7+
using ReClassNET.Nodes;
8+
9+
namespace FrostbitePlugin
10+
{
11+
class WeakPtrNodeConverter : ICustomNodeConverter
12+
{
13+
/// <summary>Name of the type used in the XML data.</summary>
14+
private const string XmlType = "FrostBite::WeakPtr";
15+
16+
/// <summary>Checks if the node can be handled.</summary>
17+
/// <param name="node">The node to check.</param>
18+
/// <returns>True if we can handle the node, false if not.</returns>
19+
public bool CanHandleNode(BaseNode node) => node is WeakPtrNode;
20+
21+
/// <summary>Checks if the element can be handled.</summary>
22+
/// <param name="element">The element to check.</param>
23+
/// <returns>True if we can read node, false if not.</returns>
24+
public bool CanHandleElement(XElement element) => element.Attribute(ReClassNetFile.XmlTypeAttribute)?.Value == XmlType;
25+
26+
/// <summary>Creates a node from the xml element. This method gets only called if <see cref="CanHandleElement(XElement)"/> returned true.</summary>
27+
/// <param name="element">The element to create the node from.</param>
28+
/// <param name="parent">The parent of the node.</param>
29+
/// <param name="classes">The list of classes which correspond to the node.</param>
30+
/// <param name="logger">The logger used to output messages.</param>
31+
/// <param name="node">[out] The node for the xml element.</param>
32+
/// <returns>True if a node was created, otherwise false.</returns>
33+
public bool TryCreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger, out BaseNode node)
34+
{
35+
node = null;
36+
37+
var reference = NodeUuid.FromBase64String(element.Attribute(ReClassNetFile.XmlReferenceAttribute)?.Value, false);
38+
var innerClass = classes.Where(c => c.Uuid.Equals(reference)).FirstOrDefault();
39+
if (innerClass == null)
40+
{
41+
logger.Log(LogLevel.Warning, $"Skipping node with unknown reference: {reference}");
42+
logger.Log(LogLevel.Warning, element.ToString());
43+
44+
return false;
45+
}
46+
47+
var weakPtrNode = new WeakPtrNode
48+
{
49+
Name = element.Attribute(ReClassNetFile.XmlNameAttribute)?.Value ?? string.Empty,
50+
Comment = element.Attribute(ReClassNetFile.XmlCommentAttribute)?.Value ?? string.Empty
51+
};
52+
weakPtrNode.ChangeInnerNode(innerClass);
53+
54+
node = weakPtrNode;
55+
56+
return true;
57+
}
58+
59+
/// <summary>Creates a xml element from the node. This method gets only called if <see cref="CanHandleNode(BaseNode node)"/> returned true.</summary>
60+
/// <param name="node">The node to create the xml element from.</param>
61+
/// <param name="logger">The logger used to output messages.</param>
62+
/// <returns>The xml element for the node.</returns>
63+
public XElement CreateElementFromNode(BaseNode node, ILogger logger)
64+
{
65+
return new XElement(
66+
ReClassNetFile.XmlNodeElement,
67+
new XAttribute(ReClassNetFile.XmlNameAttribute, node.Name ?? string.Empty),
68+
new XAttribute(ReClassNetFile.XmlCommentAttribute, node.Comment ?? string.Empty),
69+
new XAttribute(ReClassNetFile.XmlTypeAttribute, XmlType),
70+
new XAttribute(ReClassNetFile.XmlReferenceAttribute, (node as WeakPtrNode).InnerNode.Uuid.ToBase64String())
71+
);
72+
}
73+
}
74+
}

WeakPtrSchemaConverter.cs

-108
This file was deleted.

0 commit comments

Comments
 (0)