From bda01372285f43fe0ca0acdb87f26ed6a241062a Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 5 Apr 2023 11:06:48 -0600 Subject: [PATCH] pause sounds and voice tracks --- .../src/hollywoo_flixel/FlxDirector.kiss | 36 +++++++++++++------ projects/hollywoo/src/hollywoo/Director.hx | 7 ++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/projects/hollywoo-flixel/src/hollywoo_flixel/FlxDirector.kiss b/projects/hollywoo-flixel/src/hollywoo_flixel/FlxDirector.kiss index c2f12da6..767bb0aa 100644 --- a/projects/hollywoo-flixel/src/hollywoo_flixel/FlxDirector.kiss +++ b/projects/hollywoo-flixel/src/hollywoo_flixel/FlxDirector.kiss @@ -31,13 +31,19 @@ (method :Void pause [] (FlxG.inputs.remove actionManager) - // TODO !! - null) + (doFor sound currentSounds + (sound.pause)) + // TODO music + // TODO tweens + ) (method :Void resume [] - // TODO !! (FlxG.inputs.add actionManager) - null) + (doFor sound currentSounds + (sound.resume)) + // TODO music + // TODO tweens + ) (method :Void showPauseMenu [:Continuation resume] // TODO register escape to resume (and register escape to pause lol) @@ -316,18 +322,22 @@ (speakerNameText.kill) (dialogBox.kill)) +(prop :Array currentSounds []) (method :Void playSound [:FlxSound sound :Float volumeMod :Bool waitForEnd :Continuation cc] (let [originalVolume sound.volume - restoreOriginalVolume ->(set sound.volume originalVolume)] + onComplete ->{ + (currentSounds.remove sound) + (set sound.volume originalVolume) + (when waitForEnd (cc)) + }] (*= sound.volume volumeMod) - (set sound.onComplete - (if waitForEnd - ->{(restoreOriginalVolume) (cc)} - restoreOriginalVolume))) + (set sound.onComplete onComplete)) + (currentSounds.push sound) (sound.play) (unless waitForEnd (cc))) (method :Void stopSound [:FlxSound sound] + (currentSounds.remove sound) (sound.stop)) (var DELAY_BETWEEN_VOICE_TRACKS 0.1) @@ -337,10 +347,16 @@ restoreOriginalVolume ->(set track.volume originalVolume)] (dictSet restoreOriginalVolumes track restoreOriginalVolume) (*= track.volume volumeMod) - (set track.onComplete ->{(restoreOriginalVolume) (movie.delay DELAY_BETWEEN_VOICE_TRACKS cc)})) + (set track.onComplete ->{ + currentSounds.remove track + (restoreOriginalVolume) + (movie.delay DELAY_BETWEEN_VOICE_TRACKS cc) + })) + (currentSounds.push track) (track.play true (* 1000 start) (* 1000 end))) (method :Void stopVoiceTrack [:FlxSound track] + (currentSounds.remove track) (track.stop) ((dictGet restoreOriginalVolumes track))) diff --git a/projects/hollywoo/src/hollywoo/Director.hx b/projects/hollywoo/src/hollywoo/Director.hx index fe9134c9..658557c4 100644 --- a/projects/hollywoo/src/hollywoo/Director.hx +++ b/projects/hollywoo/src/hollywoo/Director.hx @@ -31,8 +31,15 @@ interface Director, Actor, Sound, Song, Prop, VoiceTrack, Cam function shortcutHandler():KeyShortcutHandlerVoid>; + // Implementations of Director must pause and resume the following: + // - current voice tracks + // - current sound effects + // - current music + // - input checking + // - tweens function pause():Void; function resume():Void; + function showPauseMenu(resume:Continuation):Void; function chooseString(prompt:String, choices:Array, submit:String->Void):Void;