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)))
(method :Void stopSound [:FlxSound sound]
(when (flxMovie.loopingOnCompletes.exists sound)
((dictGet flxMovie.loopingOnCompletes sound))
(flxMovie.loopingOnCompletes.remove sound))
(currentSounds.remove sound)
(sound.stop))

View File

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

View File

@@ -18,14 +18,22 @@
(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
(FlxTween.linearMotion sprite sprite.x sprite.y destX destY speed false (tweenOpts cc))))
(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)]
(linearMotion sprite position.x position.y speed cc)))
(linearMotion sprite position.x position.y speed cc soundLoop volumeMod)))
(method newFlxSet [name assetPath]
(let [setSprite (new FlxSprite 0 0)]
@@ -86,8 +94,12 @@
(method loopSound [name :Void->Void cc &opt :Float volumeMod]
(playSound name (makeCC null) volumeMod false)
(let [cs flxDirector.currentSounds]
(set .looped (nth cs (- cs.length 1)) true))
(let [cs flxDirector.currentSounds
sound (nth cs (- cs.length 1))
onComplete sound.onComplete]
(dictSet loopingOnCompletes sound onComplete)
(set sound.onComplete null)
(set sound.looped true))
(cc))
(preload