From 3a24189de472a8ee3927280a0e79eb9689e43c41 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Fri, 26 May 2023 16:44:41 -0600 Subject: [PATCH] Allow nice sky sprites :) --- src/hollywoo_flixel/FlxDirector.hx | 1 + src/hollywoo_flixel/FlxDirector.kiss | 38 +++++++++++++++------- src/hollywoo_flixel/HollywooFlixelDSL.kiss | 6 +++- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/hollywoo_flixel/FlxDirector.hx b/src/hollywoo_flixel/FlxDirector.hx index 2e235b9..789aaaf 100644 --- a/src/hollywoo_flixel/FlxDirector.hx +++ b/src/hollywoo_flixel/FlxDirector.hx @@ -7,6 +7,7 @@ import flixel.FlxSprite; import flixel.input.actions.FlxAction; import flixel.input.actions.FlxActionManager; import flixel.input.mouse.FlxMouseButton; +import flixel.math.FlxRect; import flixel.group.FlxGroup; import flixel.tweens.FlxTween; import hollywoo.Movie; diff --git a/src/hollywoo_flixel/FlxDirector.kiss b/src/hollywoo_flixel/FlxDirector.kiss index 09eac08..c8b582d 100644 --- a/src/hollywoo_flixel/FlxDirector.kiss +++ b/src/hollywoo_flixel/FlxDirector.kiss @@ -22,6 +22,7 @@ (spriteLayers.push g) (FlxG.state.add g)))) +(prop :Map skySprites (new Map)) (prop &mut :FlxSprite skySprite) (prop :FlxKeyShortcutHandlerVoid> sh (new FlxKeyShortcutHandler)) @@ -97,18 +98,31 @@ (setSprite.updateHitbox) (setSprite.screenCenter)) (otherwise)) - // TODO draw a sky background depending on time of day, int/ext - (let [skyColor (case time - ((or Morning Day) DAY_SKY_COLOR) - (Evening EVENING_SKY_COLOR) - (Night NIGHT_SKY_COLOR) - (never null))] - (set skySprite (new FlxSprite)) - (skySprite.makeGraphic (Std.int setSprite.width) (Std.int setSprite.height) skyColor true) - (set skySprite.cameras [camera]) - (set skySprite.x setSprite.x) - (set skySprite.y setSprite.y) - (.add (first spriteLayers) skySprite)) + // draw a sky background depending on time of day, int/ext + (ifLet [specialSkySprite (.clone (dictGet skySprites time))] + { + (set skySprite specialSkySprite) + (skySprite.setGraphicSize (Std.int setSprite.width)) + (skySprite.updateHitbox) + (unless (>= skySprite.height setSprite.height) + (skySprite.setGraphicSize 0 (Std.int setSprite.height)) + (skySprite.updateHitbox) + (let [hOverflow (- skySprite.width setSprite.width) + unscaledOverflow (/ hOverflow skySprite.scale.x) + half (iHalf unscaledOverflow)] + (set skySprite.clipRect (new FlxRect 0 0 (Std.int (- skySprite.frameWidth unscaledOverflow)) skySprite.frameHeight)))) + } + (let [skyColor (case time + ((or Morning Day) DAY_SKY_COLOR) + (Evening EVENING_SKY_COLOR) + (Night NIGHT_SKY_COLOR) + (never null))] + (set skySprite (new FlxSprite)) + (skySprite.makeGraphic (Std.int setSprite.width) (Std.int setSprite.height) skyColor true))) + (set skySprite.x setSprite.x) + (set skySprite.y 0) + (set skySprite.cameras [camera]) + (.add (first spriteLayers) skySprite) (FlxG.cameras.remove flxMovie.uiCamera false) (FlxG.cameras.remove flxMovie.screenCamera false) diff --git a/src/hollywoo_flixel/HollywooFlixelDSL.kiss b/src/hollywoo_flixel/HollywooFlixelDSL.kiss index bfb1177..c42ab8e 100644 --- a/src/hollywoo_flixel/HollywooFlixelDSL.kiss +++ b/src/hollywoo_flixel/HollywooFlixelDSL.kiss @@ -174,4 +174,8 @@ (withSceneSetCC sceneKey bg (p.setGraphicSize (Std.int bg.width) (Std.int bg.height)) (p.updateHitbox) - (addProp propKey (new StagePosition bg.x bg.y 1) cc))))) \ No newline at end of file + (addProp propKey (new StagePosition bg.x bg.y 1) cc))))) + +(method loadSkySprite [time path &opt :Void->Void cc] + (dictSet flxDirector.skySprites time (.loadGraphic (new FlxSprite) path)) + (when cc (cc))) \ No newline at end of file