From 990a42f71b4d2b54ccb2cf4adf4fc53dab779b5e Mon Sep 17 00:00:00 2001 From: PopSlime Date: Fri, 11 Nov 2022 10:36:00 +0800 Subject: [PATCH] Evaluates clipping of judge events on load. --- Assets/Cryville/Crtr/Judge.cs | 2 +- Assets/Cryville/Crtr/Ruleset.cs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Assets/Cryville/Crtr/Judge.cs b/Assets/Cryville/Crtr/Judge.cs index 26c0636..efc9026 100644 --- a/Assets/Cryville/Crtr/Judge.cs +++ b/Assets/Cryville/Crtr/Judge.cs @@ -48,7 +48,7 @@ namespace Cryville.Crtr { public Dictionary pass; } public class JudgeDefinition { - public PdtExpression clip; + public float[] clip; public PdtExpression input; public PdtExpression hit; public Identifier[] pass; diff --git a/Assets/Cryville/Crtr/Ruleset.cs b/Assets/Cryville/Crtr/Ruleset.cs index 401311b..1c0322f 100644 --- a/Assets/Cryville/Crtr/Ruleset.cs +++ b/Assets/Cryville/Crtr/Ruleset.cs @@ -44,7 +44,6 @@ namespace Cryville.Crtr { } } foreach (var j in judges.Values) { - if (j.clip != null) etor.Optimize(j.clip); if (j.hit != null) etor.Optimize(j.hit); if (j.scores != null) foreach (var e in j.scores.Values) { etor.Optimize(e); @@ -148,6 +147,11 @@ namespace Cryville.Crtr { ChartPlayer.etor.Evaluate(new PropOp.String(r => result = r), exp); return result; } + else if (type.Equals(typeof(float[]))) { + float[] result = null; + ChartPlayer.etor.Evaluate(new pop_numarr(r => result = r), exp); + return result; + } else if (type.Equals(typeof(Identifier))) { Identifier result = default(Identifier); ChartPlayer.etor.Evaluate(new pop_identstr(r => result = r), exp); @@ -175,6 +179,17 @@ namespace Cryville.Crtr { return base.ChangeType(value, type, culture); } #pragma warning disable IDE1006 + class pop_numarr : PdtOperator { + readonly Action _cb; + public pop_numarr(Action cb) : base(16) { _cb = cb; } + protected override void Execute() { + var result = new float[LoadedOperandCount]; + for (int i = 0; i < LoadedOperandCount; i++) { + result[i] = GetOperand(i).AsNumber(); + } + _cb(result); + } + } class pop_identstr : PropOp { readonly Action _cb; public pop_identstr(Action cb) { _cb = cb; }