diff --git a/assets/images/desktop/ui/button.png b/assets/images/desktop/ui/button.png index c4826c6a..73aadde2 100644 Binary files a/assets/images/desktop/ui/button.png and b/assets/images/desktop/ui/button.png differ diff --git a/assets/images/desktop/ui/buttonHover.png b/assets/images/desktop/ui/buttonHover.png index 81f3e05d..a178e6c7 100644 Binary files a/assets/images/desktop/ui/buttonHover.png and b/assets/images/desktop/ui/buttonHover.png differ diff --git a/assets/images/desktop/ui/buttonPressed.png b/assets/images/desktop/ui/buttonPressed.png index ba4d4ba8..9a9a7bf6 100644 Binary files a/assets/images/desktop/ui/buttonPressed.png and b/assets/images/desktop/ui/buttonPressed.png differ diff --git a/assets/images/desktop/ui/caption.png b/assets/images/desktop/ui/caption.png index 01cff8f6..de404748 100644 Binary files a/assets/images/desktop/ui/caption.png and b/assets/images/desktop/ui/caption.png differ diff --git a/assets/images/desktop/ui/captionButtons.png b/assets/images/desktop/ui/captionButtons.png index 65fead0b..0206bb73 100644 Binary files a/assets/images/desktop/ui/captionButtons.png and b/assets/images/desktop/ui/captionButtons.png differ diff --git a/assets/images/desktop/ui/captionInactive.png b/assets/images/desktop/ui/captionInactive.png index 14f9d1d7..19580214 100644 Binary files a/assets/images/desktop/ui/captionInactive.png and b/assets/images/desktop/ui/captionInactive.png differ diff --git a/buildnumber.txt b/buildnumber.txt index dfac53b0..d09be2fa 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -1641 \ No newline at end of file +1667 \ No newline at end of file diff --git a/source/funkin/desktop/DesktopMain.hx b/source/funkin/desktop/DesktopMain.hx index 334c04e3..7f8a2620 100644 --- a/source/funkin/desktop/DesktopMain.hx +++ b/source/funkin/desktop/DesktopMain.hx @@ -24,14 +24,22 @@ class DesktopMain extends MusicBeatState { public static var instance:DesktopMain; - public var mouseInput:MouseInput = new MouseInput(); + public static var mouseInput:MouseInput; public static var theme:Theme = null; + public static function init() { + theme = Theme.loadFromAssets(Paths.getPath('images/desktop/ui.xml', TEXT, null)); + mouseInput = new MouseInput(); + + FlxG.signals.preUpdate.add(function() { + mouseInput.set(FlxG.mouse.pressed, FlxG.mouse.justPressed, FlxG.mouse.justReleased); + }); + } + public override function create() { super.create(); - theme = Theme.loadFromAssets(Paths.getPath('images/desktop/ui.xml', TEXT, null)); instance = this; FlxG.mouse.useSystemCursor = FlxG.mouse.visible = true; diff --git a/source/funkin/desktop/editors/EditorPlayState.hx b/source/funkin/desktop/editors/EditorPlayState.hx index caa2fd90..162d2b22 100644 --- a/source/funkin/desktop/editors/EditorPlayState.hx +++ b/source/funkin/desktop/editors/EditorPlayState.hx @@ -74,7 +74,7 @@ class EditorPlayState extends WindowContent { public override function update(elapsed:Float) { beforeStateShit(); super.update(elapsed); - state.update(elapsed); + state.tryUpdate(elapsed); afterStateShit(); } diff --git a/source/funkin/desktop/sprites/Button.hx b/source/funkin/desktop/sprites/Button.hx index a2b5ab54..897ba134 100644 --- a/source/funkin/desktop/sprites/Button.hx +++ b/source/funkin/desktop/sprites/Button.hx @@ -53,7 +53,7 @@ class Button extends FlxObject { public override function update(elapsed:Float) { super.update(elapsed); - var mouseInput = DesktopMain.instance.mouseInput; + var mouseInput = DesktopMain.mouseInput; if (mouseInput.overlaps(normalSprite, camera)) { if (mouseInput.justReleased) { callback(); diff --git a/source/funkin/desktop/windows/Window.hx b/source/funkin/desktop/windows/Window.hx index 184f337b..a139fc42 100644 --- a/source/funkin/desktop/windows/Window.hx +++ b/source/funkin/desktop/windows/Window.hx @@ -245,20 +245,20 @@ class Window extends FlxTypedGroup { windowInactiveFrame.visible = !(windowFrame.visible = focused); var i = members.length; - var shouldCancel = DesktopMain.instance.mouseInput.overlapsRect(this, new Rectangle(0, 0, windowCaptionCamera.width, windowCaptionCamera.height), windowCaptionCamera); + var shouldCancel = DesktopMain.mouseInput.overlapsRect(this, new Rectangle(0, 0, windowCaptionCamera.width, windowCaptionCamera.height), windowCaptionCamera); if (curDialog != null && curDialog.exists) { if (shouldCancel) { - if (DesktopMain.instance.mouseInput.justPressed) { + if (DesktopMain.mouseInput.justPressed) { // TODO: sounds DesktopMain.instance.focusWindow(curDialog); } - DesktopMain.instance.mouseInput.cancel(); + DesktopMain.mouseInput.cancel(); } return; - } else if (shouldCancel && DesktopMain.instance.mouseInput.justPressed) + } else if (shouldCancel && DesktopMain.mouseInput.justPressed) DesktopMain.instance.focusWindow(this); // updates them backwards!! while(i > 0) { @@ -268,7 +268,7 @@ class Window extends FlxTypedGroup { spr.update(elapsed); } - if (shouldCancel) DesktopMain.instance.mouseInput.cancel(); + if (shouldCancel) DesktopMain.mouseInput.cancel(); } public function close() { diff --git a/source/funkin/desktop/windows/WindowCaptionButton.hx b/source/funkin/desktop/windows/WindowCaptionButton.hx index c498b01e..52bdbeab 100644 --- a/source/funkin/desktop/windows/WindowCaptionButton.hx +++ b/source/funkin/desktop/windows/WindowCaptionButton.hx @@ -30,7 +30,7 @@ class WindowCaptionButton extends FlxSprite { super.update(elapsed); return; } - var mouseInput = DesktopMain.instance.mouseInput; + var mouseInput = DesktopMain.mouseInput; visible = switch(ID) { case 1 | 2: window.resizeable || window.canMinimize; @@ -45,7 +45,7 @@ class WindowCaptionButton extends FlxSprite { case 3: window.canHelp; default: true; }) { - if (DesktopMain.instance.mouseInput.overlaps(this, camera)) { + if (DesktopMain.mouseInput.overlaps(this, camera)) { if (mouseInput.justReleased) { switch(ID) { case 0: diff --git a/source/funkin/desktop/windows/WindowDragHitbox.hx b/source/funkin/desktop/windows/WindowDragHitbox.hx index 2a7cc09d..bd095f4c 100644 --- a/source/funkin/desktop/windows/WindowDragHitbox.hx +++ b/source/funkin/desktop/windows/WindowDragHitbox.hx @@ -38,21 +38,21 @@ class WindowDragHitbox extends FlxObject { screenPos.x = FlxMath.bound(screenPos.x, 0, FlxG.camera.width); screenPos.y = FlxMath.bound(screenPos.y, 0, FlxG.camera.height); - if (DesktopMain.instance.mouseInput.justReleased) { + if (DesktopMain.mouseInput.justReleased) { dragging = false; offset.put(); return; } parent.move(screenPos.x + offset.x, screenPos.y + offset.y); - DesktopMain.instance.mouseInput.cancel(); + DesktopMain.mouseInput.cancel(); } else { - if (DesktopMain.instance.mouseInput.overlaps(this, camera)) { - if (DesktopMain.instance.mouseInput.justPressed) { + if (DesktopMain.mouseInput.overlaps(this, camera)) { + if (DesktopMain.mouseInput.justPressed) { var screenPos = FlxG.mouse.getScreenPosition(FlxG.camera); offset = FlxPoint.get(parent.content.winX - screenPos.x, parent.content.winY - screenPos.y); dragging = true; } - DesktopMain.instance.mouseInput.cancel(); + DesktopMain.mouseInput.cancel(); } } } diff --git a/source/funkin/multitasking/StateWindow.hx b/source/funkin/multitasking/StateWindow.hx index 3e0eb17a..a4d199e5 100644 --- a/source/funkin/multitasking/StateWindow.hx +++ b/source/funkin/multitasking/StateWindow.hx @@ -1,5 +1,6 @@ package funkin.multitasking; +import flixel.system.frontEnds.BitmapFrontEnd; import openfl.Lib; import openfl.display.Sprite; import flash.events.Event; @@ -14,8 +15,10 @@ import flixel.FlxG; class StateWindow extends Sprite { public var window:Window; public var state:MusicBeatState; - public var cameras:Array = [new FlxCamera()]; - public var camerasDefault:Array = []; + public var camera:FlxCamera; + public var cameras:Array; + public var camerasDefault:Array; + public var bmapFrontEnd:BitmapFrontEnd = new BitmapFrontEnd(); public function new(windowName:String, state:MusicBeatState) { super(); @@ -36,6 +39,10 @@ class StateWindow extends Sprite { window.stage.addChild(this); + camera = new FlxCamera(); + cameras = [camera]; + camerasDefault = [camera]; + state.parentWindow = this; this.state = state; @@ -52,6 +59,7 @@ class StateWindow extends Sprite { var oldCamDefaults:Array; var oldCam:FlxCamera; var oldState:FlxState; + var oldFrontEnd:BitmapFrontEnd; public function beforeStateShit() { oldSize.set(FlxG.width, FlxG.height); @@ -66,10 +74,25 @@ class StateWindow extends Sprite { FlxCamera._defaultCameras = FlxG.cameras.defaults = camerasDefault; FlxG.cameras.list = cameras; - FlxG.camera = cameras[0]; + FlxG.camera = camera; oldState = FlxG.game._state; FlxG.game._state = state; + + + if (this.numChildren != cameras.length) { + trace("readding cameras..."); + while(this.numChildren > 0) + removeChild(getChildAt(0)); + + for(c in cameras) { + addChild(c.flashSprite); + c.flashSprite.x = c.flashSprite.y = 0; + } + } + + oldFrontEnd = FlxG.bitmap; + FlxG.bitmap = bmapFrontEnd; } } @@ -78,6 +101,7 @@ class StateWindow extends Sprite { FlxG.width = Std.int(oldSize.x); FlxG.height = Std.int(oldSize.y); + camera = FlxG.camera; cameras = FlxG.cameras.list; camerasDefault = FlxG.cameras.defaults; @@ -89,49 +113,36 @@ class StateWindow extends Sprite { oldCam = null; FlxG.game._state = oldState; + + FlxG.bitmap = oldFrontEnd; + oldFrontEnd = null; } } public function update(elapsed:Float) { - beforeStateShit(); - @:privateAccess - FlxG.cameras.update(FlxG.elapsed); - state.tryUpdate(elapsed); - afterStateShit(); + } public function draw() { - @:privateAccess { - beforeStateShit(); - // for(c in cameras) { - // addChild(c.flashSprite); - // c.color = 0xFF0000; - // } - FlxG.cameras.lock(); - state.draw(); - FlxG.cameras.unlock(); - - afterStateShit(); - } } - /* + + public override function __enterFrame(t:Float) { - super.__enterFrame(Std.int(t)); @:privateAccess { beforeStateShit(); - for(c in cameras) { - trace(c.x); - trace(c.y); - // c.bgColor = 0xFFFFFFFF; - } - stage.color = 0xFF0000; + + FlxG.cameras.update(FlxG.elapsed); + state.tryUpdate(FlxG.elapsed); + FlxG.cameras.lock(); state.draw(); + + FlxG.cameras.render(); FlxG.cameras.unlock(); + afterStateShit(); } } - */ } \ No newline at end of file diff --git a/source/funkin/system/Main.hx b/source/funkin/system/Main.hx index b0731c0f..cf27c53a 100644 --- a/source/funkin/system/Main.hx +++ b/source/funkin/system/Main.hx @@ -1,5 +1,6 @@ package funkin.system; +import funkin.desktop.DesktopMain; import openfl.utils.AssetLibrary; import openfl.utils.AssetCache; import openfl.text.TextFormat; @@ -139,6 +140,7 @@ class Main extends Sprite Logs.init(); Paths.init(); ModsFolder.init(); + DesktopMain.init(); #if MOD_SUPPORT ModsFolder.switchMod("introMod"); #end diff --git a/source/funkin/system/MusicBeatState.hx b/source/funkin/system/MusicBeatState.hx index cc92a4a7..fa0bf115 100644 --- a/source/funkin/system/MusicBeatState.hx +++ b/source/funkin/system/MusicBeatState.hx @@ -189,7 +189,9 @@ class MusicBeatState extends FlxUIState implements IBeatReceiver } public override function destroy() { - super.destroy(); + if (parentWindow == null) + super.destroy(); + call("onDestroy"); if (stateScript != null) stateScript.destroy(); @@ -197,10 +199,6 @@ class MusicBeatState extends FlxUIState implements IBeatReceiver public override function draw() { super.draw(); - #if ALLOW_MULTITASKING - if (parentWindow == null) - funkin.multitasking.MultiTaskingHandler.draw(); - #end } public override function switchTo(nextState:FlxState) {