From 34136a490f29e3f708229457652abf8abd777210 Mon Sep 17 00:00:00 2001 From: Frakist <90983918+Frakist@users.noreply.github.com> Date: Mon, 31 Jul 2023 19:17:31 +0300 Subject: [PATCH] new event list thing something thing --- .../editors/charter/CharterEventScreen.hx | 137 +++++++++--------- source/funkin/editors/ui/UIButtonList.hx | 3 +- 2 files changed, 71 insertions(+), 69 deletions(-) diff --git a/source/funkin/editors/charter/CharterEventScreen.hx b/source/funkin/editors/charter/CharterEventScreen.hx index 562c5dbe..525670c9 100644 --- a/source/funkin/editors/charter/CharterEventScreen.hx +++ b/source/funkin/editors/charter/CharterEventScreen.hx @@ -14,17 +14,15 @@ class CharterEventScreen extends UISubstateWindow { public var step:Float = 0; public var events:Array = []; - - public var iconsPanel:FlxGroup; + public var eventsList:UIButtonList = null; public var eventName:UIText; public var paramsPanel:FlxGroup; public var paramsFields:Array = []; - public var addButton:UIButton; public var saveButton:UIButton; - public var deleteButton:UIButton; + public var closeButton:UIButton; public function new(step:Float, ?chartEvent:Null) { if (chartEvent != null) this.chartEvent = chartEvent; @@ -43,35 +41,19 @@ class CharterEventScreen extends UISubstateWindow { FlxG.sound.music.pause(); // prevent the song from continuing Charter.instance.vocals.pause(); - + eventsList = new UIButtonList(0,0,75, 570, "", ()-> openSubState(new CharterEventTypeSelection(function(eventName) { + events.push({ + time: Conductor.getTimeForStep(chartEvent.step), + params: [], + name: eventName + }); + eventsList.add(new EventButton(events[events.length-1], CharterEvent.generateEventIcon(events[events.length-1]), events.length-1, this, eventsList)); + changeTab(events.length-1); + })), 1, 2); events = chartEvent.events.copy(); - - var bg:FlxSprite = new FlxSprite(windowSpr.x + 1, windowSpr.y + 31, Paths.image('editors/ui/scrollbar-bg')); - bg.setGraphicSize(30, windowSpr.bHeight - 32); - bg.updateHitbox(); - add(bg); - - iconsPanel = new FlxGroup(); - add(iconsPanel); - - addButton = new UIButton(windowSpr.x + 1, windowSpr.y + 31, "", function() { - openSubState(new CharterEventTypeSelection(function(eventName) { - events.push({ - time: Conductor.getTimeForStep(chartEvent.step), - params: [], - name: eventName - }); - changeTab(events.length-1); - })); - }); - addButton.bWidth = addButton.bHeight = 30; - add(addButton); - - var addButtonIcon = new FlxSprite(addButton.x, addButton.y, Paths.image('editors/charter/add-button')); - addButtonIcon.x += (30 - addButtonIcon.width) / 2; - addButtonIcon.y += (30 - addButtonIcon.height) / 2; - add(addButtonIcon); - + for (k=>i in events) + eventsList.add(new EventButton(i, CharterEvent.generateEventIcon(i), k, this, eventsList)); + add(eventsList); paramsPanel = new FlxGroup(); add(paramsPanel); @@ -83,12 +65,22 @@ class CharterEventScreen extends UISubstateWindow { Charter.instance.deleteSelection([chartEvent]); else if (events.length > 0) { var oldEvents:Array = chartEvent.events.copy(); - chartEvent.events = events; + chartEvent.events = [for (i in eventsList.buttons.members) { + if(i is EventButton) { + var i:EventButton = cast i; + i.event; + } + }]; if (creatingEvent && events.length > 0) Charter.instance.createSelection([chartEvent]); else { - chartEvent.events = events; + chartEvent.events = [for (i in eventsList.buttons.members) { + if(i is EventButton) { + var i:EventButton = cast i; + i.event; + } + }]; chartEvent.refreshEventIcons(); Charter.instance.addToUndo(CEditEvent(chartEvent, oldEvents, events.copy())); @@ -102,16 +94,12 @@ class CharterEventScreen extends UISubstateWindow { saveButton.y -= saveButton.bHeight; add(saveButton); - deleteButton = new UIButton(saveButton.x - 10, saveButton.y, "Delete", function() { - if (curEvent >= 0) { - events.splice(curEvent, 1); - changeTab(curEvent, false); - } - }); - deleteButton.x -= deleteButton.bWidth; - add(deleteButton); + closeButton = new UIButton(saveButton.x - 10, saveButton.y, "Close", ()->close()); + closeButton.color = 0xFFFF0000; + closeButton.x -= closeButton.bWidth; + add(closeButton); - eventName = new UIText(windowSpr.x + addButton.bWidth + 15, windowSpr.y + 41, 0, "", 24); + eventName = new UIText(eventsList.bWidth + windowSpr.x + 15, windowSpr.y + 41, 0, "", 24); add(eventName); changeTab(0); @@ -192,30 +180,6 @@ class CharterEventScreen extends UISubstateWindow { eventName.text = "No event"; curEvent = -1; } - - refreshIcons(); - } - - public function refreshIcons() { - while(iconsPanel.members.length > 0) - iconsPanel.remove(iconsPanel.members[0], true).destroy(); - - for(k=>e in events) { - var butt = new UIButton(windowSpr.x + 1, windowSpr.y + 66 + (k*30), "", function() { - changeTab(k); - }); - butt.bWidth = butt.bHeight = 30; - if (k == curEvent) { - butt.framesOffset = 18; - butt.active = false; - } - - iconsPanel.add(butt); - - var icon = CharterEvent.generateEventIcon(e); - icon.setPosition(butt.x + ((butt.bWidth - icon.width) / 2), butt.y + ((butt.bHeight - icon.height) / 2)); - iconsPanel.add(icon); - } } public function saveCurTab() { @@ -247,4 +211,43 @@ class CharterEventScreen extends UISubstateWindow { } ]; } +} +class EventButton extends UIButton { + public var icon:FlxSprite = null; + public var event:ChartEvent = null; + public var deleteButton:UIButton; + public var deleteIcon:FlxSprite; + public function new(event:ChartEvent, icon:FlxSprite, id:Int, substate:CharterEventScreen, parent:UIButtonList) { + super(0,0,"",function() { + substate.changeTab(id); + for(i in parent.buttons.members) { + if(i is EventButton) { + var i:EventButton = cast i; + i.alpha = i == this ? 1 : 0.25; + } + } + },73,40); + members.push(icon); + this.icon = icon; + this.event = event; + icon.setPosition(18 - icon.width / 2, 20 - icon.height / 2); + deleteButton = new UIButton(bWidth - 30, y + (bHeight - 26) / 2, "", function () { + substate.events.splice(id, 1); + substate.changeTab(id, false); + parent.remove(this); + }, 26, 26); + deleteButton.color = FlxColor.RED; + members.push(deleteButton); + + deleteIcon = new FlxSprite(deleteButton.x + (15/2), deleteButton.y + 4).loadGraphic(Paths.image('editors/character/delete-button')); + + deleteIcon.antialiasing = false; + members.push(deleteIcon); + } + override function update(elapsed) { + super.update(elapsed); + icon.setPosition(x + (18 - icon.width / 2),y + (20 - icon.height / 2)); + deleteButton.setPosition(x + (bWidth - 30), y + (bHeight - 26) / 2); + deleteIcon.setPosition(deleteButton.x + (10/2), deleteButton.y + 4); + } } \ No newline at end of file diff --git a/source/funkin/editors/ui/UIButtonList.hx b/source/funkin/editors/ui/UIButtonList.hx index c5afed15..ca7b5e36 100644 --- a/source/funkin/editors/ui/UIButtonList.hx +++ b/source/funkin/editors/ui/UIButtonList.hx @@ -99,8 +99,7 @@ class UIButtonList extends UIWindow { } scrollY = FlxMath.bound(nextscrollY, 0, -_buttonYOffset + Math.abs(Math.min(bHeight - ((addButton.bHeight + _buttonYOffset) * buttons.members.length + (cameraSpacing + _buttonYOffset)), 0))); for (button in buttons.members) - if (button != null) button.selectable = (hovered); - addButton.selectable = hovered; + if (button != null) button.selectable = (hovered && _curMoving == null); if (__lastDrawCameras[0] != null) { buttonCameras.height = bHeight - cameraSpacing; buttonCameras.x = x - __lastDrawCameras[0].scroll.x;