Use AsyncEmbeddedScript2 for full skip control

This commit is contained in:
Trent Nelson
2023-08-01 17:21:52 -06:00
parent a1f40ccfc1
commit 31f390573c
7 changed files with 87 additions and 34 deletions

View File

@@ -1,6 +1,6 @@
# @install: lix --silent download "gh://github.com/kiss-lang/hollywoo#6d5e1392a62ad174f4dd437f976dff907fee0bec" into hollywoo/0.0.0/github/6d5e1392a62ad174f4dd437f976dff907fee0bec # @install: lix --silent download "gh://github.com/kiss-lang/hollywoo#007cab4595935d196449ab0a49fbcd039674284f" into hollywoo/0.0.0/github/007cab4595935d196449ab0a49fbcd039674284f
# @run: haxelib run-dir hollywoo "${HAXE_LIBCACHE}/hollywoo/0.0.0/github/6d5e1392a62ad174f4dd437f976dff907fee0bec" # @run: haxelib run-dir hollywoo "${HAXE_LIBCACHE}/hollywoo/0.0.0/github/007cab4595935d196449ab0a49fbcd039674284f"
-lib kiss -lib kiss
-lib kiss-tools -lib kiss-tools
-cp ${HAXE_LIBCACHE}/hollywoo/0.0.0/github/6d5e1392a62ad174f4dd437f976dff907fee0bec/src/ -cp ${HAXE_LIBCACHE}/hollywoo/0.0.0/github/007cab4595935d196449ab0a49fbcd039674284f/src/
-D hollywoo=0.0.0 -D hollywoo=0.0.0

View File

@@ -1,4 +1,4 @@
# @install: lix --silent download "gh://github.com/kiss-lang/kiss-flixel#61e71a1f2b7128f837af3f6d6f4af3dc7c03d008" into kiss-flixel/0.0.0/github/61e71a1f2b7128f837af3f6d6f4af3dc7c03d008 # @install: lix --silent download "gh://github.com/kiss-lang/kiss-flixel#511113e93ddd2da3f3b320cfe0eb51f751a1566d" into kiss-flixel/0.0.0/github/511113e93ddd2da3f3b320cfe0eb51f751a1566d
-lib flixel -lib flixel
-lib flixel-addons -lib flixel-addons
-lib flixel-ui -lib flixel-ui
@@ -6,5 +6,5 @@
-lib kiss-tools -lib kiss-tools
-lib lime -lib lime
-lib openfl -lib openfl
-cp ${HAXE_LIBCACHE}/kiss-flixel/0.0.0/github/61e71a1f2b7128f837af3f6d6f4af3dc7c03d008/src/ -cp ${HAXE_LIBCACHE}/kiss-flixel/0.0.0/github/511113e93ddd2da3f3b320cfe0eb51f751a1566d/src/
-D kiss-flixel=0.0.0 -D kiss-flixel=0.0.0

View File

@@ -1,4 +1,4 @@
# @install: lix --silent download "gh://github.com/kiss-lang/kiss-tools#7418d158fefe2e145006468f35c9fa0fed8c224c" into kiss-tools/0.0.0/github/7418d158fefe2e145006468f35c9fa0fed8c224c # @install: lix --silent download "gh://github.com/kiss-lang/kiss-tools#4dddcb1b43e7f27f5caae0ce09d67fd93be76a3e" into kiss-tools/0.0.0/github/4dddcb1b43e7f27f5caae0ce09d67fd93be76a3e
-lib kiss -lib kiss
-cp ${HAXE_LIBCACHE}/kiss-tools/0.0.0/github/7418d158fefe2e145006468f35c9fa0fed8c224c/src/ -cp ${HAXE_LIBCACHE}/kiss-tools/0.0.0/github/4dddcb1b43e7f27f5caae0ce09d67fd93be76a3e/src/
-D kiss-tools=0.0.0 -D kiss-tools=0.0.0

View File

