From 6f102c6717bcbfc233df9a943a62064f6658369d Mon Sep 17 00:00:00 2001 From: lunarcleint Date: Mon, 17 Mar 2025 23:32:28 -0700 Subject: [PATCH] HI STAGE EDITOR!!! --- source/funkin/editors/stage/StageEditor.hx | 128 ++++++------------ .../editors/stage/StageSpritesWindow.hx | 50 +++++++ 2 files changed, 95 insertions(+), 83 deletions(-) create mode 100644 source/funkin/editors/stage/StageSpritesWindow.hx diff --git a/source/funkin/editors/stage/StageEditor.hx b/source/funkin/editors/stage/StageEditor.hx index 62950a01..ed285f5c 100644 --- a/source/funkin/editors/stage/StageEditor.hx +++ b/source/funkin/editors/stage/StageEditor.hx @@ -35,7 +35,7 @@ class StageEditor extends UIState { public var topMenuSpr:UITopMenu; public var uiGroup:FlxTypedGroup = new FlxTypedGroup(); - public var stageSpritesWindow:UIButtonList; + public var stageSpritesWindow:StageSpritesWindow; public var xmlMap:Map = new Map(); @@ -219,6 +219,50 @@ class StageEditor extends UIState { // Load from xml var order:Array = []; var orderNodes:Array = []; + + loadStage(order, orderNodes); + + topMenuSpr = new UITopMenu(topMenu); + topMenuSpr.cameras = uiGroup.cameras = [uiCamera]; + + stageSpritesWindow = new StageSpritesWindow(Std.int(FlxG.width - 400), 25); + for (i=>sprite in order) { + var xml = (sprite != null) ? xmlMap.get(sprite) : orderNodes[i]; + if (xml != null) { + if (sprite is Character) { + var char:Character = cast sprite; + var button = new StageCharacterButton(0,0, char, xml); + char.extra.set(exID("button"), button); + stageSpritesWindow.add(button); + } else if (sprite is FunkinSprite) { + var sprite:FunkinSprite = cast sprite; + var type = sprite.extra.get(exID("type")); + var button:StageElementButton = (type == "box" || type == "solid") ? new StageSolidButton(0,0, sprite, xml) : new StageSpriteButton(0,0, sprite, xml); + sprite.extra.set(exID("button"), button); + stageSpritesWindow.add(button); + } else if(sprite == null) { + var basic = new FlxBasic(); // prevent awkward layering + insert(i, basic); + var button = new StageUnknownButton(0,0, basic, xml); + stageSpritesWindow.add(button); + } + } + } + uiGroup.add(stageSpritesWindow); + + add(topMenuSpr); + add(uiGroup); + + if(Framerate.isLoaded) { + Framerate.fpsCounter.alpha = 0.4; + Framerate.memoryCounter.alpha = 0.4; + Framerate.codenameBuildField.alpha = 0.4; + } + + // DiscordUtil.call("onEditorLoaded", ["Stage Editor", __stage]); + } + + function loadStage(order:Array, orderNodes:Array) { stage = new Stage(__stage, this, false); stage.onXMLLoaded = function(xml:Access, elems:Array) { return elems; @@ -291,88 +335,6 @@ class StageEditor extends UIState { add(stage); setZoom(stage.defaultZoom); - - topMenuSpr = new UITopMenu(topMenu); - topMenuSpr.cameras = uiGroup.cameras = [uiCamera]; - - final margin = 0;//22; - final width = SPRITE_WINDOW_WIDTH; - final TOP_MENU_HEIGHT = 25; - var buttonSize:FlxPoint = FlxPoint.get(width-margin*2, SPRITE_WINDOW_BUTTON_HEIGHT); - stageSpritesWindow = new UIButtonList(Std.int(FlxG.width - width), TOP_MENU_HEIGHT, width, Std.int(FlxG.height - TOP_MENU_HEIGHT), "Stage Sprites", buttonSize); - stageSpritesWindow.collapsable = true; - stageSpritesWindow.topAlpha = 0.9; - stageSpritesWindow.middleAlpha = 0.5; - stageSpritesWindow.bottomAlpha = 0.5; - stageSpritesWindow.buttonSpacing = 0; - stageSpritesWindow.dragCallback = (button, oldID, newID) -> { - var sprite:FlxBasic = (button is StageUnknownButton) ? cast(button, StageUnknownButton).basic : button.getSprite(); - var idx = members.indexOf(sprite); - members.splice(idx, 1); - members.insert(newID, sprite); - } - stageSpritesWindow.addButton.callback = () -> { - var lastDrawCam = stageSpritesWindow.addButton.__lastDrawCameras[0]; - var screenPos = stageSpritesWindow.addButton.getScreenPosition(null, lastDrawCam == null ? FlxG.camera : lastDrawCam); - openContextMenu([ - { - label: "Sprite", - onSelect: _sprite_new, - color: 0xFF00FF00, - icon: 2 - }, - { - label: "Box", - onSelect: function(_) { - UIState.state.displayNotification(new UIBaseNotification("Creating a box isnt implemented yet!", 2, BOTTOM_LEFT)); - CoolUtil.playMenuSFX(WARNING, 0.45); - }, - color: 0xFF00FF00, - icon: 2 - }, - { - label: "Character", - onSelect: _character_new, - color: 0xFF00FF00, - icon: 2 - } - ], null, lastDrawCam.x + screenPos.x, lastDrawCam.y + screenPos.y + stageSpritesWindow.addButton.bHeight, stageSpritesWindow.addButton.bWidth); - screenPos.put(); - } - for (i=>sprite in order) { - var xml = (sprite != null) ? xmlMap.get(sprite) : orderNodes[i]; - if (xml != null) { - if (sprite is Character) { - var char:Character = cast sprite; - var button = new StageCharacterButton(0,0, char, xml); - char.extra.set(exID("button"), button); - stageSpritesWindow.add(button); - } else if (sprite is FunkinSprite) { - var sprite:FunkinSprite = cast sprite; - var type = sprite.extra.get(exID("type")); - var button:StageElementButton = (type == "box" || type == "solid") ? new StageSolidButton(0,0, sprite, xml) : new StageSpriteButton(0,0, sprite, xml); - sprite.extra.set(exID("button"), button); - stageSpritesWindow.add(button); - } else if(sprite == null) { - var basic = new FlxBasic(); // prevent awkward layering - insert(i, basic); - var button = new StageUnknownButton(0,0, basic, xml); - stageSpritesWindow.add(button); - } - } - } - uiGroup.add(stageSpritesWindow); - - add(topMenuSpr); - add(uiGroup); - - if(Framerate.isLoaded) { - Framerate.fpsCounter.alpha = 0.4; - Framerate.memoryCounter.alpha = 0.4; - Framerate.codenameBuildField.alpha = 0.4; - } - - //DiscordUtil.call("onEditorLoaded", ["Stage Editor", __stage]); } function prepareCharacter(charPos:StageCharPos, node:Access):Character { diff --git a/source/funkin/editors/stage/StageSpritesWindow.hx b/source/funkin/editors/stage/StageSpritesWindow.hx new file mode 100644 index 00000000..78988e1e --- /dev/null +++ b/source/funkin/editors/stage/StageSpritesWindow.hx @@ -0,0 +1,50 @@ +package funkin.editors.stage; + +import funkin.editors.stage.elements.StageElementButton; +import funkin.editors.stage.elements.*; + +class StageSpritesWindow extends UIButtonList { + public function new(x:Float, y:Float) { + super(x, y, 400, FlxG.height-25, "Stage Sprites", FlxPoint.get(400, 64)); + + collapsable = true; + topAlpha = 0.9; + middleAlpha = 0.5; + bottomAlpha = 0.5; + buttonSpacing = 0; + dragCallback = (button, oldID, newID) -> { + var sprite:FlxBasic = (button is StageUnknownButton) ? cast(button, StageUnknownButton).basic : button.getSprite(); + var idx = StageEditor.instance.members.indexOf(sprite); + StageEditor.instance.members.splice(idx, 1); + StageEditor.instance.members.insert(newID, sprite); + } + addButton.callback = () -> @:privateAccess { + var lastDrawCam = addButton.__lastDrawCameras[0]; + var screenPos = addButton.getScreenPosition(null, lastDrawCam == null ? FlxG.camera : lastDrawCam); + StageEditor.instance.openContextMenu([ + { + label: "Sprite", + onSelect: StageEditor.instance._sprite_new, + color: 0xFF00FF00, + icon: 2 + }, + { + label: "Box", + onSelect: function(_) { + UIState.state.displayNotification(new UIBaseNotification("Creating a box isnt implemented yet!", 2, BOTTOM_LEFT)); + CoolUtil.playMenuSFX(WARNING, 0.45); + }, + color: 0xFF00FF00, + icon: 2 + }, + { + label: "Character", + onSelect: StageEditor.instance._character_new, + color: 0xFF00FF00, + icon: 2 + } + ], null, lastDrawCam.x + screenPos.x, lastDrawCam.y + screenPos.y + addButton.bHeight, addButton.bWidth); + screenPos.put(); + } + } +} \ No newline at end of file