From 9e0bf024d79824faf7d718e11a541f2e3a4718b3 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Mon, 14 Nov 2022 23:28:14 +0800 Subject: [PATCH] Fix judge propagation. --- Assets/Cryville/Crtr/Judge.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Assets/Cryville/Crtr/Judge.cs b/Assets/Cryville/Crtr/Judge.cs index 76cbe88..f53fca4 100644 --- a/Assets/Cryville/Crtr/Judge.cs +++ b/Assets/Cryville/Crtr/Judge.cs @@ -85,6 +85,19 @@ namespace Cryville.Crtr { } return ~num; } + int BinarySearchFirst(List list, float time, int stack) { + if (list[0].Definition.stack == stack && list[0].StartClip == time) return 0; + int num = 0; + int num2 = list.Count - 1; + while (num <= num2) { + int num3 = num + (num2 - num >> 1); + int num4 = -list[num3].Definition.stack.CompareTo(stack); + if (num4 == 0) num4 = list[num3].StartClip.CompareTo(time); + if (num4 >= 0) num2 = num3 - 1; + else num = num3 + 1; + } + return num + 1; + } public void Feed(Identifier target, float ft, float tt) { Forward(target, tt); var actlist = activeEvs[target]; @@ -103,8 +116,11 @@ namespace Cryville.Crtr { if (def.scores != null) UpdateScore(def.scores); if (def.pass != null) Pass(def.pass); actlist.RemoveAt(index); - index = BinarySearch(actlist, ev.StartClip, def.prop); - if (index < 0) index = ~index; + if (def.stack != def.prop && actlist.Count > 0) { + index = BinarySearchFirst(actlist, ev.StartClip, def.prop); + if (index < 0) index = ~index; + } + else index++; } else index++; }