This commit is contained in:
SoulliesOfficial
2025-09-06 21:58:48 -04:00
parent 7a188f725d
commit 64c84ac685
21 changed files with 206 additions and 335 deletions

View File

@@ -36,6 +36,9 @@ namespace Ichni
return;
}
List<InputUnitSwipe> tapSwipeList = inputUnitSwipeList.Where(x => x.isFirst).ToList();
List<InputUnitSwipe> holdSwipeList = inputUnitSwipeList.Where(x => !x.isFirst).ToList();
foreach (InputUnitTap inputUnitTap in inputUnitTapList)
{
List<Tap> availableTaps = new List<Tap>();
@@ -61,8 +64,8 @@ namespace Ichni
if (haveHold && haveTap)
{
List<Hold> minHolds = GetAllMinHolds(availableHolds);
List<Tap> minTaps = GetAllMinTaps(availableTaps);
List<Hold> minHolds = GetAllMinNotes(availableHolds);
List<Tap> minTaps = GetAllMinNotes(availableTaps);
Hold closestHold = minHolds[0];
Tap closestTap = minTaps[0];
if (closestHold.exactJudgeTime < closestTap.exactJudgeTime)
@@ -73,7 +76,7 @@ namespace Ichni
}
else
{
GetNearestHold(minHolds, inputUnitTap.inputPosition).ExecuteStartJudge();
GetNearestNote(minHolds, inputUnitTap.inputPosition).ExecuteStartJudge();
}
}
else
@@ -84,40 +87,64 @@ namespace Ichni
}
else
{
GetNearestTap(minTaps, inputUnitTap.inputPosition).ExecuteStartJudge();
GetNearestNote(minTaps, inputUnitTap.inputPosition).ExecuteStartJudge();
}
}
}
else if (haveHold)
{
List<Hold> minHolds = GetAllMinHolds(availableHolds);
List<Hold> minHolds = GetAllMinNotes(availableHolds);
if (minHolds.Count == 1)
{
minHolds[0].ExecuteStartJudge();
}
else
{
GetNearestHold(minHolds, inputUnitTap.inputPosition).ExecuteStartJudge();
GetNearestNote(minHolds, inputUnitTap.inputPosition).ExecuteStartJudge();
}
}
else if (haveTap)
{
List<Tap> minTaps = GetAllMinTaps(availableTaps);
List<Tap> minTaps = GetAllMinNotes(availableTaps);
if (minTaps.Count == 1)
{
minTaps[0].ExecuteStartJudge();
}
else
{
GetNearestTap(minTaps, inputUnitTap.inputPosition).ExecuteStartJudge();
GetNearestNote(minTaps, inputUnitTap.inputPosition).ExecuteStartJudge();
}
}
}
foreach (InputUnitSwipe inputUnitSwipe in inputUnitSwipeList)
foreach (InputUnitSwipe tapSwipe in tapSwipeList)
{
List<Flick> availableFlicks = new List<Flick>();
foreach (Flick flick in checkingFlickList)
{
if (flick.CheckJudgeAvailability(tapSwipe))
{
availableFlicks.Add(flick);
}
}
List<Flick> minFlicks = GetAllMinNotes(availableFlicks);
if (minFlicks.Count == 1)
{
minFlicks[0].ExecuteStartJudge();
}
else if (minFlicks.Count > 1)
{
GetNearestNote(minFlicks, tapSwipe.inputPosition).ExecuteTapJudge();
}
}
foreach (InputUnitSwipe inputUnitSwipe in holdSwipeList)
{
List<Flick> availableFlicks = new List<Flick>();
foreach (Flick flick in checkingFlickList)
{
if (flick.CheckJudgeAvailability(inputUnitSwipe))
@@ -200,69 +227,31 @@ namespace Ichni
public partial class NoteJudgeManager
{
private List<Tap> GetAllMinTaps(List<Tap> availableTaps)
private List<T> GetAllMinNotes<T>(List<T> availableFlicks) where T : NoteBase
{
List<Tap> minTaps = new List<Tap>();
List<T> minFlicks = new List<T>();
float minTime = float.MaxValue;
foreach (Tap tap in availableTaps)
foreach (T flick in availableFlicks)
{
if (tap.exactJudgeTime < minTime)
if (flick.exactJudgeTime < minTime)
{
minTime = tap.exactJudgeTime;
minTaps.Clear();
minTaps.Add(tap);
minTime = flick.exactJudgeTime;
minFlicks.Clear();
minFlicks.Add(flick);
}
else if (Mathf.Approximately(tap.exactJudgeTime, minTime))
else if (Mathf.Approximately(flick.exactJudgeTime, minTime))
{
minTaps.Add(tap);
minFlicks.Add(flick);
}
}
return minTaps;
return minFlicks;
}
private List<Hold> GetAllMinHolds(List<Hold> availableHolds)
{
List<Hold> minHolds = new List<Hold>();
float minTime = float.MaxValue;
foreach (Hold hold in availableHolds)
{
if (hold.exactJudgeTime < minTime)
{
minTime = hold.exactJudgeTime;
minHolds.Clear();
minHolds.Add(hold);
}
else if (Mathf.Approximately(hold.exactJudgeTime, minTime))
{
minHolds.Add(hold);
}
}
return minHolds;
}
private Tap GetNearestTap(List<Tap> notes, Vector2 inputPosition)
private T GetNearestNote<T>(List<T> notes, Vector2 inputPosition) where T : NoteBase
{
float minDistance = float.MaxValue;
Tap closestNote = null;
foreach (Tap note in notes)
{
float distance = Vector2.Distance(inputPosition, note.noteScreenPosition);
if (distance < minDistance)
{
minDistance = distance;
closestNote = note;
}
}
return closestNote;
}
private Hold GetNearestHold(List<Hold> notes, Vector2 inputPosition)
{
float minDistance = float.MaxValue;
Hold closestNote = null;
foreach (Hold note in notes)
T closestNote = null;
foreach (T note in notes)
{
float distance = Vector2.Distance(inputPosition, note.noteScreenPosition);
if (distance < minDistance)