我死去

This commit is contained in:
2025-11-30 15:13:57 +08:00
parent bcd2c82142
commit d0d373a948
38 changed files with 243029 additions and 16615 deletions

View File

@@ -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)