From fe7ffecc0dbad44a0afbcddcd2e4eb0ebfd9279b Mon Sep 17 00:00:00 2001 From: Jenny Crowe Date: Thu, 1 Feb 2024 13:52:50 -0700 Subject: [PATCH] Chart editor: Tweaked FlxCamera management when entering and exiting playtest mode to fix UI-related crashes. --- .../ui/debug/charting/ChartEditorState.hx | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/source/funkin/ui/debug/charting/ChartEditorState.hx b/source/funkin/ui/debug/charting/ChartEditorState.hx index 5f526a364..467e36f74 100644 --- a/source/funkin/ui/debug/charting/ChartEditorState.hx +++ b/source/funkin/ui/debug/charting/ChartEditorState.hx @@ -690,6 +690,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState */ var activeToolboxes:Map = new Map(); + /** + * The camera component we're using for this state. + */ + var uiCamera:FlxCamera; + // Audio /** @@ -2028,7 +2033,8 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState loadPreferences(); - fixCamera(); + uiCamera = new FlxCamera(); + FlxG.cameras.reset(uiCamera); buildDefaultSongData(); @@ -5287,7 +5293,7 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState Paths.setCurrentLevel('weekend1'); } - subStateClosed.add(fixCamera); + subStateClosed.add(reviveUICamera); subStateClosed.add(resetConductorAfterTest); FlxTransitionableState.skipNextTransIn = false; @@ -5312,6 +5318,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState } if (audioVocalTrackGroup != null) targetState.vocals = audioVocalTrackGroup; + // Kill and replace the UI camera so it doesn't get destroyed during the state transition. + uiCamera.kill(); + FlxG.cameras.remove(uiCamera, false); + FlxG.cameras.reset(new FlxCamera()); + this.persistentUpdate = false; this.persistentDraw = false; stopWelcomeMusic(); @@ -5401,13 +5412,12 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState } /** - * Fix a camera issue caused when closing the PlayState used when testing. + * Revive the UI camera and re-establish it as the main camera so UI elements depending on it don't explode. */ - function fixCamera(_:FlxSubState = null):Void + function reviveUICamera(_:FlxSubState = null):Void { - FlxG.cameras.reset(new FlxCamera()); - FlxG.camera.focusOn(new FlxPoint(FlxG.width / 2, FlxG.height / 2)); - FlxG.camera.zoom = 1.0; + uiCamera.revive(); + FlxG.cameras.reset(uiCamera); add(this.root); }