我死去
This commit is contained in:
@@ -138,21 +138,29 @@ namespace Ichni.RhythmGame
|
||||
var z = ((Displacement_BM)displacement.matchedBM).positionZ.DeepCopyBM();
|
||||
x.ApplyTimeOffset(finalTimeOffset); y.ApplyTimeOffset(finalTimeOffset); z.ApplyTimeOffset(finalTimeOffset);
|
||||
|
||||
List<ICanBeTrackedDisplacement> ICanBeTrackedDisplacements = new List<ICanBeTrackedDisplacement> { this as ICanBeTrackedDisplacement };
|
||||
while (MaybeDeadLoop && ICanBeTrackedDisplacements[0] is not Displacement)
|
||||
// 构建链表,从底层 Displacement 到最上层 Tracker
|
||||
List<ICanBeTrackedDisplacement> chain = new List<ICanBeTrackedDisplacement>();
|
||||
ICanBeTrackedDisplacement cur = this;
|
||||
int safeGuard = 100; // 防止死循环
|
||||
while (cur != null && safeGuard-- > 0)
|
||||
{
|
||||
ICanBeTrackedDisplacement ao = (ICanBeTrackedDisplacements[0] as DisplacementTracker).targetDisplacement;
|
||||
ICanBeTrackedDisplacements.Insert(0, ao);
|
||||
chain.Insert(0, cur);
|
||||
if (cur is DisplacementTracker tracker)
|
||||
cur = tracker.targetDisplacement;
|
||||
else
|
||||
break;
|
||||
}
|
||||
ICanBeTrackedDisplacements.ForEach(o =>
|
||||
{
|
||||
((IHaveVector3Interferometer)o).ApplyVector3InterferometersBM(x, y, z);
|
||||
});
|
||||
parentElement.SaveBM();
|
||||
Displacement_BM a = new Displacement_BM("Displacement", elementGuid, new List<string>(), parentElement.matchedBM as GameElement_BM,
|
||||
x, y, z);
|
||||
MatchingExportElement = a;
|
||||
|
||||
// 依次叠加 Interferometer
|
||||
foreach (var o in chain)
|
||||
((IHaveVector3Interferometer)o).ApplyVector3InterferometersBM(x, y, z);
|
||||
|
||||
// 先保存 parentElement
|
||||
parentElement.SaveBM();
|
||||
|
||||
// 用当前 elementName/tags
|
||||
var a = new Displacement_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, x, y, z);
|
||||
MatchingExportElement = a;
|
||||
}
|
||||
|
||||
public Displacement GetOriginDisplacementWithOffset(ref float timeOffset)
|
||||
|
||||
Reference in New Issue
Block a user