Charter Event Undos

This commit is contained in:
lunarcleint
2023-07-28 18:51:11 -07:00
parent 0eebc9d9f8
commit 33e94be993
3 changed files with 79 additions and 47 deletions
+38 -26
View File
@@ -677,6 +677,7 @@ class Charter extends UIState {
}, function (e:CharterEvent) {
eventsGroup.add(e);
e.revive();
e.refreshEventIcons();
});
sortNotes();
@@ -1035,21 +1036,26 @@ class Charter extends UIState {
var v = undoList.shift();
switch(v) {
case null: // do nothing
case CCreateSelection(selection):
deleteSelection(selection, false);
case CDeleteSelection(selection):
createSelection(selection, false);
case CSustainChange(changes):
for(n in changes)
n.note.updatePos(n.note.step, n.note.id, n.before, n.note.type);
case CSelectionDrag(selection, change):
for (s in selection)
if (s.draggable) s.handleDrag(change * -1);
this.selection = selection;
case CDeleteStrumLine(strumLineID, strumLine):
createStrumline(strumLineID, strumLine, false);
case CCreateStrumLine(strumLineID, strumLine):
deleteStrumline(strumLineID, false);
case CCreateSelection(selection):
deleteSelection(selection, false);
case CDeleteSelection(selection):
createSelection(selection, false);
case CSelectionDrag(selection, change):
for (s in selection)
if (s.draggable) s.handleDrag(change * -1);
this.selection = selection;
case CEditSustains(changes):
for(n in changes)
n.note.updatePos(n.note.step, n.note.id, n.before, n.note.type);
case CEditEvent(event, oldEvents, newEvents):
event.events = oldEvents.copy();
event.refreshEventIcons();
Charter.instance.updateBPMEvents(event);
}
if (v != null)
redoList.insert(0, v);
@@ -1071,21 +1077,26 @@ class Charter extends UIState {
var v = redoList.shift();
switch(v) {
case null: // do nothing
case CCreateSelection(selection):
createSelection(selection, false);
case CDeleteSelection(selection):
deleteSelection(selection, false);
case CSustainChange(changes):
for(n in changes)
n.note.updatePos(n.note.step, n.note.id, n.after, n.note.type);
case CSelectionDrag(selection, change):
for (s in selection)
if (s.draggable) s.handleDrag(change);
this.selection = selection;
case CDeleteStrumLine(strumLineID, strumLine):
deleteStrumline(strumLineID, false);
case CCreateStrumLine(strumLineID, strumLine):
createStrumline(strumLineID, strumLine, false);
case CCreateSelection(selection):
createSelection(selection, false);
case CDeleteSelection(selection):
deleteSelection(selection, false);
case CSelectionDrag(selection, change):
for (s in selection)
if (s.draggable) s.handleDrag(change);
this.selection = selection;
case CEditSustains(changes):
for(n in changes)
n.note.updatePos(n.note.step, n.note.id, n.after, n.note.type);
case CEditEvent(event, oldEvents, newEvents):
event.events = newEvents.copy();
event.refreshEventIcons();
Charter.instance.updateBPMEvents(event);
}
if (v != null)
undoList.insert(0, v);
@@ -1174,7 +1185,7 @@ class Charter extends UIState {
function changeNoteSustain(change:Float) {
if (selection.length <= 0 || change == 0) return;
addToUndo(CSustainChange([
addToUndo(CEditSustains([
for(s in selection) {
if (s is CharterNote) {
var n:CharterNote = cast(s, CharterNote);
@@ -1245,12 +1256,13 @@ class Charter extends UIState {
}
enum CharterChange {
CCreateStrumLine(strumLineID:Int, strumLine:ChartStrumLine);
CDeleteStrumLine(strumLineID:Int, strumLine:ChartStrumLine);
CCreateSelection(selection:Selection);
CDeleteSelection(selection:Selection);
CSelectionDrag(selection:Selection, change:FlxPoint);
CSustainChange(notes:Array<NoteSustainChange>);
CCreateStrumLine(strumLineID:Int, strumLine:ChartStrumLine);
CDeleteStrumLine(strumLineID:Int, strumLine:ChartStrumLine);
CEditSustains(notes:Array<NoteSustainChange>);
CEditEvent(event:CharterEvent, oldEvents:Array<ChartEvent>, newEvents:Array<ChartEvent>);
}
enum CharterCopyboardObject {
@@ -19,14 +19,10 @@ class CharterEventAdd extends UISliceSprite {
public override function onHovered() {
super.onHovered();
if (FlxG.mouse.justReleased) {
if (curCharterEvent != null) {
Charter.instance.openSubState(new CharterEventScreen(curCharterEvent));
} else {
var event:CharterEvent = new CharterEvent(step, []);
Charter.instance.eventsGroup.add(event);
Charter.instance.openSubState(new CharterEventScreen(event));
}
if (curCharterEvent != null)
Charter.instance.openSubState(new CharterEventScreen(step, curCharterEvent));
else
Charter.instance.openSubState(new CharterEventScreen(step));
}
}
@@ -1,5 +1,6 @@
package funkin.editors.charter;
import funkin.backend.chart.ChartData.ChartEvent;
import funkin.backend.system.Conductor;
import flixel.group.FlxGroup;
import funkin.editors.charter.EventsData;
@@ -11,6 +12,9 @@ class CharterEventScreen extends UISubstateWindow {
public var cam:FlxCamera;
public var chartEvent:CharterEvent;
public var step:Float = 0;
public var events:Array<ChartEvent> = [];
public var iconsPanel:FlxGroup;
public var eventName:UIText;
@@ -22,13 +26,17 @@ class CharterEventScreen extends UISubstateWindow {
public var saveButton:UIButton;
public var deleteButton:UIButton;
public function new(chartEvent:CharterEvent) {
public function new(step:Float, ?chartEvent:Null<CharterEvent>) {
if (chartEvent != null) this.chartEvent = chartEvent;
this.step = step;
super();
this.chartEvent = chartEvent;
}
public override function create() {
winTitle = "Event group properties";
var creatingEvent:Bool = chartEvent == null;
if (creatingEvent) chartEvent = new CharterEvent(step, []);
winTitle = creatingEvent ? "Create Event Group" : "Edit Event Group";
winWidth = 960;
super.create();
@@ -36,6 +44,8 @@ class CharterEventScreen extends UISubstateWindow {
FlxG.sound.music.pause(); // prevent the song from continuing
Charter.instance.vocals.pause();
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();
@@ -46,12 +56,12 @@ class CharterEventScreen extends UISubstateWindow {
addButton = new UIButton(windowSpr.x + 1, windowSpr.y + 31, "", function() {
openSubState(new CharterEventTypeSelection(function(eventName) {
chartEvent.events.push({
events.push({
time: Conductor.getTimeForStep(chartEvent.step),
params: [],
name: eventName
});
changeTab(chartEvent.events.length-1);
changeTab(events.length-1);
}));
});
addButton.bWidth = addButton.bHeight = 30;
@@ -69,8 +79,22 @@ class CharterEventScreen extends UISubstateWindow {
saveCurTab();
chartEvent.refreshEventIcons();
if (chartEvent.events.length <= 0)
Charter.instance.eventsGroup.remove(chartEvent, true);
if (events.length <= 0)
Charter.instance.deleteSelection([chartEvent]);
else {
var oldEvents:Array<ChartEvent> = chartEvent.events.copy();
chartEvent.events = events;
if (creatingEvent)
Charter.instance.createSelection([chartEvent]);
else {
chartEvent.events = events;
chartEvent.refreshEventIcons();
Charter.instance.addToUndo(CEditEvent(chartEvent, oldEvents, events.copy()));
}
}
close();
Charter.instance.updateBPMEvents(chartEvent);
});
@@ -80,7 +104,7 @@ class CharterEventScreen extends UISubstateWindow {
deleteButton = new UIButton(saveButton.x - 10, saveButton.y, "Delete", function() {
if (curEvent >= 0) {
chartEvent.events.splice(curEvent, 1);
events.splice(curEvent, 1);
changeTab(curEvent, false);
}
});
@@ -106,9 +130,9 @@ class CharterEventScreen extends UISubstateWindow {
paramsPanel.remove(e);
}
if (id >= 0 && id < chartEvent.events.length) {
if (id >= 0 && id < events.length) {
curEvent = id;
var curEvent = chartEvent.events[curEvent];
var curEvent = events[curEvent];
eventName.text = curEvent.name;
// add new elements
var y:Float = eventName.y + eventName.height + 10;
@@ -176,7 +200,7 @@ class CharterEventScreen extends UISubstateWindow {
while(iconsPanel.members.length > 0)
iconsPanel.remove(iconsPanel.members[0], true).destroy();
for(k=>e in chartEvent.events) {
for(k=>e in events) {
var butt = new UIButton(windowSpr.x + 1, windowSpr.y + 66 + (k*30), "", function() {
changeTab(k);
});
@@ -197,10 +221,10 @@ class CharterEventScreen extends UISubstateWindow {
public function saveCurTab() {
if (curEvent < 0) return;
chartEvent.events[curEvent].params = [
events[curEvent].params = [
for(p in paramsFields) {
if (p is UIDropDown) {
var dataParams = EventsData.getEventParams(chartEvent.events[curEvent].name);
var dataParams = EventsData.getEventParams(events[curEvent].name);
if (dataParams[paramsFields.indexOf(p)].type == TStrumLine) cast(p, UIDropDown).index;
else cast(p, UIDropDown).label.text;
}