Unify absolute value and relative node of motion event.

This commit is contained in:
2023-04-04 21:18:34 +08:00
parent fd7c1e6635
commit 676d19f452
3 changed files with 25 additions and 29 deletions

View File

@@ -390,26 +390,26 @@ namespace Cryville.Crtr.Event {
private void UpdateMotions() {
foreach (var m in PlayingMotions) {
var tev = (Chart.Motion)m.Key.Unstamped;
if (tev.RelativeNode != null && CloneType == 2) continue;
if (tev.Node.Id >= 0 && CloneType == 2) continue;
var value = GetMotionValue(tev.Name.Key/*, true*/);
InvalidateMotion(tev.Name.Key);
if (m.Key.Duration == 0) {
if (tev.RelativeNode != null) {
value.SetRelativeNode(tev.RelativeNode);
if (tev.Node.Id >= 0) {
value.SetRelativeNode(tev.Node);
}
else {
value.AbsoluteValue.ReplaceFrom(tev.AbsoluteValue);
value.AbsoluteValue.ReplaceFrom(tev.Node.Value);
}
}
else {
var scaledTime = (float)((Time - m.Key.Time - ChartPlayer.actualRenderStep * tev.sumfix) / m.Key.Duration);
var lerpedTime = MotionLerper.GetEaseTime(scaledTime, tev.transition, tev.rate);
if (tev.RelativeNode != null) {
var target = value.QueryRelativeNode(tev.RelativeNode.Id);
tev.RelativeNode.LerpWith(m.Value.GetRelativeNode(tev.RelativeNode.Id), lerpedTime, ref target);
if (tev.Node.Id >= 0) {
var target = value.QueryRelativeNode(tev.Node.Id);
tev.Node.LerpWith(m.Value.GetRelativeNode(tev.Node.Id), lerpedTime, ref target);
}
else {
tev.AbsoluteValue.LerpWith(m.Value.AbsoluteValue, lerpedTime, ref value.AbsoluteValue);
tev.Node.Value.LerpWith(m.Value.AbsoluteValue, lerpedTime, ref value.AbsoluteValue);
}
}
Values[tev.Name.Key] = value;