pause sounds and voice tracks

This commit is contained in:
2023-04-05 11:06:48 -06:00
parent 7ffa3c1e63
commit bda0137228
2 changed files with 33 additions and 10 deletions

View File

@@ -31,13 +31,19 @@
(method :Void pause [] (method :Void pause []
(FlxG.inputs.remove actionManager) (FlxG.inputs.remove actionManager)
// TODO !! (doFor sound currentSounds
null) (sound.pause))
// TODO music
// TODO tweens
)
(method :Void resume [] (method :Void resume []
// TODO !!
(FlxG.inputs.add actionManager) (FlxG.inputs.add actionManager)
null) (doFor sound currentSounds
(sound.resume))
// TODO music
// TODO tweens
)
(method :Void showPauseMenu [:Continuation resume] (method :Void showPauseMenu [:Continuation resume]
// TODO register escape to resume (and register escape to pause lol) // TODO register escape to resume (and register escape to pause lol)
@@ -316,18 +322,22 @@
(speakerNameText.kill) (speakerNameText.kill)
(dialogBox.kill)) (dialogBox.kill))
(prop :Array<FlxSound> currentSounds [])
(method :Void playSound [:FlxSound sound :Float volumeMod :Bool waitForEnd :Continuation cc] (method :Void playSound [:FlxSound sound :Float volumeMod :Bool waitForEnd :Continuation cc]
(let [originalVolume sound.volume (let [originalVolume sound.volume
restoreOriginalVolume ->(set sound.volume originalVolume)] onComplete ->{
(currentSounds.remove sound)
(set sound.volume originalVolume)
(when waitForEnd (cc))
}]
(*= sound.volume volumeMod) (*= sound.volume volumeMod)
(set sound.onComplete (set sound.onComplete onComplete))
(if waitForEnd (currentSounds.push sound)
->{(restoreOriginalVolume) (cc)}
restoreOriginalVolume)))
(sound.play) (sound.play)
(unless waitForEnd (cc))) (unless waitForEnd (cc)))
(method :Void stopSound [:FlxSound sound] (method :Void stopSound [:FlxSound sound]
(currentSounds.remove sound)
(sound.stop)) (sound.stop))
(var DELAY_BETWEEN_VOICE_TRACKS 0.1) (var DELAY_BETWEEN_VOICE_TRACKS 0.1)
@@ -337,10 +347,16 @@
restoreOriginalVolume ->(set track.volume originalVolume)] restoreOriginalVolume ->(set track.volume originalVolume)]
(dictSet restoreOriginalVolumes track restoreOriginalVolume) (dictSet restoreOriginalVolumes track restoreOriginalVolume)
(*= track.volume volumeMod) (*= 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))) (track.play true (* 1000 start) (* 1000 end)))
(method :Void stopVoiceTrack [:FlxSound track] (method :Void stopVoiceTrack [:FlxSound track]
(currentSounds.remove track)
(track.stop) (track.stop)
((dictGet restoreOriginalVolumes track))) ((dictGet restoreOriginalVolumes track)))

View File

@@ -31,8 +31,15 @@ interface Director<Set:Cloneable<Set>, Actor, Sound, Song, Prop, VoiceTrack, Cam
function shortcutHandler():KeyShortcutHandler<Continuation->Void>; function shortcutHandler():KeyShortcutHandler<Continuation->Void>;
// Implementations of Director must pause and resume the following:
// - current voice tracks
// - current sound effects
// - current music
// - input checking
// - tweens
function pause():Void; function pause():Void;
function resume():Void; function resume():Void;
function showPauseMenu(resume:Continuation):Void; function showPauseMenu(resume:Continuation):Void;
function chooseString(prompt:String, choices:Array<String>, submit:String->Void):Void; function chooseString(prompt:String, choices:Array<String>, submit:String->Void):Void;