Files
Assembly-CSharp/Assembly-CSharp/NoteJudge.cs
2026-06-12 12:58:31 +08:00

448 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x0200003F RID: 63
public class NoteJudge
{
// Token: 0x060001E1 RID: 481 RVA: 0x000070A2 File Offset: 0x000062A2
public static float GetNoteCheckStart(NoteJudge.EJudgeType type)
{
return NoteJudge.judgeParamTbl[(int)type][0];
}
// Token: 0x060001E2 RID: 482 RVA: 0x000070B5 File Offset: 0x000062B5
public static float GetNoteCheckEnd(NoteJudge.EJudgeType type)
{
return NoteJudge.judgeParamTbl[(int)type][14];
}
// Token: 0x060001E4 RID: 484 RVA: 0x00003598 File Offset: 0x00002798
public static void Initialize()
{
}
// Token: 0x060001E5 RID: 485 RVA: 0x00007268 File Offset: 0x00006468
public static NoteJudge.ETiming GetJudgeTiming(ref float _fMsec, float optionJudgeTiming, NoteJudge.EJudgeType type)
{
_fMsec -= optionJudgeTiming * 16.666666f;
if (type == NoteJudge.EJudgeType.SlideOut)
{
_fMsec += NoteJudge.JudgeAdjustMs;
}
NoteJudge.ETiming etiming;
if (_fMsec < NoteJudge.judgeParamTbl[(int)type][0])
{
etiming = NoteJudge.ETiming.TooFast;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][1])
{
etiming = NoteJudge.ETiming.FastGood;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][2])
{
etiming = NoteJudge.ETiming.FastGreat3rd;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][3])
{
etiming = NoteJudge.ETiming.FastGreat2nd;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][4])
{
etiming = NoteJudge.ETiming.FastGreat;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][5])
{
etiming = NoteJudge.ETiming.FastPerfect2nd;
}
else if (_fMsec < NoteJudge.judgeParamTbl[(int)type][6])
{
etiming = NoteJudge.ETiming.FastPerfect;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][8])
{
etiming = NoteJudge.ETiming.Critical;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][9])
{
etiming = NoteJudge.ETiming.LatePerfect;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][10])
{
etiming = NoteJudge.ETiming.LatePerfect2nd;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][11])
{
etiming = NoteJudge.ETiming.LateGreat;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][12])
{
etiming = NoteJudge.ETiming.LateGreat2nd;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][13])
{
etiming = NoteJudge.ETiming.LateGreat3rd;
}
else if (_fMsec <= NoteJudge.judgeParamTbl[(int)type][14])
{
etiming = NoteJudge.ETiming.LateGood;
}
else
{
etiming = NoteJudge.ETiming.TooLate;
}
_fMsec -= NoteJudge.JudgeAdjustMs;
return etiming;
}
// Token: 0x060001E6 RID: 486 RVA: 0x00007424 File Offset: 0x00006624
public static NoteJudge.ETiming GetSlideJudgeTiming(ref float _fMsec, float optionJudgeTiming, NoteJudge.EJudgeType type, float lastWaitTime)
{
float num = lastWaitTime / 4f;
float num2 = NoteJudge.judgeParamTbl[2][6] - num;
float num3 = NoteJudge.judgeParamTbl[2][8] + num;
float num4 = NoteJudge.judgeParamTbl[2][0];
float num5 = NoteJudge.judgeParamTbl[2][14];
float num6 = _fMsec - optionJudgeTiming * 16.666666f;
NoteJudge.ETiming etiming;
if (type != NoteJudge.EJudgeType.SlideOut)
{
etiming = NoteJudge.GetJudgeTiming(ref _fMsec, optionJudgeTiming, NoteJudge.EJudgeType.SlideOut);
}
else if (num2 <= num6 && num6 <= num3 && num4 <= num6 && num6 <= num5)
{
etiming = NoteJudge.ETiming.Critical;
}
else
{
etiming = NoteJudge.GetJudgeTiming(ref _fMsec, optionJudgeTiming, NoteJudge.EJudgeType.SlideOut);
}
return etiming;
}
// Token: 0x060001E7 RID: 487 RVA: 0x000074C8 File Offset: 0x000066C8
public static NoteJudge.JudgeBox ConvertJudge(NoteJudge.ETiming timing)
{
switch (timing)
{
case NoteJudge.ETiming.TooFast:
case NoteJudge.ETiming.TooLate:
return NoteJudge.JudgeBox.Miss;
case NoteJudge.ETiming.FastGood:
case NoteJudge.ETiming.LateGood:
return NoteJudge.JudgeBox.Good;
case NoteJudge.ETiming.FastGreat3rd:
case NoteJudge.ETiming.FastGreat2nd:
case NoteJudge.ETiming.FastGreat:
case NoteJudge.ETiming.LateGreat:
case NoteJudge.ETiming.LateGreat2nd:
case NoteJudge.ETiming.LateGreat3rd:
return NoteJudge.JudgeBox.Great;
case NoteJudge.ETiming.FastPerfect2nd:
case NoteJudge.ETiming.FastPerfect:
case NoteJudge.ETiming.LatePerfect:
case NoteJudge.ETiming.LatePerfect2nd:
return NoteJudge.JudgeBox.Perfect;
case NoteJudge.ETiming.Critical:
return NoteJudge.JudgeBox.Critical;
default:
return NoteJudge.JudgeBox.Miss;
}
}
// Token: 0x060001E8 RID: 488 RVA: 0x00007524 File Offset: 0x00006724
public static NoteJudge.ETiming JudgeHoldTotal(float holdTime, float holdReleaseTime, NoteJudge.ETiming timing, bool bodyOn, bool isTouchHold)
{
float num = (isTouchHold ? NoteJudge.JudgeTouchHoldHeadFrame : NoteJudge.JudgeHoldHeadFrame);
if (holdTime <= num + NoteJudge.JudgeHoldTailFrame)
{
return timing;
}
holdTime -= num + NoteJudge.JudgeHoldTailFrame;
if (!bodyOn)
{
return NoteJudge.holdJudgeParam[4][(int)timing];
}
int num2 = Mathf.CeilToInt(holdReleaseTime / holdTime * 100f);
if (num2 > 100)
{
num2 = 100;
}
for (int i = 0; i < NoteJudge.holdJudgePercent.Length; i++)
{
if (NoteJudge.holdJudgePercent[i] >= num2)
{
return NoteJudge.holdJudgeParam[i][(int)timing];
}
}
return NoteJudge.holdJudgeParam[4][(int)timing];
}
// Token: 0x04000138 RID: 312
public static float JudgeAdjustMs = 50f;
// Token: 0x04000139 RID: 313
public static float JudgeHoldHeadFrame = 50f + NoteJudge.JudgeAdjustMs;
// Token: 0x0400013A RID: 314
public static float JudgeHoldTailFrame = 150f + NoteJudge.JudgeAdjustMs;
// Token: 0x0400013B RID: 315
public static float JudgeTouchHoldHeadFrame = 200f + NoteJudge.JudgeAdjustMs;
// Token: 0x0400013C RID: 316
public static float JudgeTouchHoldTailFrame = 150f + NoteJudge.JudgeAdjustMs;
// Token: 0x0400013D RID: 317
private static readonly List<NoteJudge.JuggeTiming> judgeParamTbl = new List<NoteJudge.JuggeTiming>
{
new NoteJudge.JuggeTiming(new float[]
{
-9f, -6f, -5f, -4f, -3f, -2f, -1f, 0f, 1f, 2f,
3f, 4f, 5f, 6f, 9f
}),
new NoteJudge.JuggeTiming(new float[]
{
-9f, -6f, -5f, -4f, -3f, -2f, -1f, 0f, 1f, 4f,
8f, 9f, 10f, 11f, 14f
}),
new NoteJudge.JuggeTiming(new float[]
{
-36f, -26f, -22f, -18f, -14f, -14f, -14f, 0f, 14f, 14f,
14f, 16f, 22f, 26f, 36f
}),
new NoteJudge.JuggeTiming(new float[]
{
-9f, -9f, -9f, -9f, -9f, -9f, -9f, 0f, 9f, 10.5f,
12f, 13f, 14f, 15f, 18f
}),
new NoteJudge.JuggeTiming(new float[]
{
-9f, -9f, -9f, -9f, -9f, -9f, -9f, 0f, 9f, 9f,
9f, 9f, 9f, 9f, 9f
}),
new NoteJudge.JuggeTiming(new float[]
{
-9f, -6f, -5f, -4f, -3f, -2f, -1f, 0f, 1f, 2f,
3f, 4f, 5f, 6f, 9f
})
};
// Token: 0x0400013E RID: 318
private static readonly int[] holdJudgePercent = new int[] { 0, 33, 67, 95, 100 };
// Token: 0x0400013F RID: 319
private static readonly NoteJudge.ETiming[][] holdJudgeParam = new NoteJudge.ETiming[][]
{
new NoteJudge.ETiming[]
{
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastPerfect,
NoteJudge.ETiming.FastPerfect,
NoteJudge.ETiming.Critical,
NoteJudge.ETiming.LatePerfect,
NoteJudge.ETiming.LatePerfect,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGood
},
new NoteJudge.ETiming[]
{
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastPerfect,
NoteJudge.ETiming.FastPerfect,
NoteJudge.ETiming.LatePerfect,
NoteJudge.ETiming.LatePerfect,
NoteJudge.ETiming.LatePerfect,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGood
},
new NoteJudge.ETiming[]
{
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.FastGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGreat,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood
},
new NoteJudge.ETiming[]
{
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood
},
new NoteJudge.ETiming[]
{
NoteJudge.ETiming.TooFast,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.FastGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.LateGood,
NoteJudge.ETiming.TooLate
}
};
// Token: 0x02000956 RID: 2390
public enum EJudgeType
{
// Token: 0x04005F23 RID: 24355
Tap,
// Token: 0x04005F24 RID: 24356
HoldOut,
// Token: 0x04005F25 RID: 24357
SlideOut,
// Token: 0x04005F26 RID: 24358
Touch,
// Token: 0x04005F27 RID: 24359
ExTap,
// Token: 0x04005F28 RID: 24360
Break,
// Token: 0x04005F29 RID: 24361
End
}
// Token: 0x02000957 RID: 2391
public enum ETiming
{
// Token: 0x04005F2B RID: 24363
TooFast,
// Token: 0x04005F2C RID: 24364
FastGood,
// Token: 0x04005F2D RID: 24365
FastGreat3rd,
// Token: 0x04005F2E RID: 24366
FastGreat2nd,
// Token: 0x04005F2F RID: 24367
FastGreat,
// Token: 0x04005F30 RID: 24368
FastPerfect2nd,
// Token: 0x04005F31 RID: 24369
FastPerfect,
// Token: 0x04005F32 RID: 24370
Critical,
// Token: 0x04005F33 RID: 24371
LatePerfect,
// Token: 0x04005F34 RID: 24372
LatePerfect2nd,
// Token: 0x04005F35 RID: 24373
LateGreat,
// Token: 0x04005F36 RID: 24374
LateGreat2nd,
// Token: 0x04005F37 RID: 24375
LateGreat3rd,
// Token: 0x04005F38 RID: 24376
LateGood,
// Token: 0x04005F39 RID: 24377
TooLate,
// Token: 0x04005F3A RID: 24378
End
}
// Token: 0x02000958 RID: 2392
public enum JudgeBox
{
// Token: 0x04005F3C RID: 24380
Miss,
// Token: 0x04005F3D RID: 24381
Good,
// Token: 0x04005F3E RID: 24382
Great,
// Token: 0x04005F3F RID: 24383
Perfect,
// Token: 0x04005F40 RID: 24384
Critical,
// Token: 0x04005F41 RID: 24385
End
}
// Token: 0x02000959 RID: 2393
private class JuggeTiming
{
// Token: 0x06004C5E RID: 19550 RVA: 0x0019A6F0 File Offset: 0x001998F0
public JuggeTiming(float[] array)
{
for (int i = 0; i < array.Length; i++)
{
this.judgeFlameList[i] = array[i] * 16.666666f + NoteJudge.JudgeAdjustMs;
}
}
// Token: 0x17000810 RID: 2064
public float this[int i]
{
get
{
return this.judgeFlameList[i];
}
set
{
this.judgeFlameList[i] = value;
}
}
// Token: 0x04005F42 RID: 24386
private float[] judgeFlameList = new float[15];
}
// Token: 0x0200095A RID: 2394
private enum HoldCheckPoint
{
// Token: 0x04005F44 RID: 24388
Critical,
// Token: 0x04005F45 RID: 24389
Perfect,
// Token: 0x04005F46 RID: 24390
Great,
// Token: 0x04005F47 RID: 24391
Good,
// Token: 0x04005F48 RID: 24392
Miss,
// Token: 0x04005F49 RID: 24393
End
}
}