From 9bd04a19b225778c9ed621a5d7c32c618f04d0ed Mon Sep 17 00:00:00 2001 From: Kolo <67389779+JustKolosaki@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:40:43 +0100 Subject: [PATCH] play music when switching animations --- .../char/pages/CharCreatorResultsPage.hx | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/source/funkin/ui/debug/char/pages/CharCreatorResultsPage.hx b/source/funkin/ui/debug/char/pages/CharCreatorResultsPage.hx index def0ff9c22..78449cecf3 100644 --- a/source/funkin/ui/debug/char/pages/CharCreatorResultsPage.hx +++ b/source/funkin/ui/debug/char/pages/CharCreatorResultsPage.hx @@ -1,5 +1,8 @@ package funkin.ui.debug.char.pages; +import openfl.media.Sound; +import haxe.ui.components.Label; +import haxe.ui.components.CheckBox; import haxe.ui.containers.Box; import haxe.ui.containers.menus.Menu; import haxe.ui.containers.menus.MenuItem; @@ -17,20 +20,27 @@ import flixel.graphics.frames.FlxBitmapFont; import flixel.group.FlxSpriteGroup.FlxTypedSpriteGroup; import flixel.math.FlxPoint; import flixel.text.FlxBitmapText; +import flixel.sound.FlxSound; import flixel.util.FlxGradient; import flixel.util.FlxTimer; import flixel.util.FlxSort; import flixel.FlxSprite; import flixel.FlxG; +import lime.media.AudioBuffer; using StringTools; class CharCreatorResultsPage extends CharCreatorDefaultPage { + static final ALL_RANKS:Array = [PERFECT_GOLD, PERFECT, EXCELLENT, GREAT, GOOD, SHIT]; + var data:WizardGenerateParams; var dialogMap:Map; + var rankMusicMap:Map = []; + var rankMusic:FlxSound = new FlxSound(); + override public function new(state:CharCreatorState, data:WizardGenerateParams) { super(state); @@ -39,6 +49,19 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage dialogMap = new Map(); dialogMap.set(RankAnims, new ResultsAnimDialog(this)); + if (data.importedPlayerData != null) + { + var player = PlayerRegistry.instance.fetchEntry(data.importedPlayerData); + + for (rank in ALL_RANKS) + { + var musicPath = player?.getResultsMusicPath(rank) ?? ""; + rankMusicMap.set(rank, openfl.utils.Assets.getSound(Paths.music('$musicPath/$musicPath'))); + } + } + + generateUI(); + initFunkinUI(); refresh(); @@ -46,6 +69,9 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage playAnimation(); } + var labelRank:Label = new Label(); + var checkPlayMusic:CheckBox = new CheckBox(); + override public function fillUpPageSettings(menu:Menu):Void { var animDialog = new MenuCheckBox(); @@ -56,6 +82,53 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage menu.addComponent(animDialog); } + override public function fillUpBottomBar(left:Box, middle:Box, right:Box) + { + var splitRule = new haxe.ui.components.VerticalRule(); + splitRule.percentHeight = 80; + + middle.addComponent(labelRank); + middle.addComponent(splitRule); + middle.addComponent(checkPlayMusic); + } + + function generateUI() + { + var rankAnimDialog = cast(dialogMap[RankAnims], ResultsAnimDialog); + + labelRank.text = Std.string(rankAnimDialog.currentRank); + labelRank.styleNames = "infoText"; + labelRank.verticalAlign = "center"; + + checkPlayMusic.text = "Play Music"; + + labelRank.onClick = function(_) { + var drop = cast(dialogMap[RankAnims], ResultsAnimDialog).rankDropdown; + if (drop.selectedIndex == -1) return; + + var id = drop.selectedIndex + 1; + if (id >= drop.dataSource.size) id = 0; + drop.selectedIndex = id; + playAnimation(); + } + + labelRank.onRightClick = function(_) { + var drop = cast(dialogMap[RankAnims], ResultsAnimDialog).rankDropdown; + if (drop.selectedIndex == -1) return; + + var id = drop.selectedIndex - 1; + if (id < 0) id = drop.dataSource.size; + drop.selectedIndex = id; + playAnimation(); + } + } + + override public function performCleanup() + { + rankMusic.stop(); + FlxG.sound.music.volume = 1; + } + var animTimers:Array = []; override public function update(elapsed:Float):Void @@ -76,6 +149,19 @@ class CharCreatorResultsPage extends CharCreatorDefaultPage var animDialog:ResultsAnimDialog = cast dialogMap[RankAnims]; + labelRank.text = Std.string(animDialog.currentRank); + if (checkPlayMusic.selected) + { + FlxG.sound.music.volume = 0; + rankMusic.loadEmbedded(rankMusicMap[animDialog.currentRank], true); + rankMusic.play(); + } + else + { + rankMusic.stop(); + FlxG.sound.music.volume = 1; + } + for (atlas in animDialog.characterAtlasAnimations) { atlas.sprite.visible = false;