Merge branch 'rewrite/master' of github.com:FunkinCrew/Funkin-secret into icon-charswitcher

This commit is contained in:
Cameron Taylor 2023-12-13 09:20:11 -05:00
commit 6ca0e32391
2 changed files with 95 additions and 10 deletions

View file

@ -120,6 +120,7 @@ import haxe.ui.events.UIEvent;
import haxe.ui.focus.FocusManager;
import openfl.display.BitmapData;
import flixel.input.mouse.FlxMouseEvent;
import flixel.text.FlxText;
using Lambda;
@ -726,7 +727,23 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
/**
* The notes which are currently in the user's selection.
*/
var currentNoteSelection:Array<SongNoteData> = [];
var currentNoteSelection(default, set):Array<SongNoteData> = [];
function set_currentNoteSelection(value:Array<SongNoteData>):Array<SongNoteData>
{
currentNoteSelection = value;
if (currentNoteSelection.length > 0)
{
notePreview.addNotes(currentNoteSelection, Std.int(songLengthInMs), true);
}
else
{
notePreviewDirty = true;
}
return currentNoteSelection;
}
/**
* The events which are currently in the user's selection.
@ -1624,6 +1641,11 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
*/
var healthIconBF:Null<HealthIcon> = null;
/**
* The text that pop's up when copying something
*/
var txtCopyNotif:Null<FlxText> = null;
/**
* The purple background sprite.
*/
@ -2279,6 +2301,12 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
add(playbarHeadLayout);
txtCopyNotif = new FlxText(0, 0, 0, '', 24);
txtCopyNotif.setBorderStyle(OUTLINE, 0xFF074809, 1);
txtCopyNotif.color = 0xFF52FF77;
txtCopyNotif.zIndex = 120;
add(txtCopyNotif);
if (!Preferences.debugDisplay) menubar.paddingLeft = null;
this.setupNotifications();
@ -4471,7 +4499,48 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
// CTRL + C = Copy
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.C)
{
// Copy selected notes.
if (currentNoteSelection.length > 0)
{
txtCopyNotif.visible = true;
txtCopyNotif.text = "Copied " + currentNoteSelection.length + " notes to clipboard";
txtCopyNotif.x = FlxG.mouse.x - (txtCopyNotif.width / 2);
txtCopyNotif.y = FlxG.mouse.y - 16;
FlxTween.tween(txtCopyNotif, {y: txtCopyNotif.y - 32}, 0.5,
{
type: FlxTween.ONESHOT,
ease: FlxEase.quadOut,
onComplete: function(_) {
txtCopyNotif.visible = false;
}
});
for (note in renderedNotes.members)
{
if (isNoteSelected(note.noteData))
{
FlxTween.globalManager.cancelTweensOf(note);
FlxTween.globalManager.cancelTweensOf(note.scale);
note.playNoteAnimation();
var prevX:Float = note.scale.x;
var prevY:Float = note.scale.y;
note.scale.x *= 1.2;
note.scale.y *= 1.2;
note.angle = FlxG.random.bool() ? -10 : 10;
FlxTween.tween(note, {"angle": 0}, 0.8, {ease: FlxEase.elasticOut});
FlxTween.tween(note.scale, {"y": prevX, "x": prevY}, 0.7,
{
ease: FlxEase.elasticOut,
onComplete: function(_) {
note.playNoteAnimation();
}
});
}
}
}
// We don't need a command for this since we can't undo it.
SongDataUtils.writeItemsToClipboard(
{
@ -4507,7 +4576,14 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
}
// DELETE = Delete
if (FlxG.keys.justPressed.DELETE)
var delete:Bool = FlxG.keys.justPressed.DELETE;
// on macbooks, Delete == backspace
#if mac
delete = delete || FlxG.keys.justPressed.BACKSPACE;
#end
if (delete)
{
// Delete selected items.
if (currentNoteSelection.length > 0 && currentEventSelection.length > 0)

View file

@ -26,6 +26,7 @@ class ChartEditorNotePreview extends FlxSprite
static final UP_COLOR:FlxColor = 0xFF00CC00;
static final RIGHT_COLOR:FlxColor = 0xFFCC1111;
static final EVENT_COLOR:FlxColor = 0xFF111111;
static final SELECTED_COLOR:FlxColor = 0xFFFFFF00;
var previewHeight:Int;
@ -57,11 +58,11 @@ class ChartEditorNotePreview extends FlxSprite
* @param note The data for the note.
* @param songLengthInMs The total length of the song in milliseconds.
*/
public function addNote(note:SongNoteData, songLengthInMs:Int):Void
public function addNote(note:SongNoteData, songLengthInMs:Int, ?isSelection:Bool = false):Void
{
var noteDir:Int = note.getDirection();
var mustHit:Bool = note.getStrumlineIndex() == 0;
drawNote(noteDir, mustHit, Std.int(note.time), songLengthInMs);
drawNote(noteDir, mustHit, Std.int(note.time), songLengthInMs, isSelection);
}
/**
@ -79,11 +80,11 @@ class ChartEditorNotePreview extends FlxSprite
* @param notes The data for the notes.
* @param songLengthInMs The total length of the song in milliseconds.
*/
public function addNotes(notes:Array<SongNoteData>, songLengthInMs:Int):Void
public function addNotes(notes:Array<SongNoteData>, songLengthInMs:Int, ?isSelection:Bool = false):Void
{
for (note in notes)
{
addNote(note, songLengthInMs);
addNote(note, songLengthInMs, isSelection);
}
}
@ -106,8 +107,9 @@ class ChartEditorNotePreview extends FlxSprite
* @param mustHit False if opponent, true if player.
* @param strumTimeInMs Time in milliseconds to strum the note.
* @param songLengthInMs Length of the song in milliseconds.
* @param isSelection If current note is selected note, which then it's forced to be green
*/
function drawNote(dir:Int, mustHit:Bool, strumTimeInMs:Int, songLengthInMs:Int):Void
public function drawNote(dir:Int, mustHit:Bool, strumTimeInMs:Int, songLengthInMs:Int, ?isSelection:Bool = false):Void
{
var color:FlxColor = switch (dir)
{
@ -118,13 +120,20 @@ class ChartEditorNotePreview extends FlxSprite
default: EVENT_COLOR;
};
var noteHeight:Int = NOTE_HEIGHT;
if (isSelection != null && isSelection)
{
color = SELECTED_COLOR;
noteHeight += 1;
}
var noteX:Float = NOTE_WIDTH * dir;
if (mustHit) noteX += NOTE_WIDTH * 4;
if (dir == -1) noteX = NOTE_WIDTH * 8;
var noteY:Float = FlxMath.remapToRange(strumTimeInMs, 0, songLengthInMs, 0, previewHeight);
drawRect(noteX, noteY, NOTE_WIDTH, NOTE_HEIGHT, color);
drawRect(noteX, noteY, NOTE_WIDTH, noteHeight, color);
}
function eraseNote(dir:Int, mustHit:Bool, strumTimeInMs:Int, songLengthInMs:Int):Void