From 50cb615c2673f3a9ecc589e3dab5c15e5bc09d87 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Thu, 13 Apr 2023 19:12:57 +0200 Subject: [PATCH] new transitions (skippable) --- assets/images/menus/transitionSpr.png | Bin 0 -> 510 bytes source/funkin/system/MainState.hx | 2 +- source/funkin/system/MusicBeatState.hx | 13 ++- source/funkin/system/MusicBeatSubstate.hx | 4 +- source/funkin/system/MusicBeatTransition.hx | 88 ++++++++++++++++++++ 5 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 assets/images/menus/transitionSpr.png create mode 100644 source/funkin/system/MusicBeatTransition.hx diff --git a/assets/images/menus/transitionSpr.png b/assets/images/menus/transitionSpr.png new file mode 100644 index 0000000000000000000000000000000000000000..7950267fb21be65ccc5475b1361fe0abada4682f GIT binary patch literal 510 zcmVpGut`KgRCwAo#8b2o1^@ui_p)t!*|v=>FWa_l+pcA|E!(zj+wRY?uHrmpIu&g!I&>Y(;&r?zUN)@r4eYN6(8rlxA5#%iR7YM}b6r@E@6+N!0Rs-eGC zUDZ@oRa9A(R8fEFPgPKPl~Y-jQE8P@NtIA>6;n|aQDGHQK^0Jb(^b literal 0 HcmV?d00001 diff --git a/source/funkin/system/MainState.hx b/source/funkin/system/MainState.hx index 17bc9d3d..6b306ae3 100644 --- a/source/funkin/system/MainState.hx +++ b/source/funkin/system/MainState.hx @@ -13,7 +13,7 @@ import flixel.FlxState; */ class MainState extends FlxState { public static var initiated:Bool = false; - public static var betaWarningShown:Bool = false; + public static var betaWarningShown:Bool = true; public override function create() { super.create(); if (!initiated) diff --git a/source/funkin/system/MusicBeatState.hx b/source/funkin/system/MusicBeatState.hx index 37939f7e..b5af40b5 100644 --- a/source/funkin/system/MusicBeatState.hx +++ b/source/funkin/system/MusicBeatState.hx @@ -11,7 +11,7 @@ import funkin.system.interfaces.IBeatReceiver; import funkin.system.Conductor; import funkin.options.PlayerSettings; -class MusicBeatState extends FlxTransitionableState implements IBeatReceiver +class MusicBeatState extends FlxState implements IBeatReceiver { private var lastBeat:Float = 0; private var lastStep:Float = 0; @@ -93,6 +93,9 @@ class MusicBeatState extends FlxTransitionableState implements IBeatReceiver public var scriptName:String = null; + public var skipTransOut:Bool = true; + public var skipTransIn:Bool = true; + inline function get_controls():Controls return PlayerSettings.solo.controls; inline function get_controlsP1():Controls @@ -150,6 +153,7 @@ class MusicBeatState extends FlxTransitionableState implements IBeatReceiver super.createPost(); persistentUpdate = true; call("postCreate"); + openSubState(new MusicBeatTransition(null)); } public function call(name:String, ?args:Array, ?defaultVal:Dynamic):Dynamic { // calls the function on the assigned script @@ -239,7 +243,12 @@ class MusicBeatState extends FlxTransitionableState implements IBeatReceiver var e = event("onStateSwitch", EventManager.get(StateEvent).recycle(nextState)); if (e.cancelled) return false; - return super.switchTo(nextState); + + if (subState is MusicBeatTransition && cast(subState, MusicBeatTransition).newState != null) + return true; + openSubState(new MusicBeatTransition(nextState)); + persistentUpdate = false; + return false; } public override function onFocus() { diff --git a/source/funkin/system/MusicBeatSubstate.hx b/source/funkin/system/MusicBeatSubstate.hx index 6e1bf93a..c084a6da 100644 --- a/source/funkin/system/MusicBeatSubstate.hx +++ b/source/funkin/system/MusicBeatSubstate.hx @@ -250,10 +250,12 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver } public override function resetSubState() { - super.resetSubState(); if (subState != null && subState is MusicBeatSubstate) { cast(subState, MusicBeatSubstate).parent = this; + super.resetSubState(); cast(subState, MusicBeatSubstate).onSubstateOpen(); + return; } + super.resetSubState(); } } diff --git a/source/funkin/system/MusicBeatTransition.hx b/source/funkin/system/MusicBeatTransition.hx new file mode 100644 index 00000000..5286edb7 --- /dev/null +++ b/source/funkin/system/MusicBeatTransition.hx @@ -0,0 +1,88 @@ +package funkin.system; + +import flixel.tweens.FlxTween; +import flixel.FlxState; +import funkin.utils.FunkinParentDisabler; + +class MusicBeatTransition extends MusicBeatSubstate { + var nextFrameSkip:Bool = false; + public var transitionCamera:FlxCamera; + public var newState:FlxState; + + public function new(?newState:FlxState) { + super(); + this.newState = newState; + } + + public override function create() { + super.create(); + + if (newState != null) + add(new FunkinParentDisabler(true)); + + transitionCamera = new FlxCamera(); + transitionCamera.bgColor = 0; + FlxG.cameras.add(transitionCamera, false); + + cameras = [transitionCamera]; + var out = newState != null; + + var blackSpr = new FlxSprite(0, out ? -transitionCamera.height : transitionCamera.height).makeGraphic(1, 1, -1); + blackSpr.scale.set(transitionCamera.width, transitionCamera.height); + blackSpr.color = 0xFF000000; + blackSpr.updateHitbox(); + add(blackSpr); + + var transitionSprite = new FunkinSprite(); + transitionSprite.loadSprite(Paths.image('menus/transitionSpr')); + if (transitionSprite.animateAtlas == null) { + transitionSprite.setGraphicSize(transitionCamera.width, transitionCamera.height); + transitionSprite.updateHitbox(); + } else { + transitionSprite.screenCenter(); + } + transitionCamera.flipY = !out; + add(transitionSprite); + + transitionCamera.scroll.y = transitionCamera.height; + FlxTween.tween(transitionCamera.scroll, {y: -transitionCamera.height}, 2/3, { + ease: FlxEase.sineOut, + onComplete: function(_) { + finish(); + } + }); + } + + public override function update(elapsed:Float) { + super.update(elapsed); + + if (nextFrameSkip) { + finish(); + return; + } + + if (!parent.persistentUpdate && controls.ACCEPT) { + // skip + if (newState != null) { + nextFrameSkip = true; + parent.persistentDraw = false; + } else { + finish(); + } + } + } + + public function finish() { + if (newState != null) + FlxG.switchState(newState); + close(); + } + + public override function destroy() { + if (newState == null && FlxG.cameras.list.contains(transitionCamera)) + FlxG.cameras.remove(transitionCamera); + else + transitionCamera.bgColor = 0xFF000000; + super.destroy(); + } +} \ No newline at end of file