submodule bug fix & Clip extend
移除submodule重复引用的问题, Clip现在可以保存任意GameElement,且任意指定物体作为父物体加载
This commit is contained in:
@@ -195,24 +195,24 @@ namespace Ichni
|
||||
|
||||
public class BeatmapClipManager
|
||||
{
|
||||
public void Save(string clipName)
|
||||
public void SaveClip(string clipName)
|
||||
{
|
||||
LogWindow.Log("Start Saving Clip...");
|
||||
|
||||
GameElement selectedElement = EditorManager.instance.operationManager.currentSelectedElement;
|
||||
|
||||
if (selectedElement is not ElementFolder folder)
|
||||
if (selectedElement is null)
|
||||
{
|
||||
LogWindow.Log("Please select a folder to save the beatmap clip.", Color.red);
|
||||
LogWindow.Log("Please select a Game Element to save the beatmap clip.", Color.red);
|
||||
return;
|
||||
}
|
||||
|
||||
SaveClip(folder, clipName);
|
||||
_SaveClip(selectedElement, clipName);
|
||||
|
||||
LogWindow.Log("Save Clip Complete", Color.green);
|
||||
}
|
||||
|
||||
public void Load(string clipName)
|
||||
public void LoadClip(string clipName)
|
||||
{
|
||||
LogWindow.Log("Start Loading Clip...");
|
||||
|
||||
@@ -222,25 +222,25 @@ namespace Ichni
|
||||
return;
|
||||
}
|
||||
|
||||
LoadClip(clipName);
|
||||
GameElement selectedElement = EditorManager.instance.operationManager.currentSelectedElement;
|
||||
|
||||
if (selectedElement is null)
|
||||
{
|
||||
LogWindow.Log("Please select a Game Element to load the beatmap clip.", Color.red);
|
||||
return;
|
||||
}
|
||||
Debug.Log(selectedElement.elementName + " " + selectedElement.elementGuid);
|
||||
|
||||
_LoadClip(selectedElement, clipName);
|
||||
|
||||
LogWindow.Log("Load Clip Complete", Color.green);
|
||||
}
|
||||
|
||||
public void SaveClip(ElementFolder folder, string clipName)
|
||||
private void _SaveClip(GameElement element, string clipName)
|
||||
{
|
||||
List<BaseElement_BM> clip = new List<BaseElement_BM>();
|
||||
|
||||
folder.SaveBM();
|
||||
folder.matchedBM.attachedElementGuid = Guid.Empty;
|
||||
clip.Add(folder.matchedBM);
|
||||
folder.submoduleList.ForEach(s =>
|
||||
{
|
||||
s.SaveBM();
|
||||
clip.Add(s.matchedBM);
|
||||
});
|
||||
|
||||
folder.GetAllGameElementsFromThis(false).ForEach(e =>
|
||||
element.GetAllGameElementsFromThis().ForEach(e =>
|
||||
{
|
||||
e.SaveBM();
|
||||
clip.Add(e.matchedBM);
|
||||
@@ -255,7 +255,7 @@ namespace Ichni
|
||||
ES3.Save("Clip", clip, filePath, ProjectManager.SaveSettings);
|
||||
}
|
||||
|
||||
public void LoadClip(string clipName)
|
||||
private void _LoadClip(GameElement target, string clipName)
|
||||
{
|
||||
List<BaseElement_BM> GetAllAttachedBaseElements(GameElement_BM gameElement, List<BaseElement_BM> clip)
|
||||
{
|
||||
@@ -274,9 +274,23 @@ namespace Ichni
|
||||
|
||||
string filePath = Application.streamingAssetsPath + "/Clips/" + clipName + ".json";
|
||||
List<BaseElement_BM> clip = ES3.Load<List<BaseElement_BM>>("Clip", filePath, ProjectManager.SaveSettings);
|
||||
|
||||
//对于第一个元素,需要特殊处理,将它放入目标物体的子物体列表中
|
||||
GameElement_BM first = clip[0] as GameElement_BM;
|
||||
List<BaseElement_BM> firstAttaches = GetAllAttachedBaseElements(first, clip);
|
||||
first.elementGuid = Guid.NewGuid();
|
||||
GameElement_BM.identifier.TryAdd(first.elementGuid, first);
|
||||
firstAttaches.ForEach(e => { e.attachedElementGuid = first.elementGuid; });
|
||||
|
||||
//将目标物体(临时)存入读存档的Dictionary中
|
||||
target.SaveBM();
|
||||
GameElement_BM.identifier.TryAdd(target.elementGuid, target.matchedBM as GameElement_BM);
|
||||
(target.matchedBM as GameElement_BM).matchedElement = target;
|
||||
first.attachedElementGuid = target.elementGuid;
|
||||
|
||||
foreach (BaseElement_BM element in clip)
|
||||
for (var index = 1; index < clip.Count; index++)
|
||||
{
|
||||
var element = clip[index];
|
||||
if (element is GameElement_BM gameElement)
|
||||
{
|
||||
List<BaseElement_BM> attachedElements = GetAllAttachedBaseElements(gameElement, clip);
|
||||
@@ -285,8 +299,13 @@ namespace Ichni
|
||||
attachedElements.ForEach(e => { e.attachedElementGuid = gameElement.elementGuid; });
|
||||
}
|
||||
}
|
||||
|
||||
first.ExecuteBM();
|
||||
|
||||
clip.ForEach(e => e.ExecuteBM());
|
||||
for (var index = 1; index < clip.Count; index++)
|
||||
{
|
||||
clip[index].ExecuteBM();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user