mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-27 10:05:41 -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 haxe.ui.focus.FocusManager;
|
||||||
import openfl.display.BitmapData;
|
import openfl.display.BitmapData;
|
||||||
import flixel.input.mouse.FlxMouseEvent;
|
import flixel.input.mouse.FlxMouseEvent;
|
||||||
|
import flixel.text.FlxText;
|
||||||
|
|
||||||
using Lambda;
|
using Lambda;
|
||||||
|
|
||||||
|
@ -726,7 +727,23 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
|
||||||
/**
|
/**
|
||||||
* The notes which are currently in the user's selection.
|
* 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.
|
* 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;
|
var healthIconBF:Null<HealthIcon> = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The text that pop's up when copying something
|
||||||
|
*/
|
||||||
|
var txtCopyNotif:Null<FlxText> = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The purple background sprite.
|
* The purple background sprite.
|
||||||
*/
|
*/
|
||||||
|
@ -2279,6 +2301,12 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
|
||||||
|
|
||||||
add(playbarHeadLayout);
|
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;
|
if (!Preferences.debugDisplay) menubar.paddingLeft = null;
|
||||||
|
|
||||||
this.setupNotifications();
|
this.setupNotifications();
|
||||||
|
@ -4471,7 +4499,48 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
|
||||||
// CTRL + C = Copy
|
// CTRL + C = Copy
|
||||||
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.C)
|
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.
|
// We don't need a command for this since we can't undo it.
|
||||||
SongDataUtils.writeItemsToClipboard(
|
SongDataUtils.writeItemsToClipboard(
|
||||||
{
|
{
|
||||||
|
@ -4507,7 +4576,14 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
|
||||||
}
|
}
|
||||||
|
|
||||||
// DELETE = Delete
|
// 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.
|
// Delete selected items.
|
||||||
if (currentNoteSelection.length > 0 && currentEventSelection.length > 0)
|
if (currentNoteSelection.length > 0 && currentEventSelection.length > 0)
|
||||||
|
|
|
@ -26,6 +26,7 @@ class ChartEditorNotePreview extends FlxSprite
|
||||||
static final UP_COLOR:FlxColor = 0xFF00CC00;
|
static final UP_COLOR:FlxColor = 0xFF00CC00;
|
||||||
static final RIGHT_COLOR:FlxColor = 0xFFCC1111;
|
static final RIGHT_COLOR:FlxColor = 0xFFCC1111;
|
||||||
static final EVENT_COLOR:FlxColor = 0xFF111111;
|
static final EVENT_COLOR:FlxColor = 0xFF111111;
|
||||||
|
static final SELECTED_COLOR:FlxColor = 0xFFFFFF00;
|
||||||
|
|
||||||
var previewHeight:Int;
|
var previewHeight:Int;
|
||||||
|
|
||||||
|
@ -57,11 +58,11 @@ class ChartEditorNotePreview extends FlxSprite
|
||||||
* @param note The data for the note.
|
* @param note The data for the note.
|
||||||
* @param songLengthInMs The total length of the song in milliseconds.
|
* @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 noteDir:Int = note.getDirection();
|
||||||
var mustHit:Bool = note.getStrumlineIndex() == 0;
|
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 notes The data for the notes.
|
||||||
* @param songLengthInMs The total length of the song in milliseconds.
|
* @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)
|
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 mustHit False if opponent, true if player.
|
||||||
* @param strumTimeInMs Time in milliseconds to strum the note.
|
* @param strumTimeInMs Time in milliseconds to strum the note.
|
||||||
* @param songLengthInMs Length of the song in milliseconds.
|
* @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)
|
var color:FlxColor = switch (dir)
|
||||||
{
|
{
|
||||||
|
@ -118,13 +120,20 @@ class ChartEditorNotePreview extends FlxSprite
|
||||||
default: EVENT_COLOR;
|
default: EVENT_COLOR;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var noteHeight:Int = NOTE_HEIGHT;
|
||||||
|
|
||||||
|
if (isSelection != null && isSelection)
|
||||||
|
{
|
||||||
|
color = SELECTED_COLOR;
|
||||||
|
noteHeight += 1;
|
||||||
|
}
|
||||||
|
|
||||||
var noteX:Float = NOTE_WIDTH * dir;
|
var noteX:Float = NOTE_WIDTH * dir;
|
||||||
if (mustHit) noteX += NOTE_WIDTH * 4;
|
if (mustHit) noteX += NOTE_WIDTH * 4;
|
||||||
if (dir == -1) noteX = NOTE_WIDTH * 8;
|
if (dir == -1) noteX = NOTE_WIDTH * 8;
|
||||||
|
|
||||||
var noteY:Float = FlxMath.remapToRange(strumTimeInMs, 0, songLengthInMs, 0, previewHeight);
|
var noteY:Float = FlxMath.remapToRange(strumTimeInMs, 0, songLengthInMs, 0, previewHeight);
|
||||||
|
drawRect(noteX, noteY, NOTE_WIDTH, noteHeight, color);
|
||||||
drawRect(noteX, noteY, NOTE_WIDTH, NOTE_HEIGHT, color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function eraseNote(dir:Int, mustHit:Bool, strumTimeInMs:Int, songLengthInMs:Int):Void
|
function eraseNote(dir:Int, mustHit:Bool, strumTimeInMs:Int, songLengthInMs:Int):Void
|
||||||
|
|
Loading…
Reference in a new issue