linearMotion handle looped sound

This commit is contained in:
2023-04-18 15:02:04 -06:00
parent f9f79f03f7
commit 39034ad3f4
3 changed files with 21 additions and 6 deletions

View File

@@ -364,6 +364,9 @@
(unless waitForEnd (cc))) (unless waitForEnd (cc)))
(method :Void stopSound [:FlxSound sound] (method :Void stopSound [:FlxSound sound]
(when (flxMovie.loopingOnCompletes.exists sound)
((dictGet flxMovie.loopingOnCompletes sound))
(flxMovie.loopingOnCompletes.remove sound))
(currentSounds.remove sound) (currentSounds.remove sound)
(sound.stop)) (sound.stop))

View File

@@ -31,7 +31,7 @@ class FlxMovie extends Movie<FlxSprite, ActorFlxSprite, FlxSound, String, FlxSpr
public var screenCamera:FlxCamera; public var screenCamera:FlxCamera;
public var tweens:Array<FlxTween> = []; public var tweens:Array<FlxTween> = [];
public var loopingOnCompletes:Map<FlxSound,Void->Void> = [];
public var STAGE_LEFT_X:Float; public var STAGE_LEFT_X:Float;
public var STAGE_RIGHT_X:Float; public var STAGE_RIGHT_X:Float;
public var ACTOR_WIDTH:Int; public var ACTOR_WIDTH:Int;

View File

@@ -18,14 +18,22 @@
(when cc (cc)) (when cc (cc))
})) }))
(method linearMotion [:FlxSprite sprite :Float destX :Float destY :Float speed &opt :Void->Void cc] (method linearMotion [:FlxSprite sprite :Float destX :Float destY :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod]
(when soundLoop
(let [oldCC cc]
(set cc
(makeCC
(stopSound soundLoop (makeCC null))
(when oldCC
(oldCC)))))
(loopSound soundLoop (makeCC null) volumeMod))
(tween (tween
(FlxTween.linearMotion sprite sprite.x sprite.y destX destY speed false (tweenOpts cc)))) (FlxTween.linearMotion sprite sprite.x sprite.y destX destY speed false (tweenOpts cc))))
(defAlias &ident FlxTween.linearMotion CHANGE_TO_MOVIE_LINEARMOTION) (defAlias &ident FlxTween.linearMotion CHANGE_TO_MOVIE_LINEARMOTION)
(method linearMotionTo [:FlxSprite sprite :String positionKey :Float speed &opt :Void->Void cc] (method linearMotionTo [:FlxSprite sprite :String positionKey :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod]
(let [position (resolvePosition positionKey)] (let [position (resolvePosition positionKey)]
(linearMotion sprite position.x position.y speed cc))) (linearMotion sprite position.x position.y speed cc soundLoop volumeMod)))
(method newFlxSet [name assetPath] (method newFlxSet [name assetPath]
(let [setSprite (new FlxSprite 0 0)] (let [setSprite (new FlxSprite 0 0)]
@@ -86,8 +94,12 @@
(method loopSound [name :Void->Void cc &opt :Float volumeMod] (method loopSound [name :Void->Void cc &opt :Float volumeMod]
(playSound name (makeCC null) volumeMod false) (playSound name (makeCC null) volumeMod false)
(let [cs flxDirector.currentSounds] (let [cs flxDirector.currentSounds
(set .looped (nth cs (- cs.length 1)) true)) sound (nth cs (- cs.length 1))
onComplete sound.onComplete]
(dictSet loopingOnCompletes sound onComplete)
(set sound.onComplete null)
(set sound.looped true))
(cc)) (cc))
(preload (preload