Discards context cascades on error.

This commit is contained in:
2023-06-02 17:42:41 +08:00
parent f6741d0acc
commit ce31f3e15f

View File

@@ -271,16 +271,20 @@ namespace Cryville.Crtr {
float ft, tt = (float)GetSyncedTime(frame.Time, id.Source.Handler); float ft, tt = (float)GetSyncedTime(frame.Time, id.Source.Handler);
if (!_vect.TryGetValue(id, out ft)) ft = tt; if (!_vect.TryGetValue(id, out ft)) ft = tt;
_etor.ContextCascadeInsert(); _etor.ContextCascadeInsert();
if (frame.IsNull) { try {
_etor.ContextCascadeUpdate(_var_input_vec, PropSrc.Null); if (frame.IsNull) {
OnInput(id, proxy.Target, ft, tt, true); _etor.ContextCascadeUpdate(_var_input_vec, PropSrc.Null);
OnInput(id, proxy.Target, ft, tt, true);
}
else {
_vecsrcs[0].Set(new RVector4(frame.Vector.X, frame.Vector.Y, frame.Vector.Z, frame.Vector.W));
_etor.ContextCascadeUpdate(_var_input_vec, _vecsrcs[0]);
OnInput(id, proxy.Target, ft, tt, false);
}
} }
else { finally {
_vecsrcs[0].Set(new RVector4(frame.Vector.X, frame.Vector.Y, frame.Vector.Z, frame.Vector.W)); _etor.ContextCascadeDiscard();
_etor.ContextCascadeUpdate(_var_input_vec, _vecsrcs[0]);
OnInput(id, proxy.Target, ft, tt, false);
} }
_etor.ContextCascadeDiscard();
_vect[id] = tt; _vect[id] = tt;
} }
} }
@@ -298,15 +302,19 @@ namespace Cryville.Crtr {
if (def.pass != null) { if (def.pass != null) {
foreach (var p in def.pass) { foreach (var p in def.pass) {
_etor.ContextCascadeInsert(); _etor.ContextCascadeInsert();
bool newNullFlag = nullFlag; try {
if (!newNullFlag) { bool newNullFlag = nullFlag;
_etor.Evaluate(_vecops[depth + 1], p.Value); if (!newNullFlag) {
newNullFlag = _vecsrcs[depth + 1].IsNull; _etor.Evaluate(_vecops[depth + 1], p.Value);
if (newNullFlag) _etor.ContextCascadeUpdate(_var_input_vec, PropSrc.Null); newNullFlag = _vecsrcs[depth + 1].IsNull;
else _etor.ContextCascadeUpdate(_var_input_vec, _vecsrcs[depth + 1]); if (newNullFlag) _etor.ContextCascadeUpdate(_var_input_vec, PropSrc.Null);
else _etor.ContextCascadeUpdate(_var_input_vec, _vecsrcs[depth + 1]);
}
OnInput(id, p.Key, ft, tt, newNullFlag, depth + 1);
}
finally {
_etor.ContextCascadeDiscard();
} }
OnInput(id, p.Key, ft, tt, newNullFlag, depth + 1);
_etor.ContextCascadeDiscard();
} }
} }
else { else {
@@ -323,10 +331,14 @@ namespace Cryville.Crtr {
_targetActiveCount[target]++; _targetActiveCount[target]++;
} }
_etor.ContextCascadeInsert(); _etor.ContextCascadeInsert();
_etor.ContextCascadeUpdate(_var_fv, fv); try {
_etor.ContextCascadeUpdate(_var_tv, tv); _etor.ContextCascadeUpdate(_var_fv, fv);
_judge.Feed(target, ft, tt); _etor.ContextCascadeUpdate(_var_tv, tv);
_etor.ContextCascadeDiscard(); _judge.Feed(target, ft, tt);
}
finally {
_etor.ContextCascadeDiscard();
}
if (tv.Type == PdtInternalType.Null) { if (tv.Type == PdtInternalType.Null) {
_vecs.Remove(pid); _vecs.Remove(pid);
_targetActiveCount[target]--; _targetActiveCount[target]--;