diff --git a/assets/languages/en/Editors.xml b/assets/languages/en/Editors.xml
index 80a6afbb..904e6332 100644
--- a/assets/languages/en/Editors.xml
+++ b/assets/languages/en/Editors.xml
@@ -380,6 +380,10 @@
UI Debug State
+
+ Wiki
+
+
Debug Options
diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx
index 58059ede..1d7da43f 100644
--- a/source/funkin/backend/assets/AssetsLibraryList.hx
+++ b/source/funkin/backend/assets/AssetsLibraryList.hx
@@ -1,6 +1,8 @@
package funkin.backend.assets;
+#if TRANSLATIONS_SUPPORT
import funkin.backend.assets.TranslatedAssetLibrary;
+#end
import funkin.backend.assets.IModsAssetLibrary;
import lime.utils.AssetLibrary;
@@ -17,8 +19,23 @@ class AssetsLibraryList extends AssetLibrary {
#end
public function removeLibrary(lib:AssetLibrary) {
- if (lib != null)
+ if (lib != null) {
libraries.remove(lib);
+ #if TRANSLATIONS_SUPPORT
+ // TODO: improve this code
+ for(k=>l in libraries) {
+ if(l == null) continue;
+ if(l is TranslatedAssetLibrary) {
+ var tlib = cast(l, TranslatedAssetLibrary);
+ var lib:Dynamic = lib;
+ if(tlib.forLibrary == lib) {
+ libraries.remove(tlib);
+ break;
+ }
+ }
+ }
+ #end
+ }
return lib;
}
public function existsSpecific(id:String, type:String, source:AssetSource = BOTH) {
@@ -130,9 +147,6 @@ class AssetsLibraryList extends AssetLibrary {
public function new(?base:AssetLibrary) {
super();
- #if TRANSLATIONS_SUPPORT
- __defaultLibraries.push(addLibrary(transLib = new TranslatedAssetLibrary(), BOTH));
- #end
__defaultLibraries.push(addLibrary(this.base = (base == null ? Assets.getLibrary("default") : base), SOURCE));
}
@@ -152,14 +166,25 @@ class AssetsLibraryList extends AssetLibrary {
addLibrary(d);
}
- public function addLibrary(lib:AssetLibrary, ?tag:AssetSource) {
- libraries.insert(#if TRANSLATIONS_SUPPORT libraries.indexOf(transLib) + 1 #else 0 #end, lib);
+ public function addLibrary(lib:AssetLibrary, ?tag:AssetSource, ?addTransLib:Bool = true) {
+ libraries.insert(0, lib);
if(tag != null)
lib.tag = tag;
- if(lib.tag == null) {
+
+ if(lib.tag == null) { // if tag is null, set it to MODS, so it doesnt set the tag on the libs that exists
lib.tag = MODS;
//trace('AssetLibrary ${getCleanLibrary(lib)} tag not set, defaulting to MODS');
}
+ #if TRANSLATIONS_SUPPORT
+ if(addTransLib) {
+ var cleanLib = getCleanLibrary(lib);
+ if(cleanLib != null && (cleanLib is IModsAssetLibrary)) {
+ var transLib = new TranslatedAssetLibrary(cast(cleanLib, IModsAssetLibrary));
+ transLib.tag = cleanLib.tag;
+ libraries.insert(0, transLib);
+ }
+ }
+ #end
return lib;
}
diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx
index f69d9cc4..9b3bf5f1 100644
--- a/source/funkin/backend/assets/ModsFolder.hx
+++ b/source/funkin/backend/assets/ModsFolder.hx
@@ -111,7 +111,9 @@ class ModsFolder {
var libs = [];
for (i in Paths.assetsTree.libraries) {
var l = AssetsLibraryList.getCleanLibrary(i);
+ #if TRANSLATIONS_SUPPORT
if(skipTranslated && (l is TranslatedAssetLibrary)) continue;
+ #end
if (l is ScriptedAssetLibrary || l is IModsAssetLibrary) libs.push(cast(l, IModsAssetLibrary));
}
return libs;
diff --git a/source/funkin/backend/assets/TranslatedAssetLibrary.hx b/source/funkin/backend/assets/TranslatedAssetLibrary.hx
index dfaa2e0c..8e9211f9 100644
--- a/source/funkin/backend/assets/TranslatedAssetLibrary.hx
+++ b/source/funkin/backend/assets/TranslatedAssetLibrary.hx
@@ -1,5 +1,6 @@
package funkin.backend.assets;
+import lime.utils.AssetLibrary as LimeAssetLibrary;
import openfl.utils.AssetLibrary;
import lime.media.AudioBuffer;
import lime.graphics.Image;
@@ -12,6 +13,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public var basePath:String;
public var prefix:String = TranslationUtil.LANG_FOLDER + "/";
+ public var forLibrary:IModsAssetLibrary;
+
public var langFolder(get, set):String;
@:noCompletion private inline function get_langFolder():String {
return libName;
@@ -21,13 +24,14 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
return libName;
}
- public function new(?langFolder:String) {
+ public function new(lib:IModsAssetLibrary, ?langFolder:String) {
super();
+ this.forLibrary = lib;
this.langFolder = langFolder;
}
function toString():String
- return '(TranslatedAssetLibrary: Lang: $libName)';
+ return '(TranslatedAssetLibrary: Lang: $libName | For: ${forLibrary})';
private inline function getAssetPath():String // because of the IModsAssetLibrary - Nex
return basePath;
@@ -39,7 +43,9 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getAudioBuffer(id:String):AudioBuffer
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ // TODO: rewrite this, once it works
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getAudioBuffer(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -49,7 +55,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getBytes(id:String):Bytes
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getBytes(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -59,7 +66,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getText(id:String):String
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getText(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -69,7 +77,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getFont(id:String):Font
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getFont(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -79,7 +88,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getImage(id:String):Image
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getImage(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -89,7 +99,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public override function getPath(id:String):String
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = cast(lib, AssetLibrary).getPath(formatPath(lib.prefix, id));
if(val != null) return val;
@@ -102,7 +113,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public function getFiles(folder:String):Array
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = lib.getFiles(formatPath(lib.prefix, folder));
if(val != null && val.length > 0) return val;
@@ -112,7 +124,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
public function getFolders(folder:String):Array
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
var val = lib.getFolders(formatPath(lib.prefix, folder));
if(val != null && val.length > 0) return val;
@@ -122,7 +135,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
private function __isCacheValid(cache:Map, asset:String, isLocal:Bool = false):Bool
{
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
// are you fucking serious (no the fucking switch doesnt work here) - Nex
@@ -141,7 +155,8 @@ class TranslatedAssetLibrary extends AssetLibrary implements IModsAssetLibrary {
private function __parseAsset(asset:String):Bool
{
@:privateAccess
- for(lib in ModsFolder.getLoadedModsLibs(true)) {
+ var libs = [forLibrary];
+ for(lib in libs) {
if(!(lib is AssetLibrary)) continue;
if(lib.__parseAsset(formatPath(lib.prefix, asset))) return true;
}
diff --git a/source/funkin/backend/system/framerate/AssetTreeInfo.hx b/source/funkin/backend/system/framerate/AssetTreeInfo.hx
index 60664797..93ebd9ff 100644
--- a/source/funkin/backend/system/framerate/AssetTreeInfo.hx
+++ b/source/funkin/backend/system/framerate/AssetTreeInfo.hx
@@ -1,5 +1,8 @@
package funkin.backend.system.framerate;
+#if TRANSLATIONS_SUPPORT
+import funkin.backend.assets.TranslatedAssetLibrary;
+#end
import funkin.backend.assets.AssetsLibraryList;
import funkin.backend.assets.IModsAssetLibrary;
import funkin.backend.assets.ScriptedAssetLibrary;
@@ -19,12 +22,20 @@ class AssetTreeInfo extends FramerateCategory {
var tag = l.tag.toString().toUpperCase();
- if (l is ScriptedAssetLibrary)
- text += '${Type.getClassName(Type.getClass(l))} - $tag - ${cast(l, ScriptedAssetLibrary).scriptName} (${cast(l, ScriptedAssetLibrary).modName} | ${cast(l, ScriptedAssetLibrary).libName} | ${cast(l, ScriptedAssetLibrary).prefix})\n';
+ text += '[$tag] ';
+
+ var className = Type.getClassName(Type.getClass(l));
+ className = className.substr(className.lastIndexOf(".") + 1);
+
+ #if TRANSLATIONS_SUPPORT
+ if (l is TranslatedAssetLibrary)
+ text += '${className} - ${cast(l, TranslatedAssetLibrary).langFolder} for (${cast(l, TranslatedAssetLibrary).forLibrary.modName})\n';
+ else #end if (l is ScriptedAssetLibrary)
+ text += '${className} - ${cast(l, ScriptedAssetLibrary).scriptName} (${cast(l, ScriptedAssetLibrary).modName} | ${cast(l, ScriptedAssetLibrary).libName} | ${cast(l, ScriptedAssetLibrary).prefix})\n';
else if (l is IModsAssetLibrary)
- text += '${Type.getClassName(Type.getClass(l))} - $tag - ${cast(l, IModsAssetLibrary).modName} - ${cast(l, IModsAssetLibrary).libName} (${cast(l, IModsAssetLibrary).prefix})\n';
+ text += '${className} - ${cast(l, IModsAssetLibrary).modName} - ${cast(l, IModsAssetLibrary).libName} (${cast(l, IModsAssetLibrary).prefix})\n';
else
- text += Std.string(l) + ' - $tag\n';
+ text += Std.string(l) + '\n';
}
}
if (text != "")
diff --git a/source/funkin/editors/EditorPicker.hx b/source/funkin/editors/EditorPicker.hx
index 45505fea..65076b20 100644
--- a/source/funkin/editors/EditorPicker.hx
+++ b/source/funkin/editors/EditorPicker.hx
@@ -35,6 +35,7 @@ class EditorPicker extends MusicBeatSubstate {
#end
{
name: "Wiki",
+ id: "wiki",
iconID: 5,
state: null,
onClick: function() {