diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx index afd7389d4..f464c25a8 100644 --- a/source/funkin/play/PlayState.hx +++ b/source/funkin/play/PlayState.hx @@ -1445,12 +1445,25 @@ class PlayState extends MusicBeatState implements IHook trace('WENT TO RESULTS SCREEN!'); // unloadAssets(); - persistentUpdate = false; - vocals.stop(); + camZooming = false; + FlxG.camera.follow(PlayState.instance.currentStage.getGirlfriend(), null, 0.05); + FlxG.camera.targetOffset.y -= 370; - var res:ResultState = new ResultState(); - res.camera = camHUD; - openSubState(res); + new FlxTimer().start(0.8, _ -> + { + FlxTween.tween(FlxG.camera, {zoom: 1200}, 1.1, { + ease: FlxEase.expoIn, + onComplete: _ -> + { + persistentUpdate = false; + vocals.stop(); + + var res:ResultState = new ResultState(); + res.camera = camHUD; + openSubState(res); + } + }); + }); // FlxG.switchState(new FreeplayState()); } } diff --git a/source/funkin/play/ResultState.hx b/source/funkin/play/ResultState.hx index be8694fe6..9c44b8efe 100644 --- a/source/funkin/play/ResultState.hx +++ b/source/funkin/play/ResultState.hx @@ -9,6 +9,7 @@ import flixel.tweens.FlxTween; import flixel.util.FlxColor; import flixel.util.FlxGradient; import flixel.util.FlxTimer; +import funkin.ui.TallyCounter; class ResultState extends MusicBeatSubstate { @@ -42,6 +43,7 @@ class ResultState extends MusicBeatSubstate soundSystem.animation.play("idle"); soundSystem.visible = true; }); + soundSystem.antialiasing = true; add(soundSystem); var difficulty:FlxSprite = new FlxSprite(680); @@ -61,17 +63,20 @@ class ResultState extends MusicBeatSubstate difficulty.loadGraphic(Paths.image("resultScreen/" + diffSpr)); difficulty.y = -difficulty.height; FlxTween.tween(difficulty, {y: 110}, 0.5, {ease: FlxEase.quartOut, startDelay: 0.8}); + difficulty.antialiasing = true; add(difficulty); var blackTopBar:FlxSprite = new FlxSprite().loadGraphic(Paths.image("resultScreen/topBarBlack")); blackTopBar.y = -blackTopBar.height; FlxTween.tween(blackTopBar, {y: 0}, 0.4, {ease: FlxEase.quartOut, startDelay: 0.5}); + blackTopBar.antialiasing = true; add(blackTopBar); - var resultsAnim:FlxSprite = new FlxSprite(-2000, -10); + var resultsAnim:FlxSprite = new FlxSprite(-200, -10); resultsAnim.frames = Paths.getSparrowAtlas("resultScreen/results"); resultsAnim.animation.addByPrefix("result", "results", 24, false); resultsAnim.animation.play("result"); + resultsAnim.antialiasing = true; add(resultsAnim); var ratingsPopin:FlxSprite = new FlxSprite(-150, 120); @@ -79,8 +84,32 @@ class ResultState extends MusicBeatSubstate ratingsPopin.animation.addByPrefix("idle", "Categories", 24, false); // ratingsPopin.animation.play("idle"); ratingsPopin.visible = false; + ratingsPopin.antialiasing = true; add(ratingsPopin); + var hStuf:Int = 50; + + var totalHit:TallyCounter = new TallyCounter(375, hStuf * 3, Highscore.tallies.totalNotes); + add(totalHit); + + var maxCombo:TallyCounter = new TallyCounter(375, hStuf * 4, Highscore.tallies.maxCombo); + add(maxCombo); + + var tallySick:TallyCounter = new TallyCounter(230, hStuf * 5, Highscore.tallies.sick, 0xFF89E59E); + add(tallySick); + + var tallyGood:TallyCounter = new TallyCounter(230, hStuf * 6, Highscore.tallies.good, 0xFF89C9E5); + add(tallyGood); + + var tallyBad:TallyCounter = new TallyCounter(230, hStuf * 7, Highscore.tallies.bad, 0xffE6CF8A); + add(tallyBad); + + var tallyShit:TallyCounter = new TallyCounter(230, hStuf * 8, Highscore.tallies.shit, 0xFFE68C8A); + add(tallyShit); + + var tallyMissed:TallyCounter = new TallyCounter(230, hStuf * 9, Highscore.tallies.missed, 0xFFC68AE6); + add(tallyMissed); + new FlxTimer().start(0.5, _ -> { ratingsPopin.animation.play("idle"); diff --git a/source/funkin/ui/TallyCounter.hx b/source/funkin/ui/TallyCounter.hx new file mode 100644 index 000000000..b9e896f01 --- /dev/null +++ b/source/funkin/ui/TallyCounter.hx @@ -0,0 +1,89 @@ +package funkin.ui; + +import flixel.FlxSprite; +import flixel.group.FlxGroup.FlxTypedGroup; +import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; +import flixel.math.FlxMath; +import flixel.tweens.FlxEase; +import flixel.tweens.FlxTween; + +/** + * Similar to ComboCounter, but it's not! + */ +class TallyCounter extends FlxTypedSpriteGroup +{ + var curNumber:Float = 0; + + public var neededNumber:Int = 0; + public var flavour:Int = 0xFFFFFFFF; + + public function new(x:Float, y:Float, neededNumber:Int = 0, ?flavour:Int = 0xFFFFFFFF) + { + super(x, y); + + this.flavour = flavour; + + this.neededNumber = neededNumber; + FlxTween.tween(this, {curNumber: neededNumber}, 4, {ease: FlxEase.quartOut}); + drawNumbers(); + } + + var tmr:Float = 0; + + override function update(elapsed:Float) + { + super.update(elapsed); + + if (curNumber < neededNumber) + drawNumbers(); + } + + function drawNumbers() + { + var seperatedScore:Array = []; + var tempCombo:Int = Math.round(curNumber); + + while (tempCombo != 0) + { + seperatedScore.push(tempCombo % 10); + tempCombo = Math.floor(tempCombo / 10); + } + + if (seperatedScore.length == 0) + seperatedScore.push(0); + + seperatedScore.reverse(); + + for (ind => num in seperatedScore) + { + if (ind >= members.length) + { + var numb:TallyNumber = new TallyNumber(ind * 43, 0, num); + add(numb); + numb.color = flavour; + } + else + { + members[ind].animation.play(Std.string(num)); + members[ind].color = flavour; + } + } + } +} + +class TallyNumber extends FlxSprite +{ + public function new(x:Float, y:Float, digit:Int) + { + super(x, y); + + frames = Paths.getSparrowAtlas("resultScreen/tallieNumber"); + + for (i in 0...10) + animation.addByPrefix(Std.string(i), i + " small", 24, false); + + animation.play(Std.string(digit)); + antialiasing = true; + updateHitbox(); + } +}