mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-27 01:55:52 -05:00
Merge branch 'rewrite/master' of github.com:FunkinCrew/Funkin-secret into icon-charswitcher
This commit is contained in:
commit
6ca0e32391
2 changed files with 95 additions and 10 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue