diff calculator

This commit is contained in:
Kade M 2021-06-25 21:26:29 -07:00
parent 10d601ddc9
commit b16237ab92
3 changed files with 150 additions and 9 deletions

View File

@ -83,6 +83,7 @@ class Caching extends MusicBeatState
var images = []; var images = [];
var music = []; var music = [];
var charts = [];
trace("caching images..."); trace("caching images...");
@ -100,6 +101,7 @@ class Caching extends MusicBeatState
music.push(i); music.push(i);
} }
toBeDone = Lambda.count(images) + Lambda.count(music); toBeDone = Lambda.count(images) + Lambda.count(music);
trace("LOADING: " + toBeDone + " OBJECTS."); trace("LOADING: " + toBeDone + " OBJECTS.");
@ -120,6 +122,7 @@ class Caching extends MusicBeatState
done++; done++;
} }
trace("Finished caching..."); trace("Finished caching...");
FlxG.switchState(new TitleState()); FlxG.switchState(new TitleState());

96
source/DiffCalc.hx Normal file
View File

@ -0,0 +1,96 @@
import Song.SwagSong;
class SmallNote // basically Note.hx but small as fuck
{
public var strumTime:Float;
public var noteData:Int;
public function new(strum,data)
{
strumTime = strum;
noteData = data;
}
}
class DiffCalc
{
public static function CalculateDiff(song:SwagSong)
{
// cleaned notes
var cleanedNotes:Array<SmallNote> = [];
// find all of the notes
for(i in song.notes) // sections
{
for (ii in i.sectionNotes) // notes
{
var gottaHit = true;
if (ii[2] >= 1) // skip helds
continue;
if (ii[1] > 3) // if the note data is greater than 3
gottaHit = !i.mustHitSection;
if (gottaHit)
cleanedNotes.push(new SmallNote(ii[0],ii[1]));
}
}
cleanedNotes.sort((a, b) -> Std.int(a.strumTime - b.strumTime));
var firstNoteTime = cleanedNotes[0].strumTime;
trace(firstNoteTime);
// normalize the notes
for(i in cleanedNotes)
{
i.strumTime = (i.strumTime - firstNoteTime) * 2;
}
// length in segments of the song
var length = ((cleanedNotes[cleanedNotes.length - 1].strumTime / 1000) / 0.5);
trace(length);
// hackey way of creating a array with a length
var segments:Array<Int> = new_Array(1,Std.int(length));
// algo loop
for(i in cleanedNotes)
{
var index = Std.int(i.strumTime / 1000);
if (index + 1 > segments.length)
continue;
segments[index] = segments[index] + 1;
}
// get the average of all of the segments
var sum:Float = 0;
var newLength = segments.length;
for (i in segments)
{
if (i == 0) // remove empty/breaks
{
newLength--;
continue;
}
sum += i / .5; // half it because otherwise instead of nps its just fucking notes per half second which is dumb and stupid
}
trace(sum + " - " + newLength);
return HelperFunctions.truncateFloat(sum / newLength,2);
}
static public function new_Array<T>( ArrayType:T, Length:Int ):Array<T> {
var empty:Null<T> = null;
var newArray:Array<T> = new Array<T>();
for ( i in 0...Length ) {
newArray.push( empty );
}
return newArray;
}
}

View File

