package funkin; import flixel.graphics.frames.FlxAtlasFrames; import openfl.utils.AssetType; import openfl.utils.Assets as OpenFlAssets; /** * A core class which handles determining asset paths. */ class Paths { static var currentLevel:String; static public function setCurrentLevel(name:String) { currentLevel = name.toLowerCase(); } static function getPath(file:String, type:AssetType, library:Null) { if (library != null) return getLibraryPath(file, library); if (currentLevel != null) { var levelPath = getLibraryPathForce(file, currentLevel); if (OpenFlAssets.exists(levelPath, type)) return levelPath; } var levelPath = getLibraryPathForce(file, "shared"); if (OpenFlAssets.exists(levelPath, type)) return levelPath; return getPreloadPath(file); } static public function getLibraryPath(file:String, library = "preload") { return if (library == "preload" || library == "default") getPreloadPath(file); else getLibraryPathForce(file, library); } inline static function getLibraryPathForce(file:String, library:String) { return '$library:assets/$library/$file'; } inline static function getPreloadPath(file:String) { return 'assets/$file'; } inline static public function file(file:String, type:AssetType = TEXT, ?library:String) { return getPath(file, type, library); } public static inline function animateAtlas(path:String, ?library:String) { return getLibraryPath('images/$path', library); } inline static public function txt(key:String, ?library:String) { return getPath('data/$key.txt', TEXT, library); } inline static public function frag(key:String, ?library:String) { return getPath('shaders/$key.frag', TEXT, library); } inline static public function vert(key:String, ?library:String) { return getPath('shaders/$key.vert', TEXT, library); } inline static public function xml(key:String, ?library:String) { return getPath('data/$key.xml', TEXT, library); } inline static public function json(key:String, ?library:String) { return getPath('data/$key.json', TEXT, library); } static public function sound(key:String, ?library:String) { return getPath('sounds/$key.${Constants.EXT_SOUND}', SOUND, library); } inline static public function soundRandom(key:String, min:Int, max:Int, ?library:String) { return sound(key + FlxG.random.int(min, max), library); } inline static public function music(key:String, ?library:String) { return getPath('music/$key.${Constants.EXT_SOUND}', MUSIC, library); } inline static public function videos(key:String, ?library:String) { return getPath('videos/$key.${Constants.EXT_VIDEO}', BINARY, library); } inline static public function voices(song:String, ?suffix:String = '') { if (suffix == null) suffix = ""; // no suffix, for a sorta backwards compatibility with older-ish voice files return 'songs:assets/songs/${song.toLowerCase()}/Voices$suffix.${Constants.EXT_SOUND}'; } inline static public function inst(song:String, ?suffix:String = '') { return 'songs:assets/songs/${song.toLowerCase()}/Inst$suffix.${Constants.EXT_SOUND}'; } inline static public function image(key:String, ?library:String) { return getPath('images/$key.png', IMAGE, library); } inline static public function font(key:String) { return 'assets/fonts/$key'; } inline static public function ui(key:String, ?library:String) { return xml('ui/$key', library); } static public function getSparrowAtlas(key:String, ?library:String) { return FlxAtlasFrames.fromSparrow(image(key, library), file('images/$key.xml', library)); } inline static public function getPackerAtlas(key:String, ?library:String) { return FlxAtlasFrames.fromSpriteSheetPacker(image(key, library), file('images/$key.txt', library)); } }