Skip to content

Commit 643031c

Browse files
committed
Partially working YAML Importing
1 parent aa584da commit 643031c

File tree

3 files changed

+70
-63
lines changed

3 files changed

+70
-63
lines changed

source/archipelago/APEntryState.hx

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -311,49 +311,18 @@ class APEntryState extends MusicBeatState
311311

312312
var yamlImport = new PsychUIButton(0, 0, "Import YAML", function()
313313
{
314-
if(!fileDialog.completed) return;
315-
lowFilterAmount = 0.0134;
316-
/*fileDialog.open(_slotInput.text, [new FileFilter('YAML', 'yaml')], function()
317-
{
318-
FlxTween.num(0.0134, 1, 1, {ease: FlxEase.sineInOut}, function(t) {
319-
APEntryState.lowFilterAmount = t;
320-
});
321-
try
322-
{
323-
var filePath:String = fileDialog.path.replace('\\', '/');
324-
var loadedFile = Yaml.parse(fileDialog.data, Parser.options().useMaps());
325-
trace(Yaml.parse(fileDialog.data, Parser.options().useMaps()));
326-
trace('Name: ' + loadedFile.get('name'));
327-
gameSettings.name = loadedFile.get('name');
328-
_slotInput.text = loadedFile.get('name');
329-
var fnfData = Reflect.getProperty(loadedFile, 'Friday Night Funkin');//loadedFile.get('Friday Night Funkin');
330-
trace(fnfData);
331-
gameSettings.FNF.progression_balancing = fnfData.get('progression_balancing');
332-
gameSettings.FNF.accessibility = fnfData.get('accessibility');
333-
gameSettings.FNF.mods_enabled = stringToBool(fnfData.get('mods_enabled'));
334-
gameSettings.FNF.deathlink = stringToBool(fnfData.get('deathlink'));
335-
gameSettings.FNF.unlock_type = fnfData.get('unlock_type');
336-
gameSettings.FNF.unlock_method = fnfData.get('unlock_method');
337-
gameSettings.FNF.ticket_percentage = Std.parseInt(fnfData.get('ticket_percentage'));
338-
gameSettings.FNF.ticket_win_percentage = Std.parseInt(fnfData.get('ticket_win_percentage'));
339-
gameSettings.FNF.chart_modifier_change_chance = Std.parseInt(fnfData.get('chart_modifier_change_chance'));
340-
gameSettings.FNF.trapAmount = Std.parseInt(fnfData.get('trapAmount'));
341-
gameSettings.FNF.bbcWeight = Std.parseInt(fnfData.get('bbcWeight'));
342-
gameSettings.FNF.ghostChatWeight = Std.parseInt(fnfData.get('ghostChatWeight'));
343-
gameSettings.FNF.svcWeight = Std.parseInt(fnfData.get('svcWeight'));
344-
gameSettings.FNF.tutorialWeight = Std.parseInt(fnfData.get('tutorialWeight'));
345-
gameSettings.FNF.fakeTransWeight = Std.parseInt(fnfData.get('fakeTransWeight'));
346-
gameSettings.FNF.shieldWeight = Std.parseInt(fnfData.get('shieldWeight'));
347-
gameSettings.FNF.MHPWeight = Std.parseInt(fnfData.get('MHPWeight'));
348-
gameSettings.FNF.accrequirement = fnfData.get('accrequirement');
349-
gameSettings.FNF.graderequirement = fnfData.get('graderequirement');
350-
gameSettings.FNF.song_limit = fnfData.get('song_limit');
351-
}
352-
catch(e:Exception)
353-
{
354-
trace(e.stack);
355-
}
356-
});*/
314+
var yamlContent = yutautil.ImprovedFileHandling.loadFile("Import YAML", [new FileFilter('yaml', 'FNF AP YAML File')], Text);
315+
if (yamlContent != null) {
316+
try {
317+
var yaml = new archipelago.APYaml(yamlContent);
318+
gameSettings.name = yaml.name; _slotInput.text = yaml.name;
319+
for (field in Reflect.fields(yaml.settings)) {
320+
if (Reflect.hasField(gameSettings.FNF, field)) {
321+
Reflect.setField(gameSettings.FNF, field, Reflect.field(yaml.settings, field));
322+
}
323+
}
324+
} catch(e) { trace('YAML import error: $e'); }
325+
}
357326
});
358327
yamlImport.x = (FlxG.width / 2) + 10 + yamlImport.width;
359328
yamlImport.y = yamlGen.y - 50;

source/archipelago/APYaml.hx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package yutautil;
1+
package archipelago;
22

33
import haxe.format.JsonParser;
44
import haxe.ds.StringMap;
@@ -43,6 +43,13 @@ class APYaml {
4343
var key = keyValue[0].trim();
4444
var value = keyValue[1].trim();
4545

46+
if (key == "game")
47+
this.game = value;
48+
else if (key == "name")
49+
this.name = value;
50+
else if (key == "description")
51+
this.description = value;
52+
4653
if (value.startsWith("[") && value.endsWith("]")) {
4754
value = value.substr(1, value.length - 2);
4855
sectionData.set(key, value.split(",").map(function(item) return item.trim()));

source/yutautil/ImprovedFileHandling.hx

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,53 @@ enum ReadType {
1414
Bytes;
1515
}
1616

17+
abstract Filter(FileFilter) from FileFilter to FileFilter {
18+
public inline function new(ext:String, ?desc:String) {
19+
this = {
20+
ext: ext,
21+
desc: desc != null ? desc : '${ext.toUpperCase()} File'
22+
}
23+
}
24+
25+
@:from static inline function fromObject(obj:{ext:String, ?desc:String}):Filter {
26+
return new Filter(obj.ext, obj.desc);
27+
}
28+
29+
@:from static inline function fromOpenFLFilter(filter:openfl.net.FileFilter):Filter {
30+
return new Filter(filter.extension, filter.description);
31+
}
32+
33+
public var ext(get, never):String;
34+
public var desc(get, never):String;
35+
36+
function get_ext():String return this.ext;
37+
function get_desc():String return this.desc;
38+
}
39+
1740
class ImprovedFileHandling {
1841
public static var lastPath:String = "";
19-
public static function openFile(title:String, ?filters:Array<FileFilter>, ?preserve_cwd:Bool=true):String {
42+
public static function openFile(title:String, ?filters:OneOrMore<Filter>, ?preserve_cwd:Bool=true):String {
2043
if (filters != null) {
2144
for (filter in filters) {
22-
filter.desc = filter.desc != null ? filter.desc : filter.ext.toUpperCase() + " File";
45+
var f:FileFilter = filter;
46+
f.desc = f.desc != null ? f.desc : f.ext.toUpperCase() + " File";
2347
}
2448
}
25-
return FilePopup.open(title, filters, preserve_cwd);
49+
return FilePopup.open(title, cast filters, preserve_cwd);
2650
}
2751

28-
public static function saveFile(title:String, ?filter:FileFilter, ?preserve_cwd:Bool=true):String {
52+
public static function saveFile(title:String, ?filter:Filter, ?preserve_cwd:Bool=true):String {
2953
if (filter != null) {
30-
filter.desc = filter.desc != null ? filter.desc : '${filter.ext.toUpperCase()} File';
54+
var f:FileFilter = filter;
55+
f.desc = f.desc != null ? f.desc : '${f.ext.toUpperCase()} File';
3156
}
32-
var filePath = FilePopup.save(title, filter, preserve_cwd);
57+
var filePath = FilePopup.save(title, cast filter, preserve_cwd);
3358
if (filePath != null && filter != null) {
34-
var ext = "." + filter.ext;
59+
var f:FileFilter = filter;
60+
var ext = "." + f.ext;
3561
if (!filePath.endsWith(ext)) {
3662
if (filePath.endsWith(".")) {
37-
filePath += filter.ext;
63+
filePath += f.ext;
3864
} else {
3965
filePath += ext;
4066
}
@@ -48,10 +74,11 @@ class ImprovedFileHandling {
4874
return FilePopup.folder(title, preserve_cwd).trim();
4975
}
5076

51-
public static function loadFile(title:String, ?filters:Array<FileFilter>, readType:ReadType, ?operation:Dynamic->Dynamic, ?preserve_cwd:Bool=true):Dynamic {
77+
public static function loadFile(title:String, ?filters:OneOrMore<Filter>, readType:ReadType, ?operation:Dynamic->Dynamic, ?preserve_cwd:Bool=true):Dynamic {
5278
if (filters != null) {
5379
for (filter in filters) {
54-
filter.desc = filter.desc != null ? filter.desc : '${filter.ext.toUpperCase()} File';
80+
var f:FileFilter = filter;
81+
f.desc = f.desc != null ? f.desc : '${f.ext.toUpperCase()} File';
5582
}
5683
}
5784
var filePath = openFile(title, filters, preserve_cwd);
@@ -64,16 +91,18 @@ class ImprovedFileHandling {
6491
return null;
6592
}
6693

67-
public static function saveOperation(title:String, ?filter:FileFilter, writeType:ReadType, data:Dynamic, ?preserve_cwd:Bool=true):Bool {
94+
public static function saveOperation(title:String, ?filter:Filter, writeType:ReadType, data:Dynamic, ?preserve_cwd:Bool=true):Bool {
6895
if (filter != null) {
69-
filter.desc = filter.desc != null ? filter.desc : '${filter.ext.toUpperCase()} File';
96+
var f:FileFilter = filter;
97+
f.desc = f.desc != null ? f.desc : '${f.ext.toUpperCase()} File';
7098
}
7199
var filePath = saveFile(title, filter, preserve_cwd);
72100
if (filePath != null && filePath.trim() != "") {
73-
var ext = "." + filter.ext;
101+
var f:FileFilter = filter;
102+
var ext = "." + f.ext;
74103
if (!filePath.endsWith(ext)) {
75104
if (filePath.endsWith(".")) {
76-
filePath += filter.ext;
105+
filePath += f.ext;
77106
} else {
78107
filePath += ext;
79108
}
@@ -98,24 +127,26 @@ class ImprovedFileHandling {
98127
*/
99128
public static function multiSaveOperation(
100129
title:String,
101-
?filter:FileFilter,
130+
?filter:Filter,
102131
writeType:ReadType,
103132
mainData:Dynamic,
104133
?extraFiles:Array<{name:String, data:Dynamic}>,
105134
?preserve_cwd:Bool=true
106135
):Bool {
107136
if (filter != null) {
108-
filter.desc = filter.desc != null ? filter.desc : '${filter.ext.toUpperCase()} File';
137+
var f:FileFilter = filter;
138+
f.desc = f.desc != null ? f.desc : '${f.ext.toUpperCase()} File';
109139
}
110140
var filePaths:Array<String> = [];
111141

112142
// Save main file
113143
var mainFilePath = saveFile(title, filter, preserve_cwd);
114144
if (mainFilePath != null && mainFilePath.trim() != "") {
115-
var ext = "." + filter.ext;
145+
var f:FileFilter = filter;
146+
var ext = "." + f.ext;
116147
if (!mainFilePath.endsWith(ext)) {
117148
if (mainFilePath.endsWith(".")) {
118-
mainFilePath += filter.ext;
149+
mainFilePath += f.ext;
119150
} else {
120151
mainFilePath += ext;
121152
}
@@ -133,7 +164,7 @@ class ImprovedFileHandling {
133164
var extraPath = Path.join([dir, extra.name]);
134165
if (!extraPath.endsWith(ext)) {
135166
if (extraPath.endsWith(".")) {
136-
extraPath += filter.ext;
167+
extraPath += f.ext;
137168
} else {
138169
extraPath += ext;
139170
}

0 commit comments

Comments
 (0)