Merge pull request #255 from FunkinCrew/bugfix/move-to-funkincrew

Fixes for updated HaxeUI and Flixel.
This commit is contained in:
Cameron Taylor 2023-12-15 21:47:46 -05:00 committed by GitHub
commit 4629702634
13 changed files with 102 additions and 113 deletions

2
assets

@ -1 +1 @@
Subproject commit dfaf23dfa11ff67be2eea9113a80ff5dc0040f76
Subproject commit c354795f7f560fa096b855c6e6bca745f77fa414

View file

@ -1097,23 +1097,6 @@ class PlayState extends MusicBeatSubState
}
#end
/**
* This function is called whenever Flixel switches switching to a new FlxState.
* @return Whether to actually switch to the new state.
*/
@:haxe.warning("-WDeprecated")
override function switchTo(nextState:FlxState):Bool
{
var result:Bool = super.switchTo(nextState);
if (result)
{
performCleanup();
}
return result;
}
/**
* Removes any references to the current stage, then clears the stage cache,
* then reloads all the stages.
@ -1251,7 +1234,7 @@ class PlayState extends MusicBeatSubState
return true;
}
override function destroy():Void
public override function destroy():Void
{
if (currentConversation != null)
{
@ -1259,6 +1242,8 @@ class PlayState extends MusicBeatSubState
currentConversation.kill();
}
performCleanup();
super.destroy();
}

View file

@ -2675,14 +2675,16 @@ class ChartEditorState extends UIState // UIState derives from MusicBeatState
* Open the backups folder in the file explorer.
* Don't call this on HTML5.
*/
function openBackupsFolder(?_):Void
function openBackupsFolder(?_):Bool
{
#if sys
// TODO: Is there a way to open a folder and highlight a file in it?
var absoluteBackupsPath:String = Path.join([Sys.getCwd(), ChartEditorImportExportHandler.BACKUPS_PATH]);
WindowUtil.openFolder(absoluteBackupsPath);
return true;
#else
trace('No file system access, cannot open backups folder.');
return false;
#end
}

View file

