From d10e6ea18baa9cddea9a26829ea6f644851ce46b Mon Sep 17 00:00:00 2001 From: PopSlime Date: Sat, 12 Nov 2022 00:55:37 +0800 Subject: [PATCH] Implement judge event preparation. --- Assets/Cryville/Crtr/Judge.cs | 19 +++++++++++++++++-- Assets/Cryville/Crtr/NoteHandler.cs | 3 ++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Assets/Cryville/Crtr/Judge.cs b/Assets/Cryville/Crtr/Judge.cs index efc9026..18db621 100644 --- a/Assets/Cryville/Crtr/Judge.cs +++ b/Assets/Cryville/Crtr/Judge.cs @@ -1,11 +1,20 @@ using Cryville.Common; using Cryville.Common.Pdt; -using Cryville.Common.Unity.Input; +using Cryville.Crtr.Event; using System.Collections.Generic; namespace Cryville.Crtr { public class Judge { readonly PdtRuleset _rs; + readonly Dictionary ct + = new Dictionary(); + readonly Dictionary> evs + = new Dictionary>(); + struct JudgeEvent { + public float EndTime; + public JudgeDefinition Definition { get; set; } + public ContainerState State { get; set; } + } public Judge(PdtRuleset rs) { _rs = rs; foreach (var s in rs.scores) { @@ -14,7 +23,13 @@ namespace Cryville.Crtr { scores.Add(name, s.Value.init); } } - public void Feed(string target) { + public void Prepare(float time, Identifier input, JudgeDefinition def, ContainerState container) { + Dictionary list; + if (!evs.TryGetValue(input, out list)) { + ct.Add(input, 0); + evs.Add(input, list = new Dictionary()); + } + list.Add(time + def.clip[0], new JudgeEvent { EndTime = time + def.clip[1], Definition = def, State = container }); } public void Feed(InputEvent ev) { diff --git a/Assets/Cryville/Crtr/NoteHandler.cs b/Assets/Cryville/Crtr/NoteHandler.cs index c289ef6..2854198 100644 --- a/Assets/Cryville/Crtr/NoteHandler.cs +++ b/Assets/Cryville/Crtr/NoteHandler.cs @@ -95,10 +95,11 @@ namespace Cryville.Crtr { else if (ev.Unstamped == null) { } else if (ev.Unstamped is Chart.Judge) { var tev = (Chart.Judge)ev.Unstamped; - Identifier name; + Identifier name = default(Identifier); ChartPlayer.etor.ContextEvent = tev; ChartPlayer.etor.ContextState = s; ChartPlayer.etor.Evaluate(new PropOp.Identifier(v => name = new Identifier(v)), ruleset.judges[tev.Id].input); + judge.Prepare(ps.Time, name, ruleset.judges[tev.Id], cs); ChartPlayer.etor.ContextState = null; ChartPlayer.etor.ContextEvent = null; }