diff --git a/Project.xml b/Project.xml index 91d8510e..f8495d3a 100644 --- a/Project.xml +++ b/Project.xml @@ -74,7 +74,6 @@ - diff --git a/assets/data/cutscenes/cocoa.hx b/assets/data/cutscenes/cocoa.hx new file mode 100644 index 00000000..34cad301 --- /dev/null +++ b/assets/data/cutscenes/cocoa.hx @@ -0,0 +1,5 @@ +function create() { + startVideo(Paths.video("garfield"), function() { + close(); + }); +} \ No newline at end of file diff --git a/buildnumber.txt b/buildnumber.txt index 1fdcf1cc..274c0052 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -1228 \ No newline at end of file +1234 \ No newline at end of file diff --git a/source/funkin/cutscenes/VideoCutscene.hx b/source/funkin/cutscenes/VideoCutscene.hx index bf5b5a26..2c3b71bd 100644 --- a/source/funkin/cutscenes/VideoCutscene.hx +++ b/source/funkin/cutscenes/VideoCutscene.hx @@ -42,10 +42,6 @@ class VideoCutscene extends Cutscene { public override function update(elapsed:Float) { super.update(elapsed); - // video.se - // video.setUnstretchedGraphicSize(FlxG.width, FlxG.height, false); - // trace(video); - // trace(video.getScreenBounds(null, cutsceneCamera)); } public override function destroy() { FlxG.cameras.remove(camera, true); diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index 1b8bfd51..26ea61fa 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -60,6 +60,7 @@ import funkin.scripting.events.*; using StringTools; +@:access(flixel.text.FlxText.FlxTextFormatRange) class PlayState extends MusicBeatState { public static var instance:PlayState = null; @@ -157,6 +158,16 @@ class PlayState extends MusicBeatState public var inCutscene:Bool = false; + public var comboRatings:Array = [ + new ComboRating(0, "[F]", 0xFFFF4444), + new ComboRating(0.1, "[E]", 0xFFFF8844), + new ComboRating(0.2, "[D]", 0xFFFFAA44), + new ComboRating(0.4, "[C]", 0xFFFFFF44), + new ComboRating(0.6, "[B]", 0xFFAAFF44), + new ComboRating(0.8, "[A]", 0xFF88FF44), + new ComboRating(0.9, "[S]", 0xFF44FFFF), + ]; + #if desktop // Discord RPC variables public var difficultyText:String = ""; @@ -166,6 +177,22 @@ class PlayState extends MusicBeatState public var detailsPausedText:String = ""; #end + public var curRating:ComboRating; + + public function updateRating() { + var rating = null; + var acc = get_accuracy(); + + for(e in comboRatings) { + if (e.percent <= acc && (rating == null || rating.percent < e.percent)) + rating = e; + } + + var event = scripts.event("onRatingUpdate", new RatingUpdateEvent(rating, curRating)); + if (!event.cancelled) + curRating = event.rating; + } + override public function create() { instance = this; @@ -331,6 +358,7 @@ class PlayState extends MusicBeatState scoreTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), "Score:0", 16); missesTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), "Misses:0", 16); accuracyTxt = new FunkinText(healthBarBG.x + 50, healthBarBG.y + 30, Std.int(healthBarBG.width - 100), "Accuracy:-%", 16); + accuracyTxt.addFormat(accFormat, 0, 1); for(text in [scoreTxt, missesTxt, accuracyTxt]) { text.scrollFactor.set(); @@ -817,6 +845,7 @@ class PlayState extends MusicBeatState } var __vocalOffsetViolation:Float = 0; + public var accFormat:FlxTextFormat = new FlxTextFormat(0xFF888888, false, false, 0); override public function update(elapsed:Float) { #if !debug @@ -829,7 +858,18 @@ class PlayState extends MusicBeatState scoreTxt.text = 'Score:$songScore'; missesTxt.text = '${comboBreaks ? "Combo Breaks" : "Misses"}:$misses'; var acc = accuracy; - accuracyTxt.text = 'Accuracy:${acc < 0 ? "N/A" : '${FlxMath.roundDecimal(acc * 100, 2)}%'}'; + + var rating:ComboRating = curRating == null ? new ComboRating(0, "[N/A]", 0xFF888888) : curRating; + + @:privateAccess accFormat.format.color = rating.color; + accuracyTxt.text = 'Accuracy:${acc < 0 ? "N/A" : '${FlxMath.roundDecimal(acc * 100, 2)}%'} ${rating.rating}'; + + @:privateAccess + var format = accuracyTxt._formatRanges[0]; + format.range.start = accuracyTxt.text.length - rating.rating.length; + format.range.end = accuracyTxt.text.length; + // accuracyTxt.addFormat(accFormat, accuracyTxt.text.length - rating.rating.length, accuracyTxt.text.length); + if (FlxG.keys.justPressed.ENTER && startedCountdown && canPause) pauseGame(); @@ -1303,6 +1343,8 @@ class PlayState extends MusicBeatState if (event.accuracy != null) { accuracyPressedNotes++; totalAccuracyAmount += accuracy; + + updateRating(); } if (event.countAsCombo) combo++; @@ -1449,4 +1491,16 @@ class PlayState extends MusicBeatState } public var curLight:Int = 0; +} + +class ComboRating { + public var percent:Float; + public var rating:String; + public var color:FlxColor; + + public function new(percent:Float, rating:String, color:FlxColor) { + this.percent = percent; + this.rating = rating; + this.color = color; + } } \ No newline at end of file diff --git a/source/funkin/scripting/events/RatingUpdateEvent.hx b/source/funkin/scripting/events/RatingUpdateEvent.hx new file mode 100644 index 00000000..1bd036ff --- /dev/null +++ b/source/funkin/scripting/events/RatingUpdateEvent.hx @@ -0,0 +1,18 @@ +package funkin.scripting.events; + +class RatingUpdateEvent extends CancellableEvent { + /** + New combo + **/ + public var rating:ComboRating; + /** + Old combo (may be null) + **/ + public var oldRating:ComboRating; + + public function new(rating:ComboRating, oldRating:ComboRating) { + super(); + this.rating = rating; + this.oldRating = oldRating; + } +} \ No newline at end of file