@@ -1,12 +1,12 @@
# @install: lix --silent download "gh://github.com/kiss-lang/kiss#8bf61eb403081c929e6faf7a4564551fbe1f2bd2" into kiss/0.0.1/github/8bf61eb403081c929e6faf7a4564551fbe1f2bd2 # @install: lix --silent download "gh://github.com/kiss-lang/kiss#63600c8d16ec7c227b54c2c5a33f3e9672fd4981" into kiss/0.0.1/github/63600c8d16ec7c227b54c2c5a33f3e9672fd4981
# @run: haxelib run-dir kiss "${HAXE_LIBCACHE}/kiss/0.0.1/github/8bf61eb403081c929e6faf7a4564551fbe1f2bd2" # @run: haxelib run-dir kiss "${HAXE_LIBCACHE}/kiss/0.0.1/github/63600c8d16ec7c227b54c2c5a33f3e9672fd4981"
-lib haxe-strings -lib haxe-strings
-lib hscript -lib hscript
-lib tink_json -lib tink_json
-lib tink_macro -lib tink_macro
-lib tink_syntaxhub -lib tink_syntaxhub
-lib uuid -lib uuid
-cp ${HAXE_LIBCACHE}/kiss/0.0.1/github/8bf61eb403081c929e6faf7a4564551fbe1f2bd2/src -cp ${HAXE_LIBCACHE}/kiss/0.0.1/github/63600c8d16ec7c227b54c2c5a33f3e9672fd4981/src
-D kiss=0.0.1 -D kiss=0.0.1
-w -WUnusedPattern -w -WUnusedPattern
--macro kiss.KissFrontend.use() --macro kiss.KissFrontend.use()

View File

@@ -588,7 +588,7 @@
(set track.onComplete ->{ (set track.onComplete ->{
(currentVoiceTracks.remove track) (currentVoiceTracks.remove track)
(restoreOriginalVolume) (restoreOriginalVolume)
(movie?.delay DELAY_BETWEEN_VOICE_TRACKS cc) (movie?.delay false DELAY_BETWEEN_VOICE_TRACKS cc)
})) }))
(currentVoiceTracks.push track) (currentVoiceTracks.push track)
(track.play true (* 1000 start) (* 1000 end))) (track.play true (* 1000 start) (* 1000 end)))

View File

@@ -50,4 +50,10 @@ class FlxMovie extends Movie<FlxSprite, ActorFlxSprite, FlxSound, FlxSound, FlxS
public var DIALOG_WIDTH:Int; public var DIALOG_WIDTH:Int;
public var DIALOG_HEIGHT:Int; public var DIALOG_HEIGHT:Int;
public var presetPositions:Map<String,Bool> = []; public var presetPositions:Map<String,Bool> = [];
// HollywooFlixelDSL overrides this in subclasses
public function update(elapsed:Float):Void {}
// Such a hack:
private var skipMovie:FlxMovie = null;
} }

View File

