Funkin/source/funkin/Highscore.hx
2024-03-04 22:22:19 -05:00

95 lines
2.3 KiB
Haxe

package funkin;
/**
* A core class which handles tracking score and combo for the current song.
*/
class Highscore
{
/**
* Keeps track of notes hit for the current song
* and how accurate you were with each note (bad, missed, shit, etc.)
*/
public static var tallies:Tallies = new Tallies();
/**
* Keeps track of notes hit for the current WEEK / level
* for use with storymode, or likely any other "playlist" esque option
*/
public static var talliesLevel:Tallies = new Tallies();
/**
* Produces a new Tallies object which represents the sum of two existing Tallies
* @param newTally The first tally
* @param baseTally The second tally
* @return The combined tally
*/
public static function combineTallies(newTally:Tallies, baseTally:Tallies):Tallies
{
var combinedTally:Tallies = new Tallies();
combinedTally.missed = newTally.missed + baseTally.missed;
combinedTally.shit = newTally.shit + baseTally.shit;
combinedTally.bad = newTally.bad + baseTally.bad;
combinedTally.good = newTally.good + baseTally.good;
combinedTally.sick = newTally.sick + baseTally.sick;
combinedTally.totalNotes = newTally.totalNotes + baseTally.totalNotes;
combinedTally.totalNotesHit = newTally.totalNotesHit + baseTally.totalNotesHit;
// Current combo = use most recent.
combinedTally.combo = newTally.combo;
// Max combo = use maximum value.
combinedTally.maxCombo = Std.int(Math.max(newTally.maxCombo, baseTally.maxCombo));
return combinedTally;
}
}
@:forward
abstract Tallies(RawTallies)
{
public function new()
{
this =
{
combo: 0,
missed: 0,
shit: 0,
bad: 0,
good: 0,
sick: 0,
totalNotes: 0,
totalNotesHit: 0,
maxCombo: 0,
isNewHighscore: false
}
}
}
/**
* A structure object containing the data for highscore tallies.
*/
typedef RawTallies =
{
var combo:Int;
/**
* How many notes you let scroll by.
*/
var missed:Int;
var shit:Int;
var bad:Int;
var good:Int;
var sick:Int;
var maxCombo:Int;
var isNewHighscore:Bool;
/**
* How many notes total that you hit. (NOT how many notes total in the song!)
*/
var totalNotesHit:Int;
/**
* How many notes in the current chart
*/
var totalNotes:Int;
}