diff --git a/source/funkin/states/editors/ChartingState.hx b/source/funkin/states/editors/ChartingState.hx index d40422a1..220390b3 100644 --- a/source/funkin/states/editors/ChartingState.hx +++ b/source/funkin/states/editors/ChartingState.hx @@ -368,12 +368,13 @@ class ChartingState extends MusicBeatState { } public function removeNote(note:ChartNote) { - var data = mainGrid.getObjectData(note); - if (data == selectedNote || note == selectedNoteObject) { - deselectNote(); + if (note.chartData != null) { + if (note.chartData == selectedNote || note == selectedNoteObject) { + deselectNote(); + } + SONG.notes[sectionIndex].sectionNotes.remove(note.chartData); + mainGrid.clearObject(note); } - SONG.notes[sectionIndex].sectionNotes.remove(data); - mainGrid.clearObject(note); } public var selectedEvent:Array = null; @@ -419,10 +420,6 @@ class ChartingState extends MusicBeatState { return values; } - /* public function setEventDatas(newData:Array<{name:String, values:Array}>) { - if (selectedEvent == null || selectedEventObject == null) return; - }*/ - public function setEventData(newData:Array, name:String) { if (selectedEvent == null || selectedEventObject == null) return; selectedEvent[1] = name; @@ -434,13 +431,14 @@ class ChartingState extends MusicBeatState { } public function removeEvent(event:ChartEvent) { - var data = eventsGrid.getObjectData(event); - if (data == selectedEvent || event == selectedEventObject) { - eventID = 0; - tabs.updateEventTxt(); - deselectEvent(); + for (data in event.chartData) { + if (data == selectedEvent || event == selectedEventObject) { + eventID = 0; + tabs.updateEventTxt(); + deselectEvent(); + } + SONG.notes[sectionIndex].sectionEvents.remove(data); } - SONG.notes[sectionIndex].sectionEvents.remove(data); eventsGrid.clearObject(event); } diff --git a/source/funkin/states/editors/chart/ChartGridBase.hx b/source/funkin/states/editors/chart/ChartGridBase.hx index f970cc6d..38cf308e 100644 --- a/source/funkin/states/editors/chart/ChartGridBase.hx +++ b/source/funkin/states/editors/chart/ChartGridBase.hx @@ -88,16 +88,6 @@ class ChartGridBase extends FlxTypedGroup { FlxArrayUtil.clearArray(curSecContent); } - public function getObjectData(obj:Dynamic):Array { - for (i in (isNote ? sectionData.sectionNotes : sectionData.sectionEvents)) { - if (Math.floor(obj.strumTime) == Math.floor(i[0])) { // Same strum time - if (!isNote || i[1] == obj.gridNoteData) // Notedata check for notes - return i; - } - } - return null; - } - public function getDataObject(data:Array):Dynamic { for (i in objectsGroup) { if (Math.floor(i.strumTime) == Math.floor(data[0])) { // Same strum time @@ -109,7 +99,7 @@ class ChartGridBase extends FlxTypedGroup { } public function updateObject(obj:Dynamic, ?data:Array) { - final _data = data ?? getObjectData(obj); + final _data = data ?? obj.chartData; clearObject(obj); drawObject(_data); } @@ -152,6 +142,7 @@ class ChartNoteGrid extends ChartGridBase { final _note:ChartNote = objectsGroup.recycle(ChartNote); _note.init(strumTime, noteData, gridPos.x, gridPos.y, 0, typeData.skin); + _note.chartData = note; var susNote:ChartNote = null; if (susLength > 0) { @@ -219,6 +210,7 @@ class ChartNote extends Note { public var gridNoteData:Int = 0; public var txt:FunkinText = null; public var startInit:Bool = false; + public var chartData:Array = null; public function init(_time, _data, _xPos, _yPos, _sus, _skin, forceSus = false, ?_parent:Note) { strumTime = _time; @@ -256,6 +248,8 @@ class ChartNote extends Note { } } +typedef EventData = Array; + class ChartEventGrid extends ChartGridBase { public var group:FlxTypedGroup; @@ -266,15 +260,15 @@ class ChartEventGrid extends ChartGridBase { final gridY = grid.y + Math.floor(ChartingState.getTimeY(strumTime - sectionTime)); final _event:ChartEvent = objectsGroup.recycle(ChartEvent); - _event.init(strumTime, [eventName], [eventValues], new FlxPoint(grid.x, gridY)); + _event.init(strumTime, [eventName], [eventValues], new FlxPoint(grid.x, gridY), [event]); objectsGroup.add(_event); return _event; } - function drawPackedObject(strumTime:Float = 0, events:Array) { + function drawPackedObject(strumTime:Float = 0, events:Array) { final eventNames:Array = []; - final eventValues:Array> = []; + final eventValues:Array = []; for (i in events) { eventNames.push(i[1]); @@ -284,7 +278,7 @@ class ChartEventGrid extends ChartGridBase { var gridY = grid.y + Math.floor(ChartingState.getTimeY(strumTime - sectionTime)); final _event:ChartEvent = objectsGroup.recycle(ChartEvent); - _event.init(strumTime, eventNames, eventValues, new FlxPoint(grid.x, gridY)); + _event.init(strumTime, eventNames, eventValues, new FlxPoint(grid.x, gridY), events); objectsGroup.add(_event); return _event; @@ -300,7 +294,7 @@ class ChartEventGrid extends ChartGridBase { return; var packedEvents:Bool = false; - final eventsMap:Map>> = []; + final eventsMap:Map> = []; for (i in value.sectionEvents) { final time = Math.floor(i[0]); final arr = eventsMap.get(time) ?? []; @@ -326,6 +320,7 @@ class ChartEventGrid extends ChartGridBase { class ChartEvent extends FlxTypedSpriteGroup { public var data:Array = []; + public var chartData:Array = []; public var names:Array = []; public var sprite:FlxSpriteExt; @@ -363,7 +358,7 @@ class ChartEvent extends FlxTypedSpriteGroup { img = image; } - public function arrayString(array:Array) { + public function arrayString(array:EventData) { var s:String = "["; for (i in 0...array.length) { s += Std.string(array[i]); @@ -379,14 +374,16 @@ class ChartEvent extends FlxTypedSpriteGroup { text.offset.set(text.width, -GRID_SIZE * 0.5 + text.height * 0.5); } - public function init(strumTime:Float, names:Array, values:Array>, position:FlxPoint) { + public function init(strumTime:Float, names:Array, values:Array>, position:FlxPoint, events:Array) { setPosition(position.x,position.y); this.strumTime = strumTime; FlxArrayUtil.clearArray(data); FlxArrayUtil.clearArray(this.names); + FlxArrayUtil.clearArray(this.chartData); for (i in 0...values.length) { + chartData.push(events[i]); if (data[i] == null) data.push(new Event(strumTime, names[i] ?? "NULL", values[i])); else data[i].set(strumTime, names[i] ?? "NULL", values[i]); }