Album metadata

This commit is contained in:
Lasercar 2025-03-22 12:59:23 +10:00
parent e83b88d320
commit 3e543cb54d
3 changed files with 54 additions and 0 deletions

View file

@ -648,6 +648,14 @@ class ChartEditorDialogHandler
var startingValueNoteStyle = ChartEditorDropdowns.populateDropdownWithNoteStyles(inputNoteStyle, newSongMetadata.playData.noteStyle);
inputNoteStyle.value = startingValueNoteStyle;
var inputAlbum:Null<DropDown> = dialog.findComponent('inputAlbum', DropDown);
if (inputAlbum == null) throw 'Could not locate inputAlbum DropDown in Song Metadata dialog';
inputAlbum.onChange = function(event:UIEvent) {
if (event.data != null && event.data.id != null) newSongMetadata.playData.album = event.data.id;
};
var startingValueAlbum = ChartEditorDropdowns.populateDropdownWithAlbums(inputAlbum, newSongMetadata.playData.album);
inputAlbum.value = startingValueAlbum;
var inputCharacterPlayer:Null<DropDown> = dialog.findComponent('inputCharacterPlayer', DropDown);
if (inputCharacterPlayer == null) throw 'ChartEditorToolboxHandler.buildToolboxMetadataLayout() - Could not find inputCharacterPlayer component.';
inputCharacterPlayer.onChange = function(event:UIEvent) {
@ -1181,6 +1189,11 @@ class ChartEditorDialogHandler
if (dialogNoteStyle == null) throw 'Could not locate dialogNoteStyle DropDown in Add Variation dialog';
dialogNoteStyle.value = state.currentSongMetadata.playData.noteStyle;
var dialogAlbum:Null<DropDown> = dialog.findComponent('dialogAlbum', DropDown);
if (dialogAlbum == null) throw 'Could not locate dialogAlbum DropDown in Add Variation dialog';
var startingValueAlbum = ChartEditorDropdowns.populateDropdownWithAlbums(dialogAlbum, state.currentSongMetadata.playData.album);
dialogAlbum.value = startingValueAlbum;
var dialogCharacterPlayer:Null<DropDown> = dialog.findComponent('dialogCharacterPlayer', DropDown);
if (dialogCharacterPlayer == null) throw 'Could not locate dialogCharacterPlayer DropDown in Add Variation dialog';
dialogCharacterPlayer.value = ChartEditorDropdowns.populateDropdownWithCharacters(dialogCharacterPlayer, CharacterType.BF,

View file

@ -32,6 +32,7 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
var inputSongCharter:TextField;
var inputStage:DropDown;
var inputNoteStyle:DropDown;
var inputAlbum:DropDown;
var buttonCharacterPlayer:Button;
var buttonCharacterGirlfriend:Button;
var buttonCharacterOpponent:Button;
@ -122,6 +123,17 @@ class ChartEditorMetadataToolbox extends ChartEditorBaseToolbox
var startingValueNoteStyle = ChartEditorDropdowns.populateDropdownWithNoteStyles(inputNoteStyle, chartEditorState.currentSongMetadata.playData.noteStyle);
inputNoteStyle.value = startingValueNoteStyle;
inputAlbum.onChange = function(event:UIEvent) {
var valid:Bool = event.data != null && event.data.id != null;
if (valid)
{
chartEditorState.currentSongMetadata.playData.album = event.data.id;
}
};
var startingValueAlbum = ChartEditorDropdowns.populateDropdownWithAlbums(inputAlbum, chartEditorState.currentSongMetadata.playData.album);
inputAlbum.value = startingValueAlbum;
inputBPM.onChange = function(event:UIEvent) {
if (event.value == null || event.value <= 0) return;

View file

@ -8,6 +8,8 @@ import funkin.data.stage.StageRegistry;
import funkin.play.character.CharacterData;
import haxe.ui.components.DropDown;
import funkin.play.stage.Stage;
import funkin.ui.freeplay.Album;
import funkin.data.freeplay.album.AlbumRegistry;
import funkin.play.character.BaseCharacter.CharacterType;
import funkin.data.event.SongEventRegistry;
import funkin.play.character.CharacterData.CharacterDataParser;
@ -244,6 +246,33 @@ class ChartEditorDropdowns
return returnValue;
}
/**
* Populate a dropdown with a list of albums.
*/
public static function populateDropdownWithAlbums(dropDown:DropDown, startingAlbumId:Null<String>):DropDownEntry
{
dropDown.dataSource.clear();
var albumIds:Array<String> = AlbumRegistry.instance.listEntryIds();
var returnValue:DropDownEntry = {id: "", text: "placeholder"};
for (albumId in albumIds)
{
var album:Null<Album> = AlbumRegistry.instance.fetchEntry(albumId);
if (album == null) continue;
var value = {id: album.id, text: album.getAlbumName()};
if (startingAlbumId == albumId) returnValue = value;
dropDown.dataSource.add(value);
}
dropDown.dataSource.sort('text', ASCENDING);
return returnValue;
}
}
/**