@@ -8,6 +8,13 @@ import funkin.menus.TitleState;
8
8
import funkin .menus .BetaWarningState ;
9
9
import funkin .backend .chart .EventsData ;
10
10
import flixel .FlxState ;
11
+ import haxe .io .Path ;
12
+
13
+ @dox (hide )
14
+ typedef AddonInfo = {
15
+ var name : String ;
16
+ var path : String ;
17
+ }
11
18
12
19
/**
13
20
* Simple state used for loading the game
@@ -32,25 +39,64 @@ class MainState extends FlxState {
32
39
Paths .assetsTree .reset ();
33
40
34
41
#if MOD_SUPPORT
35
- var _lowPriorityAddons : Array <String > = [];
36
- var _highPriorityAddons : Array <String > = [];
37
- var _noPriorityAddons : Array <String > = [];
38
- if (FileSystem .exists (ModsFolder .addonsPath ) && FileSystem .isDirectory (ModsFolder .addonsPath )) {
39
- for (i => addon in [for (dir in FileSystem .readDirectory (ModsFolder .addonsPath )) if (FileSystem .isDirectory (' ${ModsFolder .addonsPath }$dir ' )) dir ]) {
40
- if (addon .startsWith (" [LOW]" )) _lowPriorityAddons .insert (0 , addon );
41
- else if (addon .startsWith (" [HIGH]" )) _highPriorityAddons .insert (0 , addon );
42
- else _noPriorityAddons .insert (0 , addon );
42
+ inline function isDirectory (path : String ): Bool
43
+ return FileSystem .exists (path ) && FileSystem .isDirectory (path );
44
+
45
+ inline function ltrim (str : String , prefix : String ): String
46
+ return str .substr (prefix .length ).ltrim ();
47
+
48
+ inline function loadLib (path : String , name : String )
49
+ Paths .assetsTree .addLibrary (ModsFolder .loadModLib (path , name ));
50
+
51
+ var _lowPriorityAddons : Array <AddonInfo > = [];
52
+ var _highPriorityAddons : Array <AddonInfo > = [];
53
+ var _noPriorityAddons : Array <AddonInfo > = [];
54
+
55
+ var addonPaths = [
56
+ ModsFolder .addonsPath ,
57
+ (
58
+ ModsFolder .currentModFolder != null ?
59
+ ModsFolder .modsPath + ModsFolder .currentModFolder + " /addons/" :
60
+ null
61
+ )
62
+ ];
63
+
64
+ for (path in addonPaths ) {
65
+ if (path == null ) continue ;
66
+ if (! isDirectory (path )) continue ;
67
+
68
+ for (addon in FileSystem .readDirectory (path )) {
69
+ if (! FileSystem .isDirectory (path + addon )) {
70
+ switch (Path .extension (addon ).toLowerCase ()) {
71
+ case ' zip' :
72
+ addon = Path .withoutExtension (addon );
73
+ default :
74
+ continue ;
75
+ }
76
+ }
77
+
78
+ var data : AddonInfo = {
79
+ name : addon ,
80
+ path : path + addon
81
+ };
82
+
83
+ if (addon .startsWith (" [LOW]" )) _lowPriorityAddons .insert (0 , data );
84
+ else if (addon .startsWith (" [HIGH]" )) _highPriorityAddons .insert (0 , data );
85
+ else _noPriorityAddons .insert (0 , data );
43
86
}
44
- for (addon in _lowPriorityAddons )
45
- Paths .assetsTree .addLibrary (ModsFolder .loadModLib (' ${ModsFolder .addonsPath }$addon ' , StringTools .ltrim (addon .substr (" [LOW]" .length ))));
46
87
}
88
+
89
+ for (addon in _lowPriorityAddons )
90
+ loadLib (addon .path , ltrim (addon .name , " [LOW]" ));
91
+
47
92
if (ModsFolder .currentModFolder != null )
48
- Paths . assetsTree . addLibrary (ModsFolder .loadModLib ( ' ${ ModsFolder . modsPath }${ ModsFolder .currentModFolder } ' , ModsFolder .currentModFolder ) );
93
+ loadLib (ModsFolder .modsPath + ModsFolder .currentModFolder , ModsFolder .currentModFolder );
49
94
50
- if (FileSystem .exists (ModsFolder .addonsPath ) && FileSystem .isDirectory (ModsFolder .addonsPath )){
51
- for (addon in _noPriorityAddons ) Paths .assetsTree .addLibrary (ModsFolder .loadModLib (' ${ModsFolder .addonsPath }$addon ' , addon ));
52
- for (addon in _highPriorityAddons ) Paths .assetsTree .addLibrary (ModsFolder .loadModLib (' ${ModsFolder .addonsPath }$addon ' , StringTools .ltrim (addon .substr (" [HIGH]" .length ))));
53
- }
95
+ for (addon in _noPriorityAddons )
96
+ loadLib (addon .path , addon .name );
97
+
98
+ for (addon in _highPriorityAddons )
99
+ loadLib (addon .path , ltrim (addon .name , " [HIGH]" ));
54
100
#end
55
101
56
102
MusicBeatTransition .script = " " ;
0 commit comments