@@ -1,4 +1,5 @@
|
||||
using System.Collections;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Ichni.Editor.Commands;
|
||||
@@ -110,10 +111,11 @@ namespace Ichni.Editor
|
||||
}
|
||||
}
|
||||
|
||||
public class CopyPasteDeleteModule
|
||||
{
|
||||
public GameElement copiedElement;
|
||||
public List<GameElement> pastedElementList;
|
||||
public class CopyPasteDeleteModule
|
||||
{
|
||||
public GameElement copiedElement;
|
||||
public List<GameElement> pastedElementList;
|
||||
private Dictionary<Guid, GameElement> pastedElementBySourceGuid;
|
||||
|
||||
public void CopyElement(GameElement gameElement)
|
||||
{
|
||||
@@ -150,7 +152,9 @@ namespace Ichni.Editor
|
||||
|
||||
LogWindow.Log("Pasted element: " + sourceElement.elementName + " to " + parentElement.elementName);
|
||||
pastedElementList = new List<GameElement>();
|
||||
pastedElementBySourceGuid = new Dictionary<Guid, GameElement>();
|
||||
AffiliatedPaste(sourceElement, parentElement);
|
||||
ResolvePastedReferences();
|
||||
|
||||
// 粘贴完成后,对所有新生成的元素执行 AfterInitialize 和 Refresh,
|
||||
// 与 EditorManager.LoadProject 的加载后流程对齐,确保 Manager 注册等关键步骤不遗漏。
|
||||
@@ -164,6 +168,19 @@ namespace Ichni.Editor
|
||||
return pastedElementList.FirstOrDefault();
|
||||
}
|
||||
|
||||
private void ResolvePastedReferences()
|
||||
{
|
||||
if (pastedElementBySourceGuid == null || pastedElementBySourceGuid.Count == 0) return;
|
||||
|
||||
foreach (GameElement pastedElement in pastedElementList)
|
||||
{
|
||||
if (pastedElement is IPastedReferenceResolver referenceResolver)
|
||||
{
|
||||
referenceResolver.ResolvePastedReferences(pastedElementBySourceGuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteElement(GameElement gameElement)
|
||||
{
|
||||
if (gameElement == null)
|
||||
@@ -229,9 +246,10 @@ namespace Ichni.Editor
|
||||
LogWindow.Log("Paste failed: " + gameElement.elementName + " could not be duplicated.", Color.red);
|
||||
return;
|
||||
}
|
||||
|
||||
pastedElementList.Add(pastedElement);
|
||||
|
||||
|
||||
pastedElementList.Add(pastedElement);
|
||||
pastedElementBySourceGuid[gameElement.elementGuid] = pastedElement;
|
||||
|
||||
gameElement.submoduleList.ForEach(submodule =>
|
||||
{
|
||||
if (submodule == null) return;
|
||||
@@ -254,7 +272,12 @@ namespace Ichni.Editor
|
||||
AffiliatedPaste(Element, pastedElement);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface IPastedReferenceResolver
|
||||
{
|
||||
void ResolvePastedReferences(IReadOnlyDictionary<Guid, GameElement> pastedElementBySourceGuid);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user