mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2025-03-28 04:50:01 +00:00
WIP on improving the difficulty toolbox
This commit is contained in:
parent
9c7aec4485
commit
d03a2f0157
|
@ -722,11 +722,38 @@ class ChartEditorState extends HaxeUIState
|
||||||
*/
|
*/
|
||||||
var songMetadata:Map<String, SongMetadata>;
|
var songMetadata:Map<String, SongMetadata>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the list of variations for the current song.
|
||||||
|
*/
|
||||||
var availableVariations(get, null):Array<String>;
|
var availableVariations(get, null):Array<String>;
|
||||||
|
|
||||||
function get_availableVariations():Array<String>
|
function get_availableVariations():Array<String>
|
||||||
{
|
{
|
||||||
return [for (x in songMetadata.keys()) x];
|
var variations:Array<String> = [for (x in songMetadata.keys()) x];
|
||||||
|
variations.sort(SortUtil.defaultThenAlphabetically.bind('default'));
|
||||||
|
return variations;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the list of difficulties for the current variation of the current song.
|
||||||
|
* ONLY CONTAINS DIFFICULTIES FOR THE CURRENT VARIATION so if on the default variation, erect/nightmare won't be included.
|
||||||
|
*/
|
||||||
|
var availableDifficulties(get, null):Array<String>;
|
||||||
|
|
||||||
|
function get_availableDifficulties():Array<String>
|
||||||
|
{
|
||||||
|
return songMetadata.get(selectedVariation).playData.difficulties;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the list of difficulties for ALL variations of the current song.
|
||||||
|
*/
|
||||||
|
var allDifficulties(get, null):Array<String>;
|
||||||
|
|
||||||
|
function get_allDifficulties():Array<String>
|
||||||
|
{
|
||||||
|
var result:Array<Array<String>> = [for (x in availableVariations) songMetadata.get(x).playData.difficulties];
|
||||||
|
return result.flatten();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -976,6 +1003,11 @@ class ChartEditorState extends HaxeUIState
|
||||||
return playableCharData.opponent = value;
|
return playableCharData.opponent = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SIGNALS
|
||||||
|
*/
|
||||||
|
// ==============================
|
||||||
|
// public var onDifficultyChange(default, null):FlxTypedSignal<ChartEditorState->Void> = new FlxTypedSignal<ChartEditorState->Void>();
|
||||||
/**
|
/**
|
||||||
* RENDER OBJECTS
|
* RENDER OBJECTS
|
||||||
*/
|
*/
|
||||||
|
@ -1247,7 +1279,6 @@ class ChartEditorState extends HaxeUIState
|
||||||
var height:Int = FlxG.height - MENU_BAR_HEIGHT - GRID_TOP_PAD - 200;
|
var height:Int = FlxG.height - MENU_BAR_HEIGHT - GRID_TOP_PAD - 200;
|
||||||
notePreview = new ChartEditorNotePreview(height);
|
notePreview = new ChartEditorNotePreview(height);
|
||||||
notePreview.y = MENU_BAR_HEIGHT + GRID_TOP_PAD;
|
notePreview.y = MENU_BAR_HEIGHT + GRID_TOP_PAD;
|
||||||
// TODO: Re-enable.
|
|
||||||
// add(notePreview);
|
// add(notePreview);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1438,6 +1469,9 @@ class ChartEditorState extends HaxeUIState
|
||||||
addUIChangeListener('menubarItemDownscroll', event -> isViewDownscroll = event.value);
|
addUIChangeListener('menubarItemDownscroll', event -> isViewDownscroll = event.value);
|
||||||
setUICheckboxSelected('menubarItemDownscroll', isViewDownscroll);
|
setUICheckboxSelected('menubarItemDownscroll', isViewDownscroll);
|
||||||
|
|
||||||
|
addUIClickListener('menubarItemDifficultyUp', _ -> incrementDifficulty(1));
|
||||||
|
addUIClickListener('menubarItemDifficultyDown', _ -> incrementDifficulty(-1));
|
||||||
|
|
||||||
addUIChangeListener('menubarItemPlaytestStartTime', event -> playtestStartTime = event.value);
|
addUIChangeListener('menubarItemPlaytestStartTime', event -> playtestStartTime = event.value);
|
||||||
setUICheckboxSelected('menubarItemPlaytestStartTime', playtestStartTime);
|
setUICheckboxSelected('menubarItemPlaytestStartTime', playtestStartTime);
|
||||||
|
|
||||||
|
@ -1584,6 +1618,7 @@ class ChartEditorState extends HaxeUIState
|
||||||
handleToolboxes();
|
handleToolboxes();
|
||||||
handlePlaybar();
|
handlePlaybar();
|
||||||
handlePlayhead();
|
handlePlayhead();
|
||||||
|
// handleNotePreview();
|
||||||
|
|
||||||
handleFileKeybinds();
|
handleFileKeybinds();
|
||||||
handleEditKeybinds();
|
handleEditKeybinds();
|
||||||
|
@ -2755,7 +2790,95 @@ class ChartEditorState extends HaxeUIState
|
||||||
/**
|
/**
|
||||||
* Handle keybinds for View menu items.
|
* Handle keybinds for View menu items.
|
||||||
*/
|
*/
|
||||||
function handleViewKeybinds():Void {}
|
function handleViewKeybinds():Void
|
||||||
|
{
|
||||||
|
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.LEFT)
|
||||||
|
{
|
||||||
|
incrementDifficulty(-1);
|
||||||
|
}
|
||||||
|
if (FlxG.keys.pressed.CONTROL && FlxG.keys.justPressed.RIGHT)
|
||||||
|
{
|
||||||
|
incrementDifficulty(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function incrementDifficulty(change:Int):Void
|
||||||
|
{
|
||||||
|
var currentDifficultyIndex:Int = availableDifficulties.indexOf(selectedDifficulty);
|
||||||
|
var currentAllDifficultyIndex:Int = allDifficulties.indexOf(selectedDifficulty);
|
||||||
|
|
||||||
|
if (currentDifficultyIndex == -1 || currentAllDifficultyIndex == -1)
|
||||||
|
{
|
||||||
|
trace('ERROR determining difficulty index!');
|
||||||
|
}
|
||||||
|
|
||||||
|
var isFirstDiff:Bool = currentAllDifficultyIndex == 0;
|
||||||
|
var isLastDiff:Bool = (currentAllDifficultyIndex == allDifficulties.length - 1);
|
||||||
|
|
||||||
|
var isFirstDiffInVariation:Bool = currentDifficultyIndex == 0;
|
||||||
|
var isLastDiffInVariation:Bool = (currentDifficultyIndex == availableDifficulties.length - 1);
|
||||||
|
|
||||||
|
trace(allDifficulties);
|
||||||
|
|
||||||
|
if (change < 0 && isFirstDiff)
|
||||||
|
{
|
||||||
|
trace('At lowest difficulty! Do nothing.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (change > 0 && isLastDiff)
|
||||||
|
{
|
||||||
|
trace('At highest difficulty! Do nothing.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (change < 0)
|
||||||
|
{
|
||||||
|
// Decrement difficulty.
|
||||||
|
// If we reached this point, we are not at the lowest difficulty.
|
||||||
|
if (isFirstDiffInVariation)
|
||||||
|
{
|
||||||
|
// Go to the previous variation, then last difficulty in that variation.
|
||||||
|
var currentVariationIndex:Int = availableVariations.indexOf(selectedVariation);
|
||||||
|
var prevVariation = availableVariations[currentVariationIndex - 1];
|
||||||
|
selectedVariation = prevVariation;
|
||||||
|
|
||||||
|
var prevDifficulty = availableDifficulties[availableDifficulties.length - 1];
|
||||||
|
selectedDifficulty = prevDifficulty;
|
||||||
|
|
||||||
|
refreshDifficultyTreeSelection();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Go to previous difficulty in this variation.
|
||||||
|
var prevDifficulty = availableDifficulties[currentDifficultyIndex - 1];
|
||||||
|
selectedDifficulty = prevDifficulty;
|
||||||
|
|
||||||
|
refreshDifficultyTreeSelection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Increment difficulty.
|
||||||
|
// If we reached this point, we are not at the highest difficulty.
|
||||||
|
if (isLastDiffInVariation)
|
||||||
|
{
|
||||||
|
// Go to next variation, then first difficulty in that variation.
|
||||||
|
var currentVariationIndex:Int = availableVariations.indexOf(selectedVariation);
|
||||||
|
var nextVariation = availableVariations[currentVariationIndex + 1];
|
||||||
|
selectedVariation = nextVariation;
|
||||||
|
|
||||||
|
var nextDifficulty = availableDifficulties[0];
|
||||||
|
selectedDifficulty = nextDifficulty;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Go to next difficulty in this variation.
|
||||||
|
var nextDifficulty = availableDifficulties[currentDifficultyIndex + 1];
|
||||||
|
selectedDifficulty = nextDifficulty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle keybinds for the Test menu items.
|
* Handle keybinds for the Test menu items.
|
||||||
|
@ -2801,7 +2924,8 @@ class ChartEditorState extends HaxeUIState
|
||||||
// Clear the tree view so we can rebuild it.
|
// Clear the tree view so we can rebuild it.
|
||||||
treeView.clearNodes();
|
treeView.clearNodes();
|
||||||
|
|
||||||
var treeSong:TreeViewNode = treeView.addNode({id: 'stv_song', text: 'S: $currentSongName', icon: 'haxeui-core/styles/default/haxeui_tiny.png'});
|
// , icon: 'haxeui-core/styles/default/haxeui_tiny.png'
|
||||||
|
var treeSong:TreeViewNode = treeView.addNode({id: 'stv_song', text: 'S: $currentSongName'});
|
||||||
treeSong.expanded = true;
|
treeSong.expanded = true;
|
||||||
|
|
||||||
var variations = Reflect.copy(availableVariations);
|
var variations = Reflect.copy(availableVariations);
|
||||||
|
@ -2831,10 +2955,26 @@ class ChartEditorState extends HaxeUIState
|
||||||
}
|
}
|
||||||
|
|
||||||
treeView.onChange = onChangeTreeDifficulty;
|
treeView.onChange = onChangeTreeDifficulty;
|
||||||
treeView.selectedNode = getCurrentTreeDifficultyNode();
|
refreshDifficultyTreeSelection(treeView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function refreshDifficultyTreeSelection(?treeView:TreeView):Void
|
||||||
|
{
|
||||||
|
if (treeView == null)
|
||||||
|
{
|
||||||
|
// Manage the Select Difficulty tree view.
|
||||||
|
var difficultyToolbox:CollapsibleDialog = ChartEditorToolboxHandler.getToolbox(this, CHART_EDITOR_TOOLBOX_DIFFICULTY_LAYOUT);
|
||||||
|
if (difficultyToolbox == null) return;
|
||||||
|
|
||||||
|
treeView = difficultyToolbox.findComponent('difficultyToolboxTree');
|
||||||
|
if (treeView == null) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
trace(treeView);
|
||||||
|
treeView.selectedNode = getCurrentTreeDifficultyNode(treeView);
|
||||||
|
}
|
||||||
|
|
||||||
function handlePlayerPreviewToolbox():Void
|
function handlePlayerPreviewToolbox():Void
|
||||||
{
|
{
|
||||||
// Manage the Select Difficulty tree view.
|
// Manage the Select Difficulty tree view.
|
||||||
|
@ -2941,13 +3081,16 @@ class ChartEditorState extends HaxeUIState
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCurrentTreeDifficultyNode():TreeViewNode
|
function getCurrentTreeDifficultyNode(?treeView:TreeView = null):TreeViewNode
|
||||||
{
|
{
|
||||||
var difficultyToolbox:CollapsibleDialog = ChartEditorToolboxHandler.getToolbox(this, CHART_EDITOR_TOOLBOX_DIFFICULTY_LAYOUT);
|
if (treeView == null)
|
||||||
if (difficultyToolbox == null) return null;
|
{
|
||||||
|
var difficultyToolbox:CollapsibleDialog = ChartEditorToolboxHandler.getToolbox(this, CHART_EDITOR_TOOLBOX_DIFFICULTY_LAYOUT);
|
||||||
|
if (difficultyToolbox == null) return null;
|
||||||
|
|
||||||
var treeView:TreeView = difficultyToolbox.findComponent('difficultyToolboxTree');
|
treeView = difficultyToolbox.findComponent('difficultyToolboxTree');
|
||||||
if (treeView == null) return null;
|
if (treeView == null) return null;
|
||||||
|
}
|
||||||
|
|
||||||
var result:TreeViewNode = treeView.findNodeByPath('stv_song/stv_variation_$selectedVariation/stv_difficulty_${selectedVariation}_$selectedDifficulty',
|
var result:TreeViewNode = treeView.findNodeByPath('stv_song/stv_variation_$selectedVariation/stv_difficulty_${selectedVariation}_$selectedDifficulty',
|
||||||
'id');
|
'id');
|
||||||
|
@ -2956,6 +3099,10 @@ class ChartEditorState extends HaxeUIState
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when selecting a tree element in the Difficulty toolbox.
|
||||||
|
* @param event The click event.
|
||||||
|
*/
|
||||||
function onChangeTreeDifficulty(event:UIEvent):Void
|
function onChangeTreeDifficulty(event:UIEvent):Void
|
||||||
{
|
{
|
||||||
// Get the newly selected node.
|
// Get the newly selected node.
|
||||||
|
@ -2966,7 +3113,7 @@ class ChartEditorState extends HaxeUIState
|
||||||
{
|
{
|
||||||
trace('No target node!');
|
trace('No target node!');
|
||||||
// Reset the user's selection.
|
// Reset the user's selection.
|
||||||
treeView.selectedNode = getCurrentTreeDifficultyNode();
|
treeView.selectedNode = getCurrentTreeDifficultyNode(treeView);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2981,13 +3128,14 @@ class ChartEditorState extends HaxeUIState
|
||||||
trace('Changing difficulty to $variation:$difficulty');
|
trace('Changing difficulty to $variation:$difficulty');
|
||||||
selectedVariation = variation;
|
selectedVariation = variation;
|
||||||
selectedDifficulty = difficulty;
|
selectedDifficulty = difficulty;
|
||||||
|
// refreshDifficultyTreeSelection(treeView);
|
||||||
}
|
}
|
||||||
// case 'song':
|
// case 'song':
|
||||||
// case 'variation':
|
// case 'variation':
|
||||||
default:
|
default:
|
||||||
// Reset the user's selection.
|
// Reset the user's selection.
|
||||||
trace('Selected wrong node type, resetting selection.');
|
trace('Selected wrong node type, resetting selection.');
|
||||||
treeView.selectedNode = getCurrentTreeDifficultyNode();
|
treeView.selectedNode = getCurrentTreeDifficultyNode(treeView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package funkin.ui.debug.charting;
|
package funkin.ui.debug.charting;
|
||||||
|
|
||||||
|
import haxe.ui.containers.TreeView;
|
||||||
|
import haxe.ui.containers.TreeViewNode;
|
||||||
import funkin.play.character.BaseCharacter.CharacterType;
|
import funkin.play.character.BaseCharacter.CharacterType;
|
||||||
import funkin.play.event.SongEvent;
|
import funkin.play.event.SongEvent;
|
||||||
import funkin.play.event.SongEventData;
|
import funkin.play.event.SongEventData;
|
||||||
|
@ -36,6 +38,7 @@ enum ChartEditorToolMode
|
||||||
/**
|
/**
|
||||||
* Static functions which handle building themed UI elements for a provided ChartEditorState.
|
* Static functions which handle building themed UI elements for a provided ChartEditorState.
|
||||||
*/
|
*/
|
||||||
|
@:allow(funkin.ui.debug.charting.ChartEditorState)
|
||||||
class ChartEditorToolboxHandler
|
class ChartEditorToolboxHandler
|
||||||
{
|
{
|
||||||
public static function setToolboxState(state:ChartEditorState, id:String, shown:Bool):Void
|
public static function setToolboxState(state:ChartEditorState, id:String, shown:Bool):Void
|
||||||
|
@ -59,6 +62,29 @@ class ChartEditorToolboxHandler
|
||||||
if (toolbox != null)
|
if (toolbox != null)
|
||||||
{
|
{
|
||||||
toolbox.showDialog(false);
|
toolbox.showDialog(false);
|
||||||
|
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_TOOLS_LAYOUT:
|
||||||
|
onShowToolboxTools(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_NOTEDATA_LAYOUT:
|
||||||
|
onShowToolboxNoteData(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_EVENTDATA_LAYOUT:
|
||||||
|
onShowToolboxEventData(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_DIFFICULTY_LAYOUT:
|
||||||
|
onShowToolboxDifficulty(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT:
|
||||||
|
onShowToolboxMetadata(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_CHARACTERS_LAYOUT:
|
||||||
|
onShowToolboxCharacters(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_PLAYER_PREVIEW_LAYOUT:
|
||||||
|
onShowToolboxPlayerPreview(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_OPPONENT_PREVIEW_LAYOUT:
|
||||||
|
onShowToolboxOpponentPreview(state, toolbox);
|
||||||
|
default:
|
||||||
|
// This happens if you try to load an unknown layout.
|
||||||
|
trace('ChartEditorToolboxHandler.showToolbox() - Unknown toolbox ID: $id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -75,6 +101,29 @@ class ChartEditorToolboxHandler
|
||||||
if (toolbox != null)
|
if (toolbox != null)
|
||||||
{
|
{
|
||||||
toolbox.hideDialog(DialogButton.CANCEL);
|
toolbox.hideDialog(DialogButton.CANCEL);
|
||||||
|
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_TOOLS_LAYOUT:
|
||||||
|
onHideToolboxTools(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_NOTEDATA_LAYOUT:
|
||||||
|
onHideToolboxNoteData(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_EVENTDATA_LAYOUT:
|
||||||
|
onHideToolboxEventData(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_DIFFICULTY_LAYOUT:
|
||||||
|
onHideToolboxDifficulty(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT:
|
||||||
|
onHideToolboxMetadata(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_CHARACTERS_LAYOUT:
|
||||||
|
onHideToolboxCharacters(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_PLAYER_PREVIEW_LAYOUT:
|
||||||
|
onHideToolboxPlayerPreview(state, toolbox);
|
||||||
|
case ChartEditorState.CHART_EDITOR_TOOLBOX_OPPONENT_PREVIEW_LAYOUT:
|
||||||
|
onHideToolboxOpponentPreview(state, toolbox);
|
||||||
|
default:
|
||||||
|
// This happens if you try to load an unknown layout.
|
||||||
|
trace('ChartEditorToolboxHandler.hideToolbox() - Unknown toolbox ID: $id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -186,6 +235,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxTools(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxTools(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxNoteDataLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxNoteDataLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_NOTEDATA_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_NOTEDATA_LAYOUT);
|
||||||
|
@ -230,6 +283,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxNoteData(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxNoteData(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxEventDataLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxEventDataLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_EVENTDATA_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_EVENTDATA_LAYOUT);
|
||||||
|
@ -275,6 +332,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxEventData(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxEventData(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildEventDataFormFromSchema(state:ChartEditorState, target:Box, schema:SongEventSchema):Void
|
static function buildEventDataFormFromSchema(state:ChartEditorState, target:Box, schema:SongEventSchema):Void
|
||||||
{
|
{
|
||||||
trace(schema);
|
trace(schema);
|
||||||
|
@ -405,6 +466,18 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxDifficulty(state:ChartEditorState, toolbox:CollapsibleDialog):Void
|
||||||
|
{
|
||||||
|
// Update the selected difficulty when reopening the toolbox.
|
||||||
|
var treeView:TreeView = toolbox.findComponent('difficultyToolboxTree');
|
||||||
|
if (treeView == null) return;
|
||||||
|
|
||||||
|
treeView.selectedNode = state.getCurrentTreeDifficultyNode(treeView);
|
||||||
|
trace('selected node: ${treeView.selectedNode}');
|
||||||
|
}
|
||||||
|
|
||||||
|
static function onHideToolboxDifficulty(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxMetadataLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxMetadataLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT);
|
||||||
|
@ -512,6 +585,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxMetadata(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxMetadata(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxCharactersLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxCharactersLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_CHARACTERS_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_CHARACTERS_LAYOUT);
|
||||||
|
@ -529,6 +606,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxCharacters(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxCharacters(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxPlayerPreviewLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxPlayerPreviewLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_PLAYER_PREVIEW_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_PLAYER_PREVIEW_LAYOUT);
|
||||||
|
@ -553,6 +634,10 @@ class ChartEditorToolboxHandler
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxPlayerPreview(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxPlayerPreview(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
static function buildToolboxOpponentPreviewLayout(state:ChartEditorState):CollapsibleDialog
|
static function buildToolboxOpponentPreviewLayout(state:ChartEditorState):CollapsibleDialog
|
||||||
{
|
{
|
||||||
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_OPPONENT_PREVIEW_LAYOUT);
|
var toolbox:CollapsibleDialog = cast state.buildComponent(ChartEditorState.CHART_EDITOR_TOOLBOX_OPPONENT_PREVIEW_LAYOUT);
|
||||||
|
@ -576,4 +661,8 @@ class ChartEditorToolboxHandler
|
||||||
|
|
||||||
return toolbox;
|
return toolbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static function onShowToolboxOpponentPreview(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
|
|
||||||
|
static function onHideToolboxOpponentPreview(state:ChartEditorState, toolbox:CollapsibleDialog):Void {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class SortUtil
|
||||||
* Example usage: `array.sort(defaultThenAlphabetical.bind('test'))` will sort the array so that the string 'test' is first.
|
* Example usage: `array.sort(defaultThenAlphabetical.bind('test'))` will sort the array so that the string 'test' is first.
|
||||||
* @param a The first string to compare.
|
* @param a The first string to compare.
|
||||||
* @param b The second string to compare.
|
* @param b The second string to compare.
|
||||||
* @param defaultValue The value to prioritize. Defaults to `default`.
|
* @param defaultValue The value to prioritize.
|
||||||
*/
|
*/
|
||||||
public static function defaultThenAlphabetically(a:String, b:String, defaultValue:String):Int
|
public static function defaultThenAlphabetically(a:String, b:String, defaultValue:String):Int
|
||||||
{
|
{
|
||||||
|
@ -62,12 +62,16 @@ class SortUtil
|
||||||
* Example usage: `array.sort(defaultsThenAlphabetical.bind(['test']))` will sort the array so that the string 'test' is first.
|
* Example usage: `array.sort(defaultsThenAlphabetical.bind(['test']))` will sort the array so that the string 'test' is first.
|
||||||
* @param a The first string to compare.
|
* @param a The first string to compare.
|
||||||
* @param b The second string to compare.
|
* @param b The second string to compare.
|
||||||
* @param defaultValue The value to prioritize. Defaults to `default`.
|
* @param defaultValues The values to prioritize.
|
||||||
*/
|
*/
|
||||||
public static function defaultsThenAlphabetically(a:String, b:String, defaultValues:Array<String>):Int
|
public static function defaultsThenAlphabetically(a:String, b:String, defaultValues:Array<String>):Int
|
||||||
{
|
{
|
||||||
if (a == b) return 0;
|
if (a == b) return 0;
|
||||||
if (defaultValues.contains(a) && defaultValues.contains(b)) return alphabetically(a, b);
|
if (defaultValues.contains(a) && defaultValues.contains(b))
|
||||||
|
{
|
||||||
|
// Sort by index in defaultValues
|
||||||
|
return defaultValues.indexOf(a) - defaultValues.indexOf(b);
|
||||||
|
};
|
||||||
if (defaultValues.contains(a)) return 1;
|
if (defaultValues.contains(a)) return 1;
|
||||||
if (defaultValues.contains(b)) return -1;
|
if (defaultValues.contains(b)) return -1;
|
||||||
return alphabetically(a, b);
|
return alphabetically(a, b);
|
||||||
|
|
Loading…
Reference in a new issue