mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-27 01:55:52 -05:00
Working Input Style, note snapping in menu, W/S to scroll
This commit is contained in:
parent
ed6bc553ed
commit
6c99f7161d
2 changed files with 91 additions and 42 deletions
2
assets
2
assets
|
@ -1 +1 @@
|
||||||
Subproject commit a62e7e50d59c14d256c75da651b79dea77e1620e
|
Subproject commit 3805b746cece5dd8a04c6ba0045d43136ac75753
|
|
@ -690,6 +690,16 @@ class ChartEditorState extends HaxeUIState
|
||||||
*/
|
*/
|
||||||
var downKeyHandler:TurboKeyHandler = TurboKeyHandler.build(FlxKey.DOWN);
|
var downKeyHandler:TurboKeyHandler = TurboKeyHandler.build(FlxKey.DOWN);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variable used to track how long the user has been holding the W keybind.
|
||||||
|
*/
|
||||||
|
var wKeyHandler:TurboKeyHandler = TurboKeyHandler.build(FlxKey.W);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variable used to track how long the user has been holding the S keybind.
|
||||||
|
*/
|
||||||
|
var sKeyHandler:TurboKeyHandler = TurboKeyHandler.build(FlxKey.S);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Variable used to track how long the user has been holding the page-up keybind.
|
* Variable used to track how long the user has been holding the page-up keybind.
|
||||||
*/
|
*/
|
||||||
|
@ -1659,16 +1669,20 @@ class ChartEditorState extends HaxeUIState
|
||||||
|
|
||||||
addUIClickListener('menubarItemSelectNone', _ -> performCommand(new DeselectAllItemsCommand(currentNoteSelection, currentEventSelection)));
|
addUIClickListener('menubarItemSelectNone', _ -> performCommand(new DeselectAllItemsCommand(currentNoteSelection, currentEventSelection)));
|
||||||
|
|
||||||
// TODO: Implement these.
|
|
||||||
// addUIClickListener('menubarItemSelectRegion', _ -> doSomething());
|
|
||||||
// addUIClickListener('menubarItemSelectBeforeCursor', _ -> doSomething());
|
|
||||||
// addUIClickListener('menubarItemSelectAfterCursor', _ -> doSomething());
|
|
||||||
|
|
||||||
addUIClickListener('menubarItemPlaytestFull', _ -> testSongInPlayState(false));
|
addUIClickListener('menubarItemPlaytestFull', _ -> testSongInPlayState(false));
|
||||||
addUIClickListener('menubarItemPlaytestMinimal', _ -> testSongInPlayState(true));
|
addUIClickListener('menubarItemPlaytestMinimal', _ -> testSongInPlayState(true));
|
||||||
|
|
||||||
addUIChangeListener('menubarItemInputStyleGroup', function(event:UIEvent) {
|
addUIClickListener('menuBarItemNoteSnapDecrease', _ -> noteSnapQuantIndex--);
|
||||||
trace('Change input style: ${event.target}');
|
addUIClickListener('menuBarItemNoteSnapIncrease', _ -> noteSnapQuantIndex++);
|
||||||
|
|
||||||
|
addUIChangeListener('menuBarItemInputStyleNone', function(event:UIEvent) {
|
||||||
|
currentLiveInputStyle = None;
|
||||||
|
});
|
||||||
|
addUIChangeListener('menuBarItemInputStyleNumberKeys', function(event:UIEvent) {
|
||||||
|
currentLiveInputStyle = NumberKeys;
|
||||||
|
});
|
||||||
|
addUIChangeListener('menuBarItemInputStyleWASD', function(event:UIEvent) {
|
||||||
|
currentLiveInputStyle = WASD;
|
||||||
});
|
});
|
||||||
|
|
||||||
addUIClickListener('menubarItemAbout', _ -> ChartEditorDialogHandler.openAboutDialog(this));
|
addUIClickListener('menubarItemAbout', _ -> ChartEditorDialogHandler.openAboutDialog(this));
|
||||||
|
@ -1769,6 +1783,8 @@ class ChartEditorState extends HaxeUIState
|
||||||
add(redoKeyHandler);
|
add(redoKeyHandler);
|
||||||
add(upKeyHandler);
|
add(upKeyHandler);
|
||||||
add(downKeyHandler);
|
add(downKeyHandler);
|
||||||
|
add(wKeyHandler);
|
||||||
|
add(sKeyHandler);
|
||||||
add(pageUpKeyHandler);
|
add(pageUpKeyHandler);
|
||||||
add(pageDownKeyHandler);
|
add(pageDownKeyHandler);
|
||||||
}
|
}
|
||||||
|
@ -1901,13 +1917,26 @@ class ChartEditorState extends HaxeUIState
|
||||||
}
|
}
|
||||||
|
|
||||||
// Up Arrow = Scroll Up
|
// Up Arrow = Scroll Up
|
||||||
if (upKeyHandler.activated && currentLiveInputStyle != LiveInputStyle.WASD)
|
if (upKeyHandler.activated && currentLiveInputStyle == None)
|
||||||
{
|
{
|
||||||
scrollAmount = -GRID_SIZE * 0.25 * 5.0;
|
scrollAmount = -GRID_SIZE * 0.25 * 5.0;
|
||||||
shouldPause = true;
|
shouldPause = true;
|
||||||
}
|
}
|
||||||
// Down Arrow = Scroll Down
|
// Down Arrow = Scroll Down
|
||||||
if (downKeyHandler.activated && currentLiveInputStyle != LiveInputStyle.WASD)
|
if (downKeyHandler.activated && currentLiveInputStyle == None)
|
||||||
|
{
|
||||||
|
scrollAmount = GRID_SIZE * 0.25 * 5.0;
|
||||||
|
shouldPause = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// W = Scroll Up (doesn't work with Ctrl+Scroll)
|
||||||
|
if (wKeyHandler.activated && currentLiveInputStyle == None && !FlxG.keys.pressed.CONTROL)
|
||||||
|
{
|
||||||
|
scrollAmount = -GRID_SIZE * 0.25 * 5.0;
|
||||||
|
shouldPause = true;
|
||||||
|
}
|
||||||
|
// S = Scroll Down (doesn't work with Ctrl+Scroll)
|
||||||
|
if (sKeyHandler.activated && currentLiveInputStyle == None && !FlxG.keys.pressed.CONTROL)
|
||||||
{
|
{
|
||||||
scrollAmount = GRID_SIZE * 0.25 * 5.0;
|
scrollAmount = GRID_SIZE * 0.25 * 5.0;
|
||||||
shouldPause = true;
|
shouldPause = true;
|
||||||
|
@ -2045,14 +2074,17 @@ class ChartEditorState extends HaxeUIState
|
||||||
|
|
||||||
function handleSnap():Void
|
function handleSnap():Void
|
||||||
{
|
{
|
||||||
if (FlxG.keys.justPressed.LEFT && !FlxG.keys.pressed.CONTROL)
|
if (currentLiveInputStyle == None)
|
||||||
{
|
{
|
||||||
noteSnapQuantIndex--;
|
if (FlxG.keys.justPressed.LEFT && !FlxG.keys.pressed.CONTROL)
|
||||||
}
|
{
|
||||||
|
noteSnapQuantIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.RIGHT && !FlxG.keys.pressed.CONTROL)
|
if (FlxG.keys.justPressed.RIGHT && !FlxG.keys.pressed.CONTROL)
|
||||||
{
|
{
|
||||||
noteSnapQuantIndex++;
|
noteSnapQuantIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3111,13 +3143,17 @@ class ChartEditorState extends HaxeUIState
|
||||||
*/
|
*/
|
||||||
function handleViewKeybinds():Void
|
function handleViewKeybinds():Void
|
||||||
{
|
{
|
||||||
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.LEFT)
|
if (currentLiveInputStyle == None)
|
||||||
{
|
{
|
||||||
incrementDifficulty(-1);
|
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.LEFT)
|
||||||
}
|
{
|
||||||
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.RIGHT)
|
incrementDifficulty(-1);
|
||||||
{
|
}
|
||||||
incrementDifficulty(1);
|
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.RIGHT)
|
||||||
|
{
|
||||||
|
incrementDifficulty(1);
|
||||||
|
}
|
||||||
|
// Would bind Ctrl+A and Ctrl+D here, but they are already bound to Select All and Select None.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3756,25 +3792,26 @@ class ChartEditorState extends HaxeUIState
|
||||||
switch (currentLiveInputStyle)
|
switch (currentLiveInputStyle)
|
||||||
{
|
{
|
||||||
case LiveInputStyle.WASD:
|
case LiveInputStyle.WASD:
|
||||||
if (FlxG.keys.justPressed.A) placeNoteAtPlayhead(0);
|
if (FlxG.keys.justPressed.A) placeNoteAtPlayhead(4);
|
||||||
if (FlxG.keys.justPressed.S) placeNoteAtPlayhead(1);
|
if (FlxG.keys.justPressed.S) placeNoteAtPlayhead(5);
|
||||||
if (FlxG.keys.justPressed.W) placeNoteAtPlayhead(2);
|
if (FlxG.keys.justPressed.W) placeNoteAtPlayhead(6);
|
||||||
if (FlxG.keys.justPressed.D) placeNoteAtPlayhead(3);
|
if (FlxG.keys.justPressed.D) placeNoteAtPlayhead(7);
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.LEFT) placeNoteAtPlayhead(4);
|
if (FlxG.keys.justPressed.LEFT) placeNoteAtPlayhead(0);
|
||||||
if (FlxG.keys.justPressed.DOWN) placeNoteAtPlayhead(5);
|
if (FlxG.keys.justPressed.DOWN) placeNoteAtPlayhead(1);
|
||||||
if (FlxG.keys.justPressed.UP) placeNoteAtPlayhead(6);
|
if (FlxG.keys.justPressed.UP) placeNoteAtPlayhead(2);
|
||||||
if (FlxG.keys.justPressed.RIGHT) placeNoteAtPlayhead(7);
|
if (FlxG.keys.justPressed.RIGHT) placeNoteAtPlayhead(3);
|
||||||
case LiveInputStyle.NumberKeys:
|
case LiveInputStyle.NumberKeys:
|
||||||
if (FlxG.keys.justPressed.ONE) placeNoteAtPlayhead(0);
|
// Flipped because Dad is on the left but represents data 0-3.
|
||||||
if (FlxG.keys.justPressed.TWO) placeNoteAtPlayhead(1);
|
if (FlxG.keys.justPressed.ONE) placeNoteAtPlayhead(4);
|
||||||
if (FlxG.keys.justPressed.THREE) placeNoteAtPlayhead(2);
|
if (FlxG.keys.justPressed.TWO) placeNoteAtPlayhead(5);
|
||||||
if (FlxG.keys.justPressed.FOUR) placeNoteAtPlayhead(3);
|
if (FlxG.keys.justPressed.THREE) placeNoteAtPlayhead(6);
|
||||||
|
if (FlxG.keys.justPressed.FOUR) placeNoteAtPlayhead(7);
|
||||||
|
|
||||||
if (FlxG.keys.justPressed.FIVE) placeNoteAtPlayhead(4);
|
if (FlxG.keys.justPressed.FIVE) placeNoteAtPlayhead(0);
|
||||||
if (FlxG.keys.justPressed.SIX) placeNoteAtPlayhead(5);
|
if (FlxG.keys.justPressed.SIX) placeNoteAtPlayhead(1);
|
||||||
if (FlxG.keys.justPressed.SEVEN) placeNoteAtPlayhead(6);
|
if (FlxG.keys.justPressed.SEVEN) placeNoteAtPlayhead(2);
|
||||||
if (FlxG.keys.justPressed.EIGHT) placeNoteAtPlayhead(7);
|
if (FlxG.keys.justPressed.EIGHT) placeNoteAtPlayhead(3);
|
||||||
case LiveInputStyle.None:
|
case LiveInputStyle.None:
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
}
|
}
|
||||||
|
@ -3783,12 +3820,24 @@ class ChartEditorState extends HaxeUIState
|
||||||
function placeNoteAtPlayhead(column:Int):Void
|
function placeNoteAtPlayhead(column:Int):Void
|
||||||
{
|
{
|
||||||
var playheadPos:Float = scrollPositionInPixels + playheadPositionInPixels;
|
var playheadPos:Float = scrollPositionInPixels + playheadPositionInPixels;
|
||||||
var playheadPosFractionalStep:Float = playheadPos / GRID_SIZE / (16 / noteSnapQuant);
|
var playheadPosFractionalStep:Float = playheadPos / GRID_SIZE / noteSnapRatio;
|
||||||
var playheadPosStep:Int = Std.int(Math.floor(playheadPosFractionalStep));
|
var playheadPosStep:Int = Std.int(Math.floor(playheadPosFractionalStep));
|
||||||
var playheadPosMs:Float = playheadPosStep * Conductor.stepLengthMs * (16 / noteSnapQuant);
|
var playheadPosSnappedMs:Float = playheadPosStep * Conductor.stepLengthMs * noteSnapRatio;
|
||||||
|
|
||||||
var newNoteData:SongNoteData = new SongNoteData(playheadPosMs, column, 0, selectedNoteKind);
|
// Look for notes within 1 step of the playhead.
|
||||||
performCommand(new AddNotesCommand([newNoteData], FlxG.keys.pressed.CONTROL));
|
var notesAtPos:Array<SongNoteData> = SongDataUtils.getNotesInTimeRange(currentSongChartNoteData, playheadPosSnappedMs,
|
||||||
|
playheadPosSnappedMs + Conductor.stepLengthMs * noteSnapRatio);
|
||||||
|
notesAtPos = SongDataUtils.getNotesWithData(notesAtPos, [column]);
|
||||||
|
|
||||||
|
if (notesAtPos.length == 0)
|
||||||
|
{
|
||||||
|
var newNoteData:SongNoteData = new SongNoteData(playheadPosSnappedMs, column, 0, selectedNoteKind);
|
||||||
|
performCommand(new AddNotesCommand([newNoteData], FlxG.keys.pressed.CONTROL));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
trace('Already a note there.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_scrollPositionInPixels(value:Float):Float
|
function set_scrollPositionInPixels(value:Float):Float
|
||||||
|
|
Loading…
Reference in a new issue