@ -1,5 +1,6 @@
package; package;
import Song.SwagSong;
import flixel.input.gamepad.FlxGamepad; import flixel.input.gamepad.FlxGamepad;
import flash.text.TextField; import flash.text.TextField;
import flixel.FlxG; import flixel.FlxG;
@ -29,6 +30,7 @@ class FreeplayState extends MusicBeatState
var scoreText:FlxText; var scoreText:FlxText;
var comboText:FlxText; var comboText:FlxText;
var diffText:FlxText; var diffText:FlxText;
var diffCalcText:FlxText;
var lerpScore:Int = 0; var lerpScore:Int = 0;
var intendedScore:Int = 0; var intendedScore:Int = 0;
var combo:String = ''; var combo:String = '';
@ -38,6 +40,20 @@ class FreeplayState extends MusicBeatState
private var iconArray:Array<HealthIcon> = []; private var iconArray:Array<HealthIcon> = [];
public static var songData:Map<String,Array<SwagSong>> = [];
public static function loadDiff(diff:Int, format:String, name:String, array:Array<SwagSong>)
{
try
{
array.push(Song.loadFromJson(Highscore.formatSong(format, diff), name));
}
catch(ex)
{
// do nada
}
}
override function create() override function create()
{ {
var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist')); var initSonglist = CoolUtil.coolTextFile(Paths.txt('freeplaySonglist'));
@ -45,7 +61,21 @@ class FreeplayState extends MusicBeatState
for (i in 0...initSonglist.length) for (i in 0...initSonglist.length)
{ {
var data:Array<String> = initSonglist[i].split(':'); var data:Array<String> = initSonglist[i].split(':');
songs.push(new SongMetadata(data[0], Std.parseInt(data[2]), data[1])); var meta = new SongMetadata(data[0], Std.parseInt(data[2]), data[1]);
songs.push(meta);
var format = StringTools.replace(meta.songName, " ", "-");
switch (format) {
case 'Dad-Battle': format = 'Dadbattle';
case 'Philly-Nice': format = 'Philly';
}
var diffs = [];
FreeplayState.loadDiff(0,format,meta.songName,diffs);
FreeplayState.loadDiff(1,format,meta.songName,diffs);
FreeplayState.loadDiff(2,format,meta.songName,diffs);
FreeplayState.songData.set(meta.songName,diffs);
trace('loaded diffs for ' + meta.songName);
} }
/* /*
@ -101,7 +131,7 @@ class FreeplayState extends MusicBeatState
scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT); scoreText.setFormat(Paths.font("vcr.ttf"), 32, FlxColor.WHITE, RIGHT);
// scoreText.alignment = RIGHT; // scoreText.alignment = RIGHT;
var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 66, 0xFF000000); var scoreBG:FlxSprite = new FlxSprite(scoreText.x - 6, 0).makeGraphic(Std.int(FlxG.width * 0.35), 105, 0xFF000000);
scoreBG.alpha = 0.6; scoreBG.alpha = 0.6;
add(scoreBG); add(scoreBG);
@ -109,6 +139,10 @@ class FreeplayState extends MusicBeatState
diffText.font = scoreText.font; diffText.font = scoreText.font;
add(diffText); add(diffText);
diffCalcText = new FlxText(scoreText.x, scoreText.y + 66, 0, "", 24);
diffCalcText.font = scoreText.font;
add(diffCalcText);
comboText = new FlxText(diffText.x + 100, diffText.y, 0, "", 24); comboText = new FlxText(diffText.x + 100, diffText.y, 0, "", 24);
comboText.font = diffText.font; comboText.font = diffText.font;
add(comboText); add(comboText);
@ -238,14 +272,20 @@ class FreeplayState extends MusicBeatState
case 'Dad-Battle': songFormat = 'Dadbattle'; case 'Dad-Battle': songFormat = 'Dadbattle';
case 'Philly-Nice': songFormat = 'Philly'; case 'Philly-Nice': songFormat = 'Philly';
} }
var hmm;
try
{
hmm = songData.get(songs[curSelected].songName)[curDifficulty];
if (hmm == null)
return;
}
catch(ex)
{
return;
}
trace(songs[curSelected].songName);
var poop:String = Highscore.formatSong(songFormat, curDifficulty); PlayState.SONG = hmm;
trace(poop);
PlayState.SONG = Song.loadFromJson(poop, songs[curSelected].songName);
PlayState.isStoryMode = false; PlayState.isStoryMode = false;
PlayState.storyDifficulty = curDifficulty; PlayState.storyDifficulty = curDifficulty;
PlayState.storyWeek = songs[curSelected].week; PlayState.storyWeek = songs[curSelected].week;
@ -274,7 +314,7 @@ class FreeplayState extends MusicBeatState
intendedScore = Highscore.getScore(songHighscore, curDifficulty); intendedScore = Highscore.getScore(songHighscore, curDifficulty);
combo = Highscore.getCombo(songHighscore, curDifficulty); combo = Highscore.getCombo(songHighscore, curDifficulty);
#end #end
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase(); diffText.text = CoolUtil.difficultyFromInt(curDifficulty).toUpperCase();
} }
@ -310,6 +350,8 @@ class FreeplayState extends MusicBeatState
// lerpScore = 0; // lerpScore = 0;
#end #end
diffCalcText.text = 'RATING: ${DiffCalc.CalculateDiff(songData.get(songs[curSelected].songName)[curDifficulty])}';
#if PRELOAD_ALL #if PRELOAD_ALL
FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0); FlxG.sound.playMusic(Paths.inst(songs[curSelected].songName), 0);
#end #end