From 5514b6cf37f0df77cfedcc5a54d781d46a3bb977 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 31 Jan 2023 14:55:41 +0800 Subject: [PATCH] Pull up clip from judge definition. Add clip to event container. --- Assets/Cryville/Crtr/Chart.cs | 7 +++++++ Assets/Cryville/Crtr/Clip.cs | 10 ++++++++++ Assets/Cryville/Crtr/Clip.cs.meta | 11 +++++++++++ Assets/Cryville/Crtr/Judge.cs | 6 +++--- Assets/Cryville/Crtr/PropOp.cs | 13 ++++++++++++- Assets/Cryville/Crtr/Ruleset.cs | 17 +++-------------- 6 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 Assets/Cryville/Crtr/Clip.cs create mode 100644 Assets/Cryville/Crtr/Clip.cs.meta diff --git a/Assets/Cryville/Crtr/Chart.cs b/Assets/Cryville/Crtr/Chart.cs index 476d8b5..7e5e2ef 100644 --- a/Assets/Cryville/Crtr/Chart.cs +++ b/Assets/Cryville/Crtr/Chart.cs @@ -184,6 +184,13 @@ namespace Cryville.Crtr { public abstract class EventContainer : ChartEvent { public List motions = new List(); + [JsonIgnore] + public Clip Clip { get; private set; } + + public EventContainer() { + SubmitPropOp("clip", new PropOp.Clip(v => Clip = v)); + } + [JsonIgnore] public virtual IEnumerable Events { get { diff --git a/Assets/Cryville/Crtr/Clip.cs b/Assets/Cryville/Crtr/Clip.cs new file mode 100644 index 0000000..89d0031 --- /dev/null +++ b/Assets/Cryville/Crtr/Clip.cs @@ -0,0 +1,10 @@ +namespace Cryville.Crtr { + public struct Clip { + public float Behind { get; set; } + public float Ahead { get; set; } + public Clip(float behind, float ahead) { + Behind = behind; + Ahead = ahead; + } + } +} diff --git a/Assets/Cryville/Crtr/Clip.cs.meta b/Assets/Cryville/Crtr/Clip.cs.meta new file mode 100644 index 0000000..636d09e --- /dev/null +++ b/Assets/Cryville/Crtr/Clip.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31109f74226deb947b93732206b112ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Cryville/Crtr/Judge.cs b/Assets/Cryville/Crtr/Judge.cs index e32f80e..91a1935 100644 --- a/Assets/Cryville/Crtr/Judge.cs +++ b/Assets/Cryville/Crtr/Judge.cs @@ -53,8 +53,8 @@ namespace Cryville.Crtr { var ev = new JudgeEvent { StartTime = st, EndTime = et, - StartClip = st + def.clip[0], - EndClip = et + def.clip[1], + StartClip = st + def.clip.Behind, + EndClip = et + def.clip.Ahead, BaseEvent = tev, Definition = def, Handler = handler, @@ -284,7 +284,7 @@ namespace Cryville.Crtr { public Dictionary pass; } public class JudgeDefinition { - public float[] clip; + public Clip clip; public PdtExpression input; public PdtExpression hit; public Identifier[] pass; diff --git a/Assets/Cryville/Crtr/PropOp.cs b/Assets/Cryville/Crtr/PropOp.cs index f0e3df4..19f23fc 100644 --- a/Assets/Cryville/Crtr/PropOp.cs +++ b/Assets/Cryville/Crtr/PropOp.cs @@ -4,11 +4,13 @@ using System; using System.Collections.Generic; using System.Reflection; using RBeatTime = Cryville.Crtr.BeatTime; +using RClip = Cryville.Crtr.Clip; using RTargetString = Cryville.Common.Buffers.TargetString; namespace Cryville.Crtr { public abstract class PropOp : PdtOperator { - internal PropOp() : base(1) { } + protected PropOp() : base(1) { } + protected PropOp(int pc) : base(pc) { } public class Arbitrary : PropOp { public int Name { get; set; } protected override void Execute() { @@ -25,6 +27,15 @@ namespace Cryville.Crtr { _cb(GetOperand(0).AsNumber() > 0); } } + public class Clip : PropOp { + readonly Action _cb; + public Clip(Action cb) : base(2) { _cb = cb; } + protected override void Execute() { + if (LoadedOperandCount < 2) + throw new ArgumentException("Invalid clip syntax"); + _cb(new RClip(GetOperand(0).AsNumber(), GetOperand(1).AsNumber())); + } + } public class Integer : PropOp { readonly Action _cb; public Integer(Action cb) { _cb = cb; } diff --git a/Assets/Cryville/Crtr/Ruleset.cs b/Assets/Cryville/Crtr/Ruleset.cs index 7fd2f38..ced1016 100644 --- a/Assets/Cryville/Crtr/Ruleset.cs +++ b/Assets/Cryville/Crtr/Ruleset.cs @@ -150,9 +150,9 @@ 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); + else if (type.Equals(typeof(Clip))) { + Clip result = default(Clip); + ChartPlayer.etor.Evaluate(new PropOp.Clip(r => result = r), exp); return result; } else if (type.Equals(typeof(Identifier))) { @@ -182,17 +182,6 @@ 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; }