package funkin.ui.debug.charting.commands; import funkin.data.song.SongData.SongNoteData; import funkin.data.song.SongData.SongEventData; import funkin.data.song.SongDataUtils; /** * Deletes the given notes and events from the current chart in the chart editor. * Use only when BOTH notes and events are being deleted. */ @:nullSafety @:access(funkin.ui.debug.charting.ChartEditorState) class RemoveItemsCommand implements ChartEditorCommand { var notes:Array; var events:Array; public function new(notes:Array, events:Array) { this.notes = notes; this.events = events; } public function execute(state:ChartEditorState):Void { if ((notes.length + events.length) == 0) return; state.currentSongChartNoteData = SongDataUtils.subtractNotes(state.currentSongChartNoteData, notes); state.currentSongChartEventData = SongDataUtils.subtractEvents(state.currentSongChartEventData, events); state.currentNoteSelection = []; state.currentEventSelection = []; state.playSound(Paths.sound('chartingSounds/noteErase')); state.saveDataDirty = true; state.noteDisplayDirty = true; state.notePreviewDirty = true; state.sortChartData(); } public function undo(state:ChartEditorState):Void { if ((notes.length + events.length) == 0) return; for (note in notes) { state.currentSongChartNoteData.push(note); } for (event in events) { state.currentSongChartEventData.push(event); } state.currentNoteSelection = notes; state.currentEventSelection = events; state.playSound(Paths.sound('chartingSounds/undo')); state.saveDataDirty = true; state.noteDisplayDirty = true; state.notePreviewDirty = true; state.sortChartData(); } public function shouldAddToHistory(state:ChartEditorState):Bool { // This command is undoable. Add to the history if we actually performed an action. return (notes.length > 0 || events.length > 0); } public function toString():String { return 'Remove ${notes.length + events.length} Items'; } }