undoing and better pasting

This commit is contained in:
KadeDeveloper 2021-08-11 15:21:53 -07:00
parent 0dd0a059f5
commit 7f80d19765

View File

@ -1360,7 +1360,58 @@ class ChartingState extends MusicBeatState
} }
function pasteNotesFromArray(array:Array<Array<Dynamic>>,fromStrum:Bool = true)
{
for(i in array)
{
var strum:Float = i[0];
if (fromStrum)
strum += Conductor.songPosition;
var section = 0;
for(ii in _song.notes)
{
if (ii.startTime <= strum && ii.endTime > strum)
{
trace("new strum " + strum + " - at section " + section);
// alright we're in this section lets paste the note here.
var newData = [strum,i[1],i[2]];
ii.sectionNotes.push(newData);
var note:Note = new Note(strum, Math.floor(i[1] % 4),null,false,true);
note.rawNoteData = i[1];
note.sustainLength = i[2];
note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
note.updateHitbox();
note.x = Math.floor(i[1] * GRID_SIZE);
note.charterSelected = true;
note.y = Math.floor(getYfromStrum(strum) * zoomFactor);
var box = new ChartingBox(note.x,note.y,note);
selectedBoxes.add(box);
curRenderedNotes.add(note);
pastedNotes.push(note);
if (note.sustainLength > 0)
{
var sustainVis:FlxSprite = new FlxSprite(note.x + (GRID_SIZE / 2),
note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
note.noteCharterObject = sustainVis;
curRenderedSustains.add(sustainVis);
}
trace("section new length: " + ii.sectionNotes.length);
continue;
}
section++;
}
}
}
function loadSong(daSong:String):Void function loadSong(daSong:String):Void
{ {
if (FlxG.sound.music != null) if (FlxG.sound.music != null)
@ -1559,10 +1610,13 @@ class ChartingState extends MusicBeatState
public var copiedNotes:Array<Array<Dynamic>> = []; public var copiedNotes:Array<Array<Dynamic>> = [];
public var pastedNotes:Array<Note> = []; public var pastedNotes:Array<Note> = [];
public var deletedNotes:Array<Array<Dynamic>> = [];
public var selectInitialX:Float = 0; public var selectInitialX:Float = 0;
public var selectInitialY:Float = 0; public var selectInitialY:Float = 0;
public var lastAction:String = "";
override function update(elapsed:Float) override function update(elapsed:Float)
{ {
updateHeads(); updateHeads();
@ -1652,7 +1706,7 @@ class ChartingState extends MusicBeatState
claps.splice(0, claps.length); claps.splice(0, claps.length);
if (FlxG.keys.pressed.CONTROL) if (FlxG.keys.pressed.CONTROL && !waitingForRelease)
{ {
var amount = FlxG.mouse.wheel; var amount = FlxG.mouse.wheel;
@ -1773,9 +1827,11 @@ class ChartingState extends MusicBeatState
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.D) if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.D)
{ {
lastAction = "delete";
var notesToBeDeleted = []; var notesToBeDeleted = [];
for(i in 0...selectedBoxes.members.length) for(i in 0...selectedBoxes.members.length)
{ {
deletedNotes.push([selectedBoxes.members[i].connectedNote.strumTime,selectedBoxes.members[i].connectedNote.rawNoteData,selectedBoxes.members[i].connectedNote.sustainLength]);
notesToBeDeleted.push(selectedBoxes.members[i].connectedNote); notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
} }
@ -1787,9 +1843,11 @@ class ChartingState extends MusicBeatState
if (FlxG.keys.justPressed.DELETE) if (FlxG.keys.justPressed.DELETE)
{ {
lastAction = "delete";
var notesToBeDeleted = []; var notesToBeDeleted = [];
for(i in 0...selectedBoxes.members.length) for(i in 0...selectedBoxes.members.length)
{ {
deletedNotes.push([selectedBoxes.members[i].connectedNote.strumTime,selectedBoxes.members[i].connectedNote.rawNoteData,selectedBoxes.members[i].connectedNote.sustainLength]);
notesToBeDeleted.push(selectedBoxes.members[i].connectedNote); notesToBeDeleted.push(selectedBoxes.members[i].connectedNote);
} }
@ -1800,21 +1858,6 @@ class ChartingState extends MusicBeatState
} }
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.D)
{
for(i in 0...selectedBoxes.members.length)
{
deleteNote(selectedBoxes.members[i].connectedNote);
}
}
if (FlxG.keys.justPressed.DELETE)
{
for(i in 0...selectedBoxes.members.length)
{
deleteNote(selectedBoxes.members[i].connectedNote);
}
}
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.C) if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.C)
{ {
@ -1822,15 +1865,17 @@ class ChartingState extends MusicBeatState
{ {
copiedNotes = []; copiedNotes = [];
for(i in selectedBoxes.members) for(i in selectedBoxes.members)
copiedNotes.push([i.connectedNote.strumTime,i.connectedNote.noteData,i.connectedNote.sustainLength]); copiedNotes.push([i.connectedNote.strumTime,i.connectedNote.rawNoteData,i.connectedNote.sustainLength]);
var firstNote = copiedNotes[0][0]; var firstNote = copiedNotes[0][0];
for(i in copiedNotes) // normalize the notes for(i in copiedNotes) // normalize the notes
{ {
i[0] = i[0] - firstNote; i[0] = i[0] - firstNote;
trace("Normalized time: " + i[0]); trace("Normalized time: " + i[0] + " | " + i[1]);
} }
trace(copiedNotes.length);
} }
} }
@ -1845,49 +1890,38 @@ class ChartingState extends MusicBeatState
selectedBoxes.members.remove(selectedBoxes.members[0]); selectedBoxes.members.remove(selectedBoxes.members[0]);
} }
trace("Pasting " + copiedNotes.length);
for(i in copiedNotes) pasteNotesFromArray(copiedNotes);
{
for(ii in _song.notes)
{
var strum:Float = Conductor.songPosition + i[0];
if (ii.startTime <= strum && ii.endTime > strum)
{
trace("new strum " + strum);
// alright we're in this section lets paste the note here.
ii.sectionNotes.push(i);
var note:Note = new Note(strum, Math.floor(i[1] % 4),null,false,true); lastAction = "paste";
note.rawNoteData = i[1];
note.sustainLength = i[2];
note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
note.updateHitbox();
note.x = Math.floor(i[1] * GRID_SIZE);
note.charterSelected = true;
note.y = Math.floor(getYfromStrum(strum) * zoomFactor);
var box = new ChartingBox(note.x,note.y,note);
selectedBoxes.add(box);
curRenderedNotes.add(note);
pastedNotes.push(note);
if (note.sustainLength > 0)
{
var sustainVis:FlxSprite = new FlxSprite(note.x + (GRID_SIZE / 2),
note.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(note.strumTime + note.sustainLength) * zoomFactor) - note.y));
note.noteCharterObject = sustainVis;
curRenderedSustains.add(sustainVis);
}
continue;
} }
} }
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.Z)
{
switch(lastAction)
{
case "paste":
trace("undo paste");
if (pastedNotes.length != 0)
{
for(i in pastedNotes)
{
if (curRenderedNotes.members.contains(i))
deleteNote(i);
}
pastedNotes = [];
}
case "delete":
trace("undoing delete");
if (deletedNotes.length != 0)
{
trace("undoing delete");
pasteNotesFromArray(deletedNotes,false);
deletedNotes = [];
} }
} }
} }
@ -2311,17 +2345,6 @@ class ChartingState extends MusicBeatState
if (!typingShit.hasFocus) if (!typingShit.hasFocus)
{ {
if (FlxG.keys.pressed.CONTROL)
{
if (FlxG.keys.justPressed.Z && lastNote != null)
{
trace(curRenderedNotes.members.contains(lastNote) ? "delete note" : "add note");
if (curRenderedNotes.members.contains(lastNote))
deleteNote(lastNote);
else
addNote(lastNote);
}
}
var shiftThing:Int = 1; var shiftThing:Int = 1;
if (FlxG.keys.pressed.SHIFT) if (FlxG.keys.pressed.SHIFT)
@ -2409,24 +2432,23 @@ class ChartingState extends MusicBeatState
{ {
curSelectedNote[2] += value; curSelectedNote[2] += value;
curSelectedNote[2] = Math.max(curSelectedNote[2], 0); curSelectedNote[2] = Math.max(curSelectedNote[2], 0);
}
}
updateNoteUI(); if (curSelectedNoteObject.noteCharterObject != null)
if (curSelectedNoteObject.sustainLength == 0) curRenderedSustains.remove(curSelectedNoteObject.noteCharterObject);
{
var sustainVis:FlxSprite = new FlxSprite(curSelectedNoteObject.x + (GRID_SIZE / 2), var sustainVis:FlxSprite = new FlxSprite(curSelectedNoteObject.x + (GRID_SIZE / 2),
curSelectedNoteObject.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(curSelectedNoteObject.strumTime + curSelectedNote[2]) * zoomFactor) - curSelectedNoteObject.y)); curSelectedNoteObject.y + GRID_SIZE).makeGraphic(8, Math.floor((getYfromStrum(curSelectedNoteObject.strumTime + curSelectedNote[2]) * zoomFactor) - curSelectedNoteObject.y));
curSelectedNoteObject.sustainLength = curSelectedNote[2];
trace("new sustain " + curSelectedNoteObject.sustainLength);
curSelectedNoteObject.noteCharterObject = sustainVis; curSelectedNoteObject.noteCharterObject = sustainVis;
curRenderedSustains.add(sustainVis); curRenderedSustains.add(sustainVis);
} }
else
{
curSelectedNoteObject.noteCharterObject.height = Math.floor((getYfromStrum(curSelectedNoteObject.strumTime + curSelectedNote[2]) * zoomFactor) - curSelectedNoteObject.y);
} }
updateNoteUI();
} }
function resetSection(songBeginning:Bool = false):Void function resetSection(songBeginning:Bool = false):Void
@ -2715,9 +2737,10 @@ class ChartingState extends MusicBeatState
for(i in 0...selectedBoxes.members.length) for(i in 0...selectedBoxes.members.length)
{ {
var box = selectedBoxes.members[i]; var box = selectedBoxes.members[i];
if (box.x == note.x && box.y == note.y) if (box.connectedNote == note)
{ {
selectedBoxes.members.remove(box); selectedBoxes.members.remove(box);
box.destroy();
return; return;
} }
} }
@ -2970,7 +2993,7 @@ class ChartingState extends MusicBeatState
else else
{ {
var note:Note = new Note(n.strumTime, n.noteData % 4,null,false,true); var note:Note = new Note(n.strumTime, n.noteData % 4,null,false,true);
note.rawNoteData = noteData; note.rawNoteData = n.noteData;
note.sustainLength = noteSus; note.sustainLength = noteSus;
note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE)); note.setGraphicSize(Math.floor(GRID_SIZE), Math.floor(GRID_SIZE));
note.updateHitbox(); note.updateHitbox();