@@ -43,34 +43,40 @@
@:keep @:keep
(method linearMotion [:FlxSprite sprite :Float destX :Float destY :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod :Array<FlxSprite> connectedSprites] (method linearMotion [:Bool skipping :FlxSprite sprite :Float destX :Float destY :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod :Array<FlxSprite> connectedSprites]
(unless (tweenedPositionsOfSpritesInScenes.exists sceneKey) (unless (tweenedPositionsOfSpritesInScenes.exists sceneKey)
(dictSet tweenedPositionsOfSpritesInScenes sceneKey (new Map))) (dictSet tweenedPositionsOfSpritesInScenes sceneKey (new Map)))
(dictSet (dictGet tweenedPositionsOfSpritesInScenes sceneKey) sprite (new FlxPoint destX destY)) (dictSet (dictGet tweenedPositionsOfSpritesInScenes sceneKey) sprite (new FlxPoint destX destY))
(when skipping
(cc)
(return))
(when soundLoop (when soundLoop
(let [oldCC cc] (let [oldCC cc]
(set cc (set cc
(makeCC (makeCC
(stopSound soundLoop (makeCC null)) (stopSound skipping soundLoop (makeCC null))
(when oldCC (when oldCC
(oldCC))))) (oldCC)))))
(loopSound soundLoop (makeCC null) volumeMod)) (loopSound skipping 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)))
(when connectedSprites (when connectedSprites
(doFor cSprite connectedSprites (doFor cSprite connectedSprites
(let [xOffset (- cSprite.x sprite.x) (let [xOffset (- cSprite.x sprite.x)
yOffset (- cSprite.y sprite.y)] yOffset (- cSprite.y sprite.y)]
(linearMotion cSprite (+ destX xOffset) (+ destY yOffset) speed))))) (linearMotion skipping cSprite (+ destX xOffset) (+ destY yOffset) speed)))))
@:keep @:keep
(method linearMotionTo [:FlxSprite sprite :String positionKey :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod :Array<FlxSprite> connectedSprites] (method linearMotionTo [:Bool skipping :FlxSprite sprite :String positionKey :Float speed &opt :Void->Void cc :String soundLoop :Float volumeMod :Array<FlxSprite> connectedSprites]
(let [position (resolvePosition positionKey)] (let [position (resolvePosition positionKey)]
(linearMotion sprite position.x position.y speed cc soundLoop volumeMod connectedSprites))) (linearMotion skipping sprite position.x position.y speed cc soundLoop volumeMod connectedSprites)))
// Reusable effect: Scan a slightly transparent line side-to-side across a FlxSprite like a scanner // Reusable effect: Scan a slightly transparent line side-to-side across a FlxSprite like a scanner
@:keep @:keep
(method scanLineEffect [:FlxSprite sprite :FlxColor lineColor :Int lineThickness :Float alpha :Bool vertical :Float speed &opt :Bool repeat :Void->Void cc :String soundLoop :Float volumeMod] (method :Void scanLineEffect [:Bool skipping :FlxSprite sprite :FlxColor lineColor :Int lineThickness :Float alpha :Bool vertical :Float speed &opt :Bool repeat :Void->Void cc :String soundLoop :Float volumeMod]
(when skipping
(cc)
(return))
(unless repeat (set repeat true)) (unless repeat (set repeat true))
(let [lineSprite (new FlxSprite) (let [lineSprite (new FlxSprite)
width (if vertical lineThickness (Std.int sprite.width)) width (if vertical lineThickness (Std.int sprite.width))
@@ -94,23 +100,26 @@
(set lineSprite.x lineStartX) (set lineSprite.x lineStartX)
(set lineSprite.y lineStartY) (set lineSprite.y lineStartY)
(FlxG.state.add lineSprite) (FlxG.state.add lineSprite)
(linearMotion lineSprite lineEndX lineEndY speed (linearMotion skipping lineSprite lineEndX lineEndY speed
->:Void { ->:Void {
(if repeat (if repeat
(linearMotion lineSprite lineStartX lineStartY speed finish soundLoop volumeMod) (linearMotion skipping lineSprite lineStartX lineStartY speed finish soundLoop volumeMod)
(finish)) (finish))
} }
soundLoop volumeMod))) soundLoop volumeMod)))
(method rotateTo [:FlxSprite sprite :Float angle :Float duration &opt :Void->Void cc :String soundLoop :Float volumeMod] (method :Void rotateTo [:Bool skipping :FlxSprite sprite :Float angle :Float duration &opt :Void->Void cc :String soundLoop :Float volumeMod]
(when skipping
(cc)
(return))
(when soundLoop (when soundLoop
(let [oldCC cc] (let [oldCC cc]
(set cc (set cc
(makeCC (makeCC
(stopSound soundLoop (makeCC null)) (stopSound skipping soundLoop (makeCC null))
(when oldCC (when oldCC
(oldCC))))) (oldCC)))))
(loopSound soundLoop (makeCC null) volumeMod)) (loopSound skipping soundLoop (makeCC null) volumeMod))
(tween (tween
(FlxTween.angle sprite sprite.angle angle duration (tweenOpts cc)))) (FlxTween.angle sprite sprite.angle angle duration (tweenOpts cc))))
@@ -171,7 +180,11 @@
(defAlias &ident flxDirector (cast director FlxDirector)) (defAlias &ident flxDirector (cast director FlxDirector))
(method :Void update [:Float elapsed] (method &override :Void update [:Float elapsed]
(when skipMovie
(skipMovie.update elapsed)
(return))
(doFor action nextFrameActions (doFor action nextFrameActions
(action)) (action))
(set nextFrameActions []) (set nextFrameActions [])
@@ -202,7 +215,10 @@
(let [[x y] (SpriteTools.positionOn s (canvas) rpos true)] (let [[x y] (SpriteTools.positionOn s (canvas) rpos true)]
(new StagePosition x y layer))) (new StagePosition x y layer)))
(method namePlates [:Array<String> names :Dynamic delayLength :Bool delayWhileShown :Void->Void cc] (method namePlates [:Bool skipping :Array<String> names :Dynamic delayLength :Bool delayWhileShown :Void->Void cc]
(when skipping
(cc)
(return))
(let [plates (let [plates
(for name names (for name names
(let [plate (SpriteTools.textPlate name FlxDirector.DIALOG_SIZE FlxDirector.SUPER_MARGIN) (let [plate (SpriteTools.textPlate name FlxDirector.DIALOG_SIZE FlxDirector.SUPER_MARGIN)
@@ -212,14 +228,14 @@
(set plate.y (+ actor.y actor.height)) (set plate.y (+ actor.y actor.height))
(FlxG.state.add plate) (FlxG.state.add plate)
plate))] plate))]
(delay delayLength (delay skipping delayLength
(makeCC (makeCC
(doFor plate plates (FlxG.state.remove plate true)) (doFor plate plates (FlxG.state.remove plate true))
(when delayWhileShown (cc))))) (when delayWhileShown (cc)))))
(unless delayWhileShown (cc))) (unless delayWhileShown (cc)))
(method loopSound [name :Void->Void cc &opt :Float volumeMod] (method loopSound [:Bool skipping name :Void->Void cc &opt :Float volumeMod]
(playSound name (makeCC null) volumeMod false) (playSound skipping name (makeCC null) volumeMod false)
(let [cs flxDirector.currentSounds (let [cs flxDirector.currentSounds
sound (nth cs (- cs.length 1)) sound (nth cs (- cs.length 1))
onComplete sound.onComplete] onComplete sound.onComplete]
@@ -229,9 +245,9 @@
(cc)) (cc))
(method putPresetPosition [key x y z] (method putPresetPosition [key x y z]
(let [pos (new StagePosition (Std.int x) (Std.int y) (Std.int z))] (let [pos (new StagePosition (Std.int x) (Std.int y) (Std.int z))]
(stagePositions.put key pos) (stagePositions.put key pos)
(dictSet presetPositions (pos.stringify) true))) (dictSet presetPositions (pos.stringify) true)))
(preload (preload
(.enableGamepadInput (.enableGamepadInput
@@ -356,8 +372,11 @@
(prop &mut :FlxCamera inCamera) (prop &mut :FlxCamera inCamera)
(prop &mut :FlxSprite outCameraPos) (prop &mut :FlxSprite outCameraPos)
(prop &mut :FlxCamera outCamera) (prop &mut :FlxCamera outCamera)
(method tweenScene [name :Float speed :Continuation cc &opt :Bool fromLeft :String soundLoop :Float volumeMod] (method :Void tweenScene [:Bool skipping name :Float speed :Continuation cc &opt :Bool fromLeft :String soundLoop :Float volumeMod]
(let [name (kiss.FuzzyMapTools.bestMatch scenes name) (when skipping
(setScene name cc)
(return))
(let [name (kiss.FuzzyMapTools.bestMatch scenes name)
lastSceneKey sceneKey lastSceneKey sceneKey
lastScene (dictGet scenes sceneKey) lastScene (dictGet scenes sceneKey)
scene (dictGet scenes name) scene (dictGet scenes name)
@@ -394,4 +413,32 @@
(hollywoo.Movie.appearanceFlag shownScenes name) (hollywoo.Movie.appearanceFlag shownScenes name)
camera camera
(makeCC (makeCC
(linearMotion inCameraPos 0 0 speed finish soundLoop volumeMod [outCameraPos]))))) (linearMotion skipping inCameraPos 0 0 speed finish soundLoop volumeMod [outCameraPos])))))
(defMacro addSkips [flxMovieClass]
`(#when debug
(method prepareForSkip []
(kiss_tools.TimerWithPause.stopAll)
(flxDirector.pause)
(.clear (director.shortcutHandler))
(doCleanup)
(set skipMovie (new Ep102 flxDirector)))
(preload
(.registerItem (director.shortcutHandler) "[n]ext label"
->cc {
(prepareForSkip)
(runFromNextLabel skipMovie)
})
(.registerItem (director.shortcutHandler) "skip to [l]abel"
->cc
(let [runners (labelRunners)]
(director.chooseString
"Skip to scene?"
(sort (collect (runners.keys)))
->label {
(prepareForSkip)
((dictGet runners label) skipMovie)
}))))))