mirror of
https://github.com/Siccity/xNode.git
synced 2025-12-20 01:06:01 +08:00
Added support for unitys FormerlySerializedAsAttribute. It reconnects ports that has the old name to its new name.
This commit is contained in:
parent
93615e7722
commit
2f69c4350d
@ -14,6 +14,7 @@ namespace XNode {
|
||||
if (!Initialized) BuildCache();
|
||||
|
||||
Dictionary<string, NodePort> staticPorts = new Dictionary<string, NodePort>();
|
||||
Dictionary<string, string> formerlySerializedAs = new Dictionary<string, string>();
|
||||
Dictionary<string, List<NodePort>> removedPorts = new Dictionary<string, List<NodePort>>();
|
||||
System.Type nodeType = node.GetType();
|
||||
|
||||
@ -24,6 +25,11 @@ namespace XNode {
|
||||
for (int i = 0; i < typePortCache.Count; i++) {
|
||||
staticPorts.Add(typePortCache[i].fieldName, portDataCache[nodeType][i]);
|
||||
}
|
||||
for (int i = 0; i < typePortCache.Count; i++) {
|
||||
var fieldInfo = nodeType.GetField(typePortCache[i].fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
var attribute = fieldInfo.GetCustomAttributes(true).FirstOrDefault(x => x is UnityEngine.Serialization.FormerlySerializedAsAttribute) as UnityEngine.Serialization.FormerlySerializedAsAttribute;
|
||||
if (attribute != null) formerlySerializedAs.Add(attribute.oldName, typePortCache[i].fieldName);
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup port dict - Remove nonexisting static ports - update static port types
|
||||
@ -43,6 +49,11 @@ namespace XNode {
|
||||
}
|
||||
// If port doesn't exist anymore, remove it
|
||||
else if (port.IsStatic) {
|
||||
//See if the field is tagged with FormerlySerializedAs, if so add the port with its new field name to removedPorts
|
||||
// so it can be reconnected in missing ports stage.
|
||||
string newName = null;
|
||||
if (formerlySerializedAs.TryGetValue(port.fieldName, out newName)) removedPorts.Add(newName, port.GetConnections());
|
||||
|
||||
port.ClearConnections();
|
||||
ports.Remove(port.fieldName);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user