From 0ed760c8a490066b092fe09f53368712bd5962da Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 26 Aug 2023 13:34:14 -0600 Subject: [PATCH] Make MovieFlxState generic with fff functionality --- src/hollywoo_flixel/FlxDirector.kiss | 2 +- src/hollywoo_flixel/MovieFlxState.hx | 4 ++- src/hollywoo_flixel/MovieFlxState.kiss | 34 +++++++++++++++++++++++--- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/hollywoo_flixel/FlxDirector.kiss b/src/hollywoo_flixel/FlxDirector.kiss index c13ac24..e45e5d8 100644 --- a/src/hollywoo_flixel/FlxDirector.kiss +++ b/src/hollywoo_flixel/FlxDirector.kiss @@ -495,7 +495,7 @@ { (set FlxG.mouse.visible true) (set isLoading false) - (unless MovieFlxState.focused + (unless (Reflect.field FlxG.state "focused") (pause)) (set FlxG.autoPause true) (FlxG.state.remove bar true) diff --git a/src/hollywoo_flixel/MovieFlxState.hx b/src/hollywoo_flixel/MovieFlxState.hx index b1c62e7..ee52bd2 100644 --- a/src/hollywoo_flixel/MovieFlxState.hx +++ b/src/hollywoo_flixel/MovieFlxState.hx @@ -3,6 +3,8 @@ package hollywoo_flixel; import flixel.FlxG; import flixel.FlxState; import kiss.Prelude; +import haxe.Constraints; @:build(kiss.Kiss.build()) -class MovieFlxState extends FlxState {} +@:generic +class MovieFlxStateVoid>> extends FlxState {} diff --git a/src/hollywoo_flixel/MovieFlxState.kiss b/src/hollywoo_flixel/MovieFlxState.kiss index 29fcb04..bf63061 100644 --- a/src/hollywoo_flixel/MovieFlxState.kiss +++ b/src/hollywoo_flixel/MovieFlxState.kiss @@ -1,11 +1,29 @@ (prop &mut :FlxDirector director) +(method :Dynamic callPrivate [:Dynamic obj :String method &rest :Array args] + (Reflect.callMethod obj (Reflect.field obj method) args)) + +(prop &mut :MovieClass movie) +(method :MovieClass currentMovie [] + #{ + var c = movie; + while (c.skipMovie != null) + c = cast c.skipMovie; + return c; + }#) + (method &override :Void create [] (set destroySubStates false) (super.create) - (set director (new FlxDirector))) + (set director (new FlxDirector)) + (set movie (new MovieClass director)) + (director.promptForResume movie)) -(var &mut focused true) +(method &override :Void destroy [] + (callPrivate (currentMovie) "doCleanup") + (super.destroy)) + +(prop &mut focused true) (method &override :Void onFocusLost [] (when FlxG.autoPause @@ -16,4 +34,14 @@ (when (and FlxG.autoPause !director.movie.paused) (director.resume)) (kiss_flixel.DebugTools.f1ToRecord director.actionManager) - (set focused true)) \ No newline at end of file + (set focused true)) + +(method &override :Void update [:Float elapsed] + #{ + super.update(elapsed); + var c = currentMovie(); + if (c.running) + { + c.update(elapsed); + } + }#)