Fix Variation Editor Crash

This commit is contained in:
Ralty
2025-08-09 15:54:03 +07:00
parent 8aa2023057
commit 7d7db50c19
5 changed files with 32 additions and 22 deletions
+20 -14
View File
@@ -83,6 +83,24 @@ class Chart {
return data;
}
inline public static function defaultChartMetaFields(data:ChartMetaData):ChartMetaData {
data.setFieldDefault("displayName", data.name);
data.setFieldDefault("bpm", Flags.DEFAULT_BPM);
data.setFieldDefault("beatsPerMeasure", Flags.DEFAULT_BEATS_PER_MEASURE);
data.setFieldDefault("stepsPerBeat", Flags.DEFAULT_STEPS_PER_BEAT);
data.setFieldDefault("icon", Flags.DEFAULT_HEALTH_ICON);
data.setFieldDefault("coopAllowed", Flags.DEFAULT_COOP_ALLOWED);
data.setFieldDefault("opponentModeAllowed", Flags.DEFAULT_OPPONENT_MODE_ALLOWED);
data.setFieldDefault("instSuffix", "");
data.setFieldDefault("vocalsSuffix", "");
data.setFieldDefault("needsVoices", true);
data.setFieldDefault("difficulties", []);
data.setFieldDefault("variants", []);
return data;
}
public static function loadChartMeta(songName:String, ?variant:String, fromMods:Bool = true, includeMetaVariations = true):ChartMetaData {
var defaultPath = Paths.file('songs/$songName/meta.json'), isVariant = false;
var data:ChartMetaData = null, paths = (variant == null || variant == '') ? [defaultPath] : [Paths.file('songs/$songName/meta-$variant.json'), defaultPath];
@@ -109,19 +127,7 @@ class Chart {
if (isVariant) data.variant = variant;
else data.variant = null;
data.setFieldDefault("displayName", data.name);
data.setFieldDefault("bpm", Flags.DEFAULT_BPM);
data.setFieldDefault("beatsPerMeasure", Flags.DEFAULT_BEATS_PER_MEASURE);
data.setFieldDefault("stepsPerBeat", Flags.DEFAULT_STEPS_PER_BEAT);
data.setFieldDefault("icon", Flags.DEFAULT_HEALTH_ICON);
data.setFieldDefault("coopAllowed", Flags.DEFAULT_COOP_ALLOWED);
data.setFieldDefault("opponentModeAllowed", Flags.DEFAULT_OPPONENT_MODE_ALLOWED);
data.setFieldDefault("instSuffix", "");
data.setFieldDefault("vocalsSuffix", "");
data.setFieldDefault("needsVoices", true);
data.setFieldDefault("difficulties", []);
data.setFieldDefault("variants", []);
defaultChartMetaFields(data);
if (data.difficulties.length <= 0) {
var path = 'songs/$songName/charts/';
@@ -283,7 +289,6 @@ class Chart {
var eventsPath = '$songPath/events.json', events = filterEventsForSaving(chart.events, false, true);
if (events.length != 0) CoolUtil.safeSaveFile(eventsPath, Json.stringify({events: events}, null, prettyPrint));
else if (FileSystem.exists(eventsPath)) FileSystem.deleteFile(eventsPath);
}
#end
@@ -332,6 +337,7 @@ class Chart {
public static inline function filterMetaForSaving(meta:ChartMetaData):ChartMetaData {
var data:Dynamic = Reflect.copy(meta);
if (data.color != null) data.color = FlxColor.fromInt(data.color).toWebString(); // dont even ask me - Nex
Reflect.deleteField(data, "name");
Reflect.deleteField(data, 'parsedColor');
Reflect.deleteField(data, 'metas');
Reflect.deleteField(data, "variant");
@@ -41,7 +41,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
for (d in s.difficulties) if (d != '') screen.add(makeChartOption(d, isVariant ? s.variant : null, s.name));
screen.add(new Separator());
for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
if (s.variants != null) for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
#if sys
screen.insert(0, new NewOption(getID('newDifficulty'), getID('newDifficultyDesc'), () -> {
@@ -113,6 +113,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
// Add to List
if (variant != null && curSong != null) {
if (curSong.variants == null) curSong.variants.push(variant);
curSong.variants.push(variant);
curSong.metas.set(variant, creation.meta);
@@ -357,7 +357,8 @@ class SongCreationScreen extends UISubstateWindow {
}
// for variations
function formatMeta(meta:ChartMetaData):ChartMetaData return meta;
function formatMeta(meta:ChartMetaData):ChartMetaData
return funkin.backend.chart.Chart.defaultChartMetaFields(meta);
function getChartSavePath(meta:ChartMetaData, diff:String):String
return 'charts/${meta.variant != null && meta.variant != "" ? meta.variant + "/" : ""}$diff.json';
@@ -432,7 +433,7 @@ class SongCreationScreen extends UISubstateWindow {
color: colorWheel.curColor,
opponentModeAllowed: opponentModeCheckbox.checked,
coopAllowed: coopAllowedCheckbox.checked,
difficulties: [for (diff in difficultiesTextBox.label.text.split(",")) diff.trim()],
difficulties: [for (diff in difficultiesTextBox.label.text.split(",")) diff.trim()]
});
if (onSave != null) onSave({
@@ -39,6 +39,6 @@ class VariationCreationScreen extends SongCreationScreen {
meta.variant = meta.name;
meta.vocalsSuffix = meta.instSuffix = '-${meta.variant}';
meta.name = parentMeta.name;
return meta;
return super.formatMeta(meta);
}
}
+6 -4
View File
@@ -505,10 +505,12 @@ class FreeplayState extends MusicBeatState
curDifficulties = songs[curSelected].difficulties.copy();
for (i in 0...curDifficulties.length) curDiffMetaKeys.push(null);
var meta:ChartMetaData;
for (variant in songs[curSelected].variants) if ((meta = songs[curSelected].metas.get(variant)) != null) {
curDifficulties = curDifficulties.concat(meta.difficulties);
for (i in 0...meta.difficulties.length) curDiffMetaKeys.push(variant);
if (songs[curSelected].variants != null) {
var meta:ChartMetaData;
for (variant in songs[curSelected].variants) if ((meta = songs[curSelected].metas.get(variant)) != null) {
curDifficulties = curDifficulties.concat(meta.difficulties);
for (i in 0...meta.difficulties.length) curDiffMetaKeys.push(variant);
}
}
}