Fix Variation Editor Crash
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user