107 lines
3.7 KiB
Haxe
107 lines
3.7 KiB
Haxe
package funkin.menus.credits;
|
|
|
|
import flixel.util.FlxColor;
|
|
import funkin.backend.assets.AssetsLibraryList.AssetSource;
|
|
import funkin.backend.system.github.GitHubContributor.CreditsGitHubContributor;
|
|
import funkin.options.OptionsScreen;
|
|
import funkin.options.TreeMenu;
|
|
import funkin.options.type.*;
|
|
import haxe.xml.Access;
|
|
|
|
class CreditsMain extends TreeMenu {
|
|
var bg:FlxSprite;
|
|
var items:Array<OptionType> = [];
|
|
|
|
public override function create() {
|
|
bg = new FlxSprite(-80).loadAnimatedGraphic(Paths.image('menus/menuBGBlue'));
|
|
// bg.scrollFactor.set();
|
|
bg.scale.set(1.15, 1.15);
|
|
bg.updateHitbox();
|
|
bg.screenCenter();
|
|
bg.scrollFactor.set();
|
|
bg.antialiasing = true;
|
|
add(bg);
|
|
|
|
for (i in funkin.backend.assets.ModsFolder.getLoadedMods()) {
|
|
var xmlPath = Paths.xml('config/credits/LIB_$i');
|
|
|
|
if (Paths.assetsTree.existsSpecific(xmlPath, "TEXT")) {
|
|
var access:Access = null;
|
|
try access = new Access(Xml.parse(Paths.assetsTree.getSpecificAsset(xmlPath, "TEXT")))
|
|
catch(e) Logs.trace('[CreditsMain] Error while parsing credits.xml: ${Std.string(e)}', ERROR);
|
|
if (access != null) for (c in parseCreditsFromXML(access)) items.push(c);
|
|
}
|
|
}
|
|
|
|
items.push(new TextOption("Codename Engine >", "Select this to see all the contributors of the engine!", function() {
|
|
optionsTree.add(Type.createInstance(CreditsCodename, []));
|
|
}));
|
|
items.push(new TextOption("Friday Night Funkin'", "Select this to open the itch.io page of the original game to donate!", function() {
|
|
CoolUtil.openURL(Flags.URL_FNF_ITCH);
|
|
}));
|
|
|
|
main = new OptionsScreen('Credits', 'The people who made this possible!', items);
|
|
super.create();
|
|
|
|
DiscordUtil.call("onMenuLoaded", ["Credits Menu"]);
|
|
}
|
|
|
|
/**
|
|
* XML STUFF
|
|
*/
|
|
public function parseCreditsFromXML(xml:Access, source:AssetSource = BOTH):Array<OptionType> {
|
|
var credsMenus:Array<OptionType> = [];
|
|
|
|
for(node in xml.elements) {
|
|
var desc = node.getAtt("desc").getDefault("No Description");
|
|
|
|
if (node.name == "github") {
|
|
if (!node.has.user) {
|
|
Logs.trace("A github node requires a user attribute.", WARNING);
|
|
continue;
|
|
}
|
|
|
|
var username = node.getAtt("user");
|
|
var user:CreditsGitHubContributor = { // Kind of forcing
|
|
login: username,
|
|
html_url: 'https://github.com/$username',
|
|
avatar_url: 'https://github.com/$username.png'
|
|
};
|
|
var opt:GithubIconOption = new GithubIconOption(user, desc, null,
|
|
node.has.customName ? node.att.customName : null,
|
|
node.has.size ? Std.parseInt(node.att.size) : 96,
|
|
node.has.portrait ? node.att.portrait.toLowerCase() == "false" ? false : true : true
|
|
);
|
|
if (node.has.color)
|
|
@:privateAccess opt.__text.color = FlxColor.fromString(node.att.color);
|
|
credsMenus.push(opt);
|
|
} else {
|
|
if (!node.has.name) {
|
|
Logs.trace("A credit node requires a name attribute.", WARNING);
|
|
continue;
|
|
}
|
|
var name = node.getAtt("name");
|
|
|
|
switch(node.name) {
|
|
case "credit":
|
|
var opt:PortraitOption = new PortraitOption(name, desc, function() if(node.has.url) CoolUtil.openURL(node.att.url),
|
|
node.has.icon && Paths.assetsTree.existsSpecific(Paths.image('credits/${node.att.icon}'), "IMAGE", source) ?
|
|
FlxG.bitmap.add(Paths.image('credits/${node.att.icon}')) : null, node.has.size ? Std.parseInt(node.att.size) : 96,
|
|
node.has.portrait ? node.att.portrait.toLowerCase() == "false" ? false : true : true
|
|
);
|
|
if (node.has.color)
|
|
@:privateAccess opt.__text.color = FlxColor.fromString(node.att.color);
|
|
credsMenus.push(opt);
|
|
|
|
case "menu":
|
|
credsMenus.push(new TextOption(name + " >", desc, function() {
|
|
optionsTree.add(new OptionsScreen(name, desc, parseCreditsFromXML(node, source)));
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
|
|
return credsMenus;
|
|
}
|
|
}
|