My current game, Dino Guy had a json file 'maps.json', that contained the filepaths to each map. As the game starts, the json file is parsed to an array of strings and all levels are loaded afterwards. But every time I added a map, I had to remember to add it's path to the json file.
This is a screenshot of the game
Some months ago, I wrote a tutorial on a great feature of the haxe programming language. You can find all the basics there. Basically macros are functions that are run at compile time. So here is another cool haxe macro that solved the problem I introduced:
public static macro function getFileList ( folder :String, extension: String) : Expr
{
// the list of files to return
var list : Array<Expr> = [];
// read everything that is in the directory
var content = FileSystem.readDirectory(folder);
for (s in content)
{
// if the file has the correct file extension, add it to the list
if (s.endsWith(extension))
{
var path = folder + s;
// convert the string to an expr and add it to list
list.push(macro $v{path});
}
}
// convert Array<Expr> to Expr and return
return macro $a{list};
}
This little function will now parse through a directory at compile time and return an 'Array<String>' with all files ending on the correct file extension. Another trick: Using an empty string ('""') as extension will automatically return all files in a folder.