148 lines
5.2 KiB
Haxe
148 lines
5.2 KiB
Haxe
import flixel.FlxG;
|
|
|
|
class Ratings
|
|
{
|
|
public static function GenerateLetterRank(accuracy:Float) // generate a letter ranking
|
|
{
|
|
var ranking:String = "N/A";
|
|
if(FlxG.save.data.botplay && !PlayState.loadRep)
|
|
ranking = "BotPlay";
|
|
|
|
if (PlayState.misses == 0 && PlayState.bads == 0 && PlayState.shits == 0 && PlayState.goods == 0) // Marvelous (SICK) Full Combo
|
|
ranking = "(MFC)";
|
|
else if (PlayState.misses == 0 && PlayState.bads == 0 && PlayState.shits == 0 && PlayState.goods >= 1) // Good Full Combo (Nothing but Goods & Sicks)
|
|
ranking = "(GFC)";
|
|
else if (PlayState.misses == 0) // Regular FC
|
|
ranking = "(FC)";
|
|
else if (PlayState.misses < 10) // Single Digit Combo Breaks
|
|
ranking = "(SDCB)";
|
|
else
|
|
ranking = "(Clear)";
|
|
|
|
// WIFE TIME :)))) (based on Wife3)
|
|
|
|
var wifeConditions:Array<Bool> = [
|
|
accuracy >= 99.9935, // AAAAA
|
|
accuracy >= 99.980, // AAAA:
|
|
accuracy >= 99.970, // AAAA.
|
|
accuracy >= 99.955, // AAAA
|
|
accuracy >= 99.90, // AAA:
|
|
accuracy >= 99.80, // AAA.
|
|
accuracy >= 99.70, // AAA
|
|
accuracy >= 99, // AA:
|
|
accuracy >= 96.50, // AA.
|
|
accuracy >= 93, // AA
|
|
accuracy >= 90, // A:
|
|
accuracy >= 85, // A.
|
|
accuracy >= 80, // A
|
|
accuracy >= 70, // B
|
|
accuracy >= 60, // C
|
|
accuracy < 60 // D
|
|
];
|
|
|
|
for(i in 0...wifeConditions.length)
|
|
{
|
|
var b = wifeConditions[i];
|
|
if (b)
|
|
{
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
ranking += " AAAAA";
|
|
case 1:
|
|
ranking += " AAAA:";
|
|
case 2:
|
|
ranking += " AAAA.";
|
|
case 3:
|
|
ranking += " AAAA";
|
|
case 4:
|
|
ranking += " AAA:";
|
|
case 5:
|
|
ranking += " AAA.";
|
|
case 6:
|
|
ranking += " AAA";
|
|
case 7:
|
|
ranking += " AA:";
|
|
case 8:
|
|
ranking += " AA.";
|
|
case 9:
|
|
ranking += " AA";
|
|
case 10:
|
|
ranking += " A:";
|
|
case 11:
|
|
ranking += " A.";
|
|
case 12:
|
|
ranking += " A";
|
|
case 13:
|
|
ranking += " B";
|
|
case 14:
|
|
ranking += " C";
|
|
case 15:
|
|
ranking += " D";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (accuracy == 0)
|
|
ranking = "N/A";
|
|
else if(FlxG.save.data.botplay && !PlayState.loadRep)
|
|
ranking = "BotPlay";
|
|
|
|
return ranking;
|
|
}
|
|
|
|
public static function CalculateRating(noteDiff:Float, ?customSafeZone:Float):String // Generate a judgement through some timing shit
|
|
{
|
|
|
|
var customTimeScale = Conductor.timeScale;
|
|
|
|
if (customSafeZone != null)
|
|
customTimeScale = customSafeZone / 166;
|
|
|
|
// trace(customTimeScale + ' vs ' + Conductor.timeScale);
|
|
|
|
// I HATE THIS IF CONDITION
|
|
// IF LEMON SEES THIS I'M SORRY :(
|
|
|
|
// trace('Hit Info\nDifference: ' + noteDiff + '\nZone: ' + Conductor.safeZoneOffset * 1.5 + "\nTS: " + customTimeScale + "\nLate: " + 155 * customTimeScale);
|
|
|
|
var rating = checkRating(noteDiff,customTimeScale);
|
|
|
|
|
|
return rating;
|
|
}
|
|
|
|
public static function checkRating(ms:Float, ts:Float)
|
|
{
|
|
var rating = "shit";
|
|
if (ms <= 166 * ts && ms >= 135 * ts)
|
|
rating = "shit";
|
|
if (ms < 135 * ts && ms >= 90 * ts)
|
|
rating = "bad";
|
|
if (ms < 90 * ts && ms >= 45 * ts)
|
|
rating = "good";
|
|
if (ms < 45 * ts && ms >= -45 * ts)
|
|
rating = "sick";
|
|
if (ms > -90 * ts && ms <= -45 * ts)
|
|
rating = "good";
|
|
if (ms > -135 * ts && ms <= -90 * ts)
|
|
rating = "bad";
|
|
if (ms > -166 * ts && ms <= -135 * ts)
|
|
rating = "shit";
|
|
return rating;
|
|
}
|
|
|
|
public static function CalculateRanking(score:Int,scoreDef:Int,nps:Int,maxNPS:Int,accuracy:Float):String
|
|
{
|
|
return
|
|
(FlxG.save.data.npsDisplay ? // NPS Toggle
|
|
"NPS: " + nps + " (Max " + maxNPS + ")" + (!PlayStateChangeables.botPlay || PlayState.loadRep ? " | " : "") : "") + // NPS
|
|
(!PlayStateChangeables.botPlay || PlayState.loadRep ? "Score:" + (Conductor.safeFrames != 10 ? score + " (" + scoreDef + ")" : "" + score) + // Score
|
|
(FlxG.save.data.accuracyDisplay ? // Accuracy Toggle
|
|
" | Combo Breaks:" + PlayState.misses + // Misses/Combo Breaks
|
|
" | Accuracy:" + (PlayStateChangeables.botPlay && !PlayState.loadRep ? "N/A" : HelperFunctions.truncateFloat(accuracy, 2) + " %") + // Accuracy
|
|
" | " + GenerateLetterRank(accuracy) : "") : ""); // Letter Rank
|
|
}
|
|
}
|