@ -5,14 +5,14 @@ import funkin.ui.debug.charting.dialogs.ChartEditorBaseDialog.DialogParams;
@:build(haxe.ui.ComponentBuilder.build("assets/exclude/data/ui/chart-editor/dialogs/about.xml"))
class ChartEditorAboutDialog extends ChartEditorBaseDialog
{
public function new(state2:ChartEditorState, params2:DialogParams)
public function new(chartEditorState2:ChartEditorState, params2:DialogParams)
{
super(state2, params2);
super(chartEditorState2, params2);
}
public static function build(state:ChartEditorState, ?closable:Bool, ?modal:Bool):ChartEditorAboutDialog
public static function build(chartEditorState:ChartEditorState, ?closable:Bool, ?modal:Bool):ChartEditorAboutDialog
{
var dialog = new ChartEditorAboutDialog(state,
var dialog = new ChartEditorAboutDialog(chartEditorState,
{
closable: closable ?? true,
modal: modal ?? true

View file

@ -11,16 +11,16 @@ import haxe.ui.core.Component;
@:access(funkin.ui.debug.charting.ChartEditorState)
class ChartEditorBaseDialog extends Dialog
{
var state:ChartEditorState;
var chartEditorState:ChartEditorState;
var params:DialogParams;
var locked:Bool = false;
public function new(state:ChartEditorState, params:DialogParams)
public function new(chartEditorState:ChartEditorState, params:DialogParams)
{
super();
this.state = state;
this.chartEditorState = chartEditorState;
this.params = params;
this.destroyOnClose = true;
@ -47,7 +47,7 @@ class ChartEditorBaseDialog extends Dialog
*/
public function onClose(event:DialogEvent):Void
{
state.isHaxeUIDialogOpen = false;
chartEditorState.isHaxeUIDialogOpen = false;
}
/**

View file

@ -11,13 +11,13 @@ import haxe.ui.containers.menus.Menu;
@:access(funkin.ui.debug.charting.ChartEditorState)
class ChartEditorBaseMenu extends Menu
{
var state:ChartEditorState;
var chartEditorState:ChartEditorState;
public function new(state:ChartEditorState)
public function new(chartEditorState:ChartEditorState)
{
super();
this.state = state;
this.chartEditorState = chartEditorState;
// this.destroyOnClose = true;
}

View file

@ -24,9 +24,9 @@ class ChartEditorCharacterIconSelectorMenu extends ChartEditorBaseMenu
public var charSelectScroll:ScrollView;
public var charIconName:Label;
public function new(state2:ChartEditorState, charType:CharacterType, lockPosition:Bool = false)
public function new(chartEditorState2:ChartEditorState, charType:CharacterType, lockPosition:Bool = false)
{
super(state2);
super(chartEditorState2);
initialize(charType, lockPosition);
this.alpha = 0;
@ -38,17 +38,17 @@ class ChartEditorCharacterIconSelectorMenu extends ChartEditorBaseMenu
{
var currentCharId:String = switch (charType)
{
case BF: state.currentSongMetadata.playData.characters.player;
case GF: state.currentSongMetadata.playData.characters.girlfriend;
case DAD: state.currentSongMetadata.playData.characters.opponent;
case BF: chartEditorState.currentSongMetadata.playData.characters.player;
case GF: chartEditorState.currentSongMetadata.playData.characters.girlfriend;
case DAD: chartEditorState.currentSongMetadata.playData.characters.opponent;
default: throw 'Invalid charType: ' + charType;
};
// Position this menu.
var targetHealthIcon:Null<HealthIcon> = switch (charType)
{
case BF: state.healthIconBF;
case DAD: state.healthIconDad;
case BF: chartEditorState.healthIconBF;
case DAD: chartEditorState.healthIconDad;
default: null;
};
@ -101,14 +101,14 @@ class ChartEditorCharacterIconSelectorMenu extends ChartEditorBaseMenu
charButton.onClick = _ -> {
switch (charType)
{
case BF: state.currentSongMetadata.playData.characters.player = charId;
case GF: state.currentSongMetadata.playData.characters.girlfriend = charId;
case DAD: state.currentSongMetadata.playData.characters.opponent = charId;
case BF: chartEditorState.currentSongMetadata.playData.characters.player = charId;
case GF: chartEditorState.currentSongMetadata.playData.characters.girlfriend = charId;
case DAD: chartEditorState.currentSongMetadata.playData.characters.opponent = charId;
default: throw 'Invalid charType: ' + charType;
};
state.healthIconsDirty = true;
state.refreshToolbox(ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT);
chartEditorState.healthIconsDirty = true;
chartEditorState.refreshToolbox(ChartEditorState.CHART_EDITOR_TOOLBOX_METADATA_LAYOUT);
};
charButton.onMouseOver = _ -> {
@ -123,9 +123,9 @@ class ChartEditorCharacterIconSelectorMenu extends ChartEditorBaseMenu
charIconName.text = defaultText;
}
public static function build(state2:ChartEditorState, charType:CharacterType, lockPosition:Bool = false):ChartEditorCharacterIconSelectorMenu
public static function build(chartEditorState:ChartEditorState, charType:CharacterType, lockPosition:Bool = false):ChartEditorCharacterIconSelectorMenu
{
var menu = new ChartEditorCharacterIconSelectorMenu(state2, charType, lockPosition);
var menu = new ChartEditorCharacterIconSelectorMenu(chartEditorState, charType, lockPosition);
Screen.instance.addComponent(menu);

View file

@ -64,12 +64,12 @@ class ChartEditorUploadChartDialog extends ChartEditorBaseDialog
if (event.button != DialogButton.APPLY && !this.closable)
{
// User cancelled the wizard! Back to the welcome dialog.
state.openWelcomeDialog(this.closable);
chartEditorState.openWelcomeDialog(this.closable);
}
for (dropTarget in dropHandlers)
{
state.removeDropHandler(dropTarget);
chartEditorState.removeDropHandler(dropTarget);
}
}
@ -111,20 +111,21 @@ class ChartEditorUploadChartDialog extends ChartEditorBaseDialog
try
{
var result:Null<Array<String>> = ChartEditorImportExportHandler.loadFromFNFCPath(state, path.toString());
var result:Null<Array<String>> = ChartEditorImportExportHandler.loadFromFNFCPath(chartEditorState, path.toString());
if (result != null)
{
state.success('Loaded Chart', result.length == 0 ? 'Loaded chart (${path.toString()})' : 'Loaded chart (${path.toString()})\n${result.join("\n")}');
chartEditorState.success('Loaded Chart',
result.length == 0 ? 'Loaded chart (${path.toString()})' : 'Loaded chart (${path.toString()})\n${result.join("\n")}');
this.hideDialog(DialogButton.APPLY);
}
else
{
state.failure('Failed to Load Chart', 'Failed to load chart (${path.toString()})');
chartEditorState.failure('Failed to Load Chart', 'Failed to load chart (${path.toString()})');
}
}
catch (err)
{
state.failure('Failed to Load Chart', 'Failed to load chart (${path.toString()}): ${err}');
chartEditorState.failure('Failed to Load Chart', 'Failed to load chart (${path.toString()}): ${err}');
}
}
@ -139,19 +140,19 @@ class ChartEditorUploadChartDialog extends ChartEditorBaseDialog
{
try
{
var result:Null<Array<String>> = ChartEditorImportExportHandler.loadFromFNFC(state, selectedFile.bytes);
var result:Null<Array<String>> = ChartEditorImportExportHandler.loadFromFNFC(chartEditorState, selectedFile.bytes);
if (result != null)
{
state.success('Loaded Chart',
chartEditorState.success('Loaded Chart',
result.length == 0 ? 'Loaded chart (${selectedFile.name})' : 'Loaded chart (${selectedFile.name})\n${result.join("\n")}');
if (selectedFile.fullPath != null) state.currentWorkingFilePath = selectedFile.fullPath;
if (selectedFile.fullPath != null) chartEditorState.currentWorkingFilePath = selectedFile.fullPath;
this.hideDialog(DialogButton.APPLY);
}
}
catch (err)
{
state.failure('Failed to Load Chart', 'Failed to load chart (${selectedFile.name}): ${err}');
chartEditorState.failure('Failed to Load Chart', 'Failed to load chart (${selectedFile.name}): ${err}');
}
}
}

View file

@ -41,26 +41,26 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
// Add items to the Recent Charts list
#if sys
for (chartPath in state.previousWorkingFilePaths)
for (chartPath in chartEditorState.previousWorkingFilePaths)
{
if (chartPath == null) continue;
this.addRecentFilePath(state, chartPath);
this.addRecentFilePath(chartEditorState, chartPath);
}
#else
this.addHTML5RecentFileMessage();
#end
// Add items to the Load From Template list
this.buildTemplateSongList(state);
this.buildTemplateSongList(chartEditorState);
}
/**
* @param state The current state of the chart editor.
* @return A newly created `ChartEditorWelcomeDialog`.
*/
public static function build(state:ChartEditorState, ?closable:Bool, ?modal:Bool):ChartEditorWelcomeDialog
public static function build(chartEditorState:ChartEditorState, ?closable:Bool, ?modal:Bool):ChartEditorWelcomeDialog
{
var dialog = new ChartEditorWelcomeDialog(state,
var dialog = new ChartEditorWelcomeDialog(chartEditorState,
{
closable: closable ?? false,
modal: modal ?? true
@ -102,12 +102,12 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
var result:Null<Array<String>> = ChartEditorImportExportHandler.loadFromFNFCPath(state, chartPath);
if (result != null)
{
state.success('Loaded Chart',
chartEditorState.success('Loaded Chart',
result.length == 0 ? 'Loaded chart (${chartPath.toString()})' : 'Loaded chart (${chartPath.toString()})\n${result.join("\n")}');
}
else
{
state.error('Failed to Load Chart', 'Failed to load chart (${chartPath.toString()})');
chartEditorState.error('Failed to Load Chart', 'Failed to load chart (${chartPath.toString()})');
}
}
@ -157,7 +157,7 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
this.hideDialog(DialogButton.CANCEL);
// Load song from template
state.loadSongAsTemplate(targetSongId);
chartEditorState.loadSongAsTemplate(targetSongId);
});
}
}
@ -184,7 +184,7 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
this.hideDialog(DialogButton.CANCEL);
// Open the "Open Chart" dialog
state.openBrowseFNFC(false);
chartEditorState.openBrowseFNFC(false);
}
/**
@ -199,7 +199,7 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
//
// Create Song Wizard
//
state.openCreateSongWizardBasicOnly(false);
chartEditorState.openCreateSongWizardBasicOnly(false);
}
/**
@ -214,7 +214,7 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
//
// Create Song Wizard
//
state.openCreateSongWizardErectOnly(false);
chartEditorState.openCreateSongWizardErectOnly(false);
}
/**
@ -229,7 +229,7 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
//
// Create Song Wizard
//
state.openCreateSongWizardBasicErect(false);
chartEditorState.openCreateSongWizardBasicErect(false);
}
/**
@ -242,6 +242,6 @@ class ChartEditorWelcomeDialog extends ChartEditorBaseDialog
this.hideDialog(DialogButton.CANCEL);
// Open the "Import Chart" dialog
state.openImportChartWizard('legacy', false);
chartEditorState.openImportChartWizard('legacy', false);
}
}

View file

@ -315,6 +315,8 @@ class ChartEditorImportExportHandler
public static function getLatestBackupPath():Null<String>
{
#if sys
if (!sys.FileSystem.exists(BACKUPS_PATH)) sys.FileSystem.createDirectory(BACKUPS_PATH);
var entries:Array<String> = sys.FileSystem.readDirectory(BACKUPS_PATH);
entries.sort(SortUtil.alphabetically);

View file

@ -12,13 +12,13 @@ import haxe.ui.core.Component;
@:access(funkin.ui.debug.charting.ChartEditorState)
class ChartEditorBaseToolbox extends CollapsibleDialog
{
var state:ChartEditorState;
var chartEditorState:ChartEditorState;
private function new(state:ChartEditorState)
private function new(chartEditorState:ChartEditorState)
{
super();
this.state = state;
this.chartEditorState = chartEditorState;
}
/**

View file

@ -40,9 +40,9 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
var frameVariation:Frame;
var frameDifficulty:Frame;
public function new(state2:ChartEditorState)
public function new(chartEditorState2:ChartEditorState)
{
super(state2);
super(chartEditorState2);
initialize();
@ -51,7 +51,7 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
function onClose(event:UIEvent)
{
state.menubarItemToggleToolboxMetadata.selected = false;
chartEditorState.menubarItemToggleToolboxMetadata.selected = false;
}
function initialize():Void
@ -67,11 +67,11 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
if (valid)
{
inputSongName.removeClass('invalid-value');
state.currentSongMetadata.songName = event.target.text;
chartEditorState.currentSongMetadata.songName = event.target.text;
}
else
{
state.currentSongMetadata.songName = '';
chartEditorState.currentSongMetadata.songName = '';
}
};
@ -81,11 +81,11 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
if (valid)
{
inputSongArtist.removeClass('invalid-value');
state.currentSongMetadata.artist = event.target.text;
chartEditorState.currentSongMetadata.artist = event.target.text;
}
else
{
state.currentSongMetadata.artist = '';
chartEditorState.currentSongMetadata.artist = '';
}
};
@ -94,41 +94,41 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
if (valid)
{
state.currentSongMetadata.playData.stage = event.data.id;
chartEditorState.currentSongMetadata.playData.stage = event.data.id;
}
};
var startingValueStage = ChartEditorDropdowns.populateDropdownWithStages(inputStage, state.currentSongMetadata.playData.stage);
var startingValueStage = ChartEditorDropdowns.populateDropdownWithStages(inputStage, chartEditorState.currentSongMetadata.playData.stage);
inputStage.value = startingValueStage;
inputNoteStyle.onChange = function(event:UIEvent) {
if (event.data?.id == null) return;
state.currentSongNoteStyle = event.data.id;
chartEditorState.currentSongNoteStyle = event.data.id;
};
inputBPM.onChange = function(event:UIEvent) {
if (event.value == null || event.value <= 0) return;
// Use a command so we can undo/redo this action.
var startingBPM = state.currentSongMetadata.timeChanges[0].bpm;
var startingBPM = chartEditorState.currentSongMetadata.timeChanges[0].bpm;
if (event.value != startingBPM)
{
state.performCommand(new ChangeStartingBPMCommand(event.value));
chartEditorState.performCommand(new ChangeStartingBPMCommand(event.value));
}
};
inputOffsetInst.onChange = function(event:UIEvent) {
if (event.value == null) return;
state.currentInstrumentalOffset = event.value;
chartEditorState.currentInstrumentalOffset = event.value;
Conductor.instrumentalOffset = event.value;
// Update song length.
state.songLengthInMs = (state.audioInstTrack?.length ?? 1000.0) + Conductor.instrumentalOffset;
chartEditorState.songLengthInMs = (chartEditorState.audioInstTrack?.length ?? 1000.0) + Conductor.instrumentalOffset;
};
inputOffsetVocal.onChange = function(event:UIEvent) {
if (event.value == null) return;
state.currentSongMetadata.offsets.setVocalOffset(state.currentSongMetadata.playData.characters.player, event.value);
chartEditorState.currentSongMetadata.offsets.setVocalOffset(chartEditorState.currentSongMetadata.playData.characters.player, event.value);
};
inputScrollSpeed.onChange = function(event:UIEvent) {
var valid:Bool = event.target.value != null && event.target.value > 0;
@ -136,25 +136,25 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
if (valid)
{
inputScrollSpeed.removeClass('invalid-value');
state.currentSongChartScrollSpeed = event.target.value;
chartEditorState.currentSongChartScrollSpeed = event.target.value;
}
else
{
state.currentSongChartScrollSpeed = 1.0;
chartEditorState.currentSongChartScrollSpeed = 1.0;
}
labelScrollSpeed.text = 'Scroll Speed: ${state.currentSongChartScrollSpeed}x';
labelScrollSpeed.text = 'Scroll Speed: ${chartEditorState.currentSongChartScrollSpeed}x';
};
buttonCharacterOpponent.onClick = function(_) {
state.openCharacterDropdown(CharacterType.DAD, false);
chartEditorState.openCharacterDropdown(CharacterType.DAD, false);
};
buttonCharacterGirlfriend.onClick = function(_) {
state.openCharacterDropdown(CharacterType.GF, false);
chartEditorState.openCharacterDropdown(CharacterType.GF, false);
};
buttonCharacterPlayer.onClick = function(_) {
state.openCharacterDropdown(CharacterType.BF, false);
chartEditorState.openCharacterDropdown(CharacterType.BF, false);
};
refresh();
@ -162,17 +162,17 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
public override function refresh():Void
{
inputSongName.value = state.currentSongMetadata.songName;
inputSongArtist.value = state.currentSongMetadata.artist;
inputStage.value = state.currentSongMetadata.playData.stage;
inputNoteStyle.value = state.currentSongMetadata.playData.noteStyle;
inputBPM.value = state.currentSongMetadata.timeChanges[0].bpm;
inputScrollSpeed.value = state.currentSongChartScrollSpeed;
labelScrollSpeed.text = 'Scroll Speed: ${state.currentSongChartScrollSpeed}x';
frameVariation.text = 'Variation: ${state.selectedVariation.toTitleCase()}';
frameDifficulty.text = 'Difficulty: ${state.selectedDifficulty.toTitleCase()}';
inputSongName.value = chartEditorState.currentSongMetadata.songName;
inputSongArtist.value = chartEditorState.currentSongMetadata.artist;
inputStage.value = chartEditorState.currentSongMetadata.playData.stage;
inputNoteStyle.value = chartEditorState.currentSongMetadata.playData.noteStyle;
inputBPM.value = chartEditorState.currentSongMetadata.timeChanges[0].bpm;
inputScrollSpeed.value = chartEditorState.currentSongChartScrollSpeed;
labelScrollSpeed.text = 'Scroll Speed: ${chartEditorState.currentSongChartScrollSpeed}x';
frameVariation.text = 'Variation: ${chartEditorState.selectedVariation.toTitleCase()}';
frameDifficulty.text = 'Difficulty: ${chartEditorState.selectedDifficulty.toTitleCase()}';
var stageId:String = state.currentSongMetadata.playData.stage;
var stageId:String = chartEditorState.currentSongMetadata.playData.stage;
var stageData:Null<StageData> = StageDataParser.parseStageData(stageId);
if (inputStage != null)
{
@ -183,21 +183,21 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
var LIMIT = 6;
var charDataOpponent:CharacterData = CharacterDataParser.fetchCharacterData(state.currentSongMetadata.playData.characters.opponent);
buttonCharacterOpponent.icon = CharacterDataParser.getCharPixelIconAsset(state.currentSongMetadata.playData.characters.opponent);
var charDataOpponent:CharacterData = CharacterDataParser.fetchCharacterData(chartEditorState.currentSongMetadata.playData.characters.opponent);
buttonCharacterOpponent.icon = CharacterDataParser.getCharPixelIconAsset(chartEditorState.currentSongMetadata.playData.characters.opponent);
buttonCharacterOpponent.text = charDataOpponent.name.length > LIMIT ? '${charDataOpponent.name.substr(0, LIMIT)}.' : '${charDataOpponent.name}';
var charDataGirlfriend:CharacterData = CharacterDataParser.fetchCharacterData(state.currentSongMetadata.playData.characters.girlfriend);
buttonCharacterGirlfriend.icon = CharacterDataParser.getCharPixelIconAsset(state.currentSongMetadata.playData.characters.girlfriend);
var charDataGirlfriend:CharacterData = CharacterDataParser.fetchCharacterData(chartEditorState.currentSongMetadata.playData.characters.girlfriend);
buttonCharacterGirlfriend.icon = CharacterDataParser.getCharPixelIconAsset(chartEditorState.currentSongMetadata.playData.characters.girlfriend);
buttonCharacterGirlfriend.text = charDataGirlfriend.name.length > LIMIT ? '${charDataGirlfriend.name.substr(0, LIMIT)}.' : '${charDataGirlfriend.name}';
var charDataPlayer:CharacterData = CharacterDataParser.fetchCharacterData(state.currentSongMetadata.playData.characters.player);
buttonCharacterPlayer.icon = CharacterDataParser.getCharPixelIconAsset(state.currentSongMetadata.playData.characters.player);
var charDataPlayer:CharacterData = CharacterDataParser.fetchCharacterData(chartEditorState.currentSongMetadata.playData.characters.player);
buttonCharacterPlayer.icon = CharacterDataParser.getCharPixelIconAsset(chartEditorState.currentSongMetadata.playData.characters.player);
buttonCharacterPlayer.text = charDataPlayer.name.length > LIMIT ? '${charDataPlayer.name.substr(0, LIMIT)}.' : '${charDataPlayer.name}';
}
public static function build(state:ChartEditorState):ChartEditorMetadataToolbox
public static function build(chartEditorState:ChartEditorState):ChartEditorMetadataToolbox
{
return new ChartEditorMetadataToolbox(state);
return new ChartEditorMetadataToolbox(chartEditorState);
}
}

View file

@ -874,15 +874,14 @@ class FreeplayState extends MusicBeatSubState
}
}
@:haxe.warning("-WDeprecated")
override function switchTo(nextState:FlxState):Bool
public override function destroy():Void
{
super.destroy();
var daSong = songs[curSelected];
if (daSong != null)
{
clearDaCache(daSong.songName);
}
return super.switchTo(nextState);
}
function changeDiff(change:Int = 0)