Restore PDT evaluator exception.

This commit is contained in:
2023-04-04 22:09:57 +08:00
parent c877437ab6
commit 0a25b5260d
3 changed files with 9 additions and 4 deletions

View File

@@ -91,7 +91,8 @@ namespace Cryville.Crtr {
}
public override IEnumerable<ChartEvent> Match(ChartEvent ev) {
ChartPlayer.etor.ContextEvent = ev;
ChartPlayer.etor.Evaluate(_op, _exp);
if (!ChartPlayer.etor.Evaluate(_op, _exp))
throw new EvaluationFailureException();
ChartPlayer.etor.ContextEvent = null;
if (_flag) return new ChartEvent[] { ev };
else return null;

View File

@@ -88,6 +88,7 @@ namespace Cryville.Crtr {
if (p.Key.annotations.Contains("once")) {
stack.Properties.RemoveAt(i--);
}
if (p.Key.IsValueRequired && !p.Value.IsConstant && dl < 1) nstack.Properties.Add(p);
}
for (int i = 0; i < stack.Elements.Count; i++) {
DynamicElement e = stack.Elements[i];

View File

@@ -91,7 +91,8 @@ namespace Cryville.Crtr {
void Execute(RuntimeSkinContext ctx, PdtOperator op, PdtExpression exp) {
var psrcs = ctx.ReadContext.PropSrcs;
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
ChartPlayer.etor.Evaluate(op, exp);
if (!ChartPlayer.etor.Evaluate(op, exp))
throw new EvaluationFailureException();
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
}
SkinProperty GetPropOp(Transform obj) {
@@ -145,7 +146,8 @@ namespace Cryville.Crtr {
if (dl != 1) return;
var psrcs = ctx.ReadContext.PropSrcs;
if (psrcs != null) ChartPlayer.etor.ContextCascadeInsert(psrcs);
ChartPlayer.etor.Evaluate(_timeOp, exp);
if (!ChartPlayer.etor.Evaluate(_timeOp, exp))
throw new EvaluationFailureException();
if (psrcs != null) ChartPlayer.etor.ContextCascadeDiscard();
group.PushAnchorEvent(_time, Name);
}
@@ -168,7 +170,8 @@ namespace Cryville.Crtr {
float _index;
readonly PropOp _op;
public override void ExecuteDynamic(ISkinnableGroup group, RuntimeSkinContext ctx, PdtExpression exp, IntKeyedDictionary<SkinVariable> vars, int dl) {
ChartPlayer.etor.Evaluate(_op, exp);
if (!ChartPlayer.etor.Evaluate(_op, exp))
throw new EvaluationFailureException();
if (IsSelf) ChartPlayer.effectManager.EmitSelf(Name, _index, ctx.WriteTransform);
else ChartPlayer.effectManager.Emit(Name, _index);
}