Fix logic of lerping a missing relative motion node.
This commit is contained in:
@@ -405,8 +405,9 @@ namespace Cryville.Crtr.Event {
|
||||
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.Node.Id >= 0) {
|
||||
var target = value.QueryRelativeNode(tev.Node.Id);
|
||||
tev.Node.LerpWith(m.Value.GetRelativeNode(tev.Node.Id), lerpedTime, ref target);
|
||||
var target = value.GetRelativeNode(tev.Node.Id);
|
||||
if (target == null) value.SetRelativeNode(tev.Node);
|
||||
else tev.Node.LerpWith(target, lerpedTime, ref target);
|
||||
}
|
||||
else {
|
||||
tev.Node.Value.LerpWith(m.Value.AbsoluteValue, lerpedTime, ref value.AbsoluteValue);
|
||||
|
@@ -171,22 +171,7 @@ namespace Cryville.Crtr {
|
||||
}
|
||||
|
||||
public MotionNode GetRelativeNode(short id) {
|
||||
int i = RelativeNodes.FindIndex(n => n.Id == id);
|
||||
if (i == -1) {
|
||||
var r = GetRelativeNode((ushort)(id - 1));
|
||||
r.Time = null;
|
||||
r.Id = id;
|
||||
return r;
|
||||
}
|
||||
return RelativeNodes[i];
|
||||
}
|
||||
|
||||
public MotionNode QueryRelativeNode(short id) {
|
||||
int i = RelativeNodes.FindIndex(n => n.Id == id);
|
||||
MotionNode cnode;
|
||||
if (i == -1) cnode = new MotionNode { Id = id };
|
||||
else cnode = RelativeNodes[i];
|
||||
return cnode;
|
||||
return RelativeNodes.Find(n => n.Id == id);
|
||||
}
|
||||
|
||||
public void SetRelativeNode(MotionNode node) {
|
||||
|
Reference in New Issue
Block a user