Use setLevelDirError for level not found & parse errors

This exports the previously-internal setLevelDirError function in
FileSystemUtils and uses it for if a level is not found or there was a
parsing error. Previously, if a level failed to load in these ways, it
would take you to the error screen with no error, while printing it to
the console. But this makes it more user-friendly.

As a bonus, the text is localizable, just like the existing usage of
FILESYSTEM_setLevelDirError for if a path couldn't be mounted.
This commit is contained in:
Misa
2023-05-17 10:09:59 -07:00
parent a5eb361448
commit 9387186083
15 changed files with 38 additions and 4 deletions

View File

@@ -1018,13 +1018,22 @@ bool customlevelclass::load(std::string _path)
if (!FILESYSTEM_loadTiXml2Document(_path.c_str(), doc))
{
vlog_warn("%s not found", _path.c_str());
FILESYSTEM_setLevelDirError(
loc::gettext("Level {path} not found"),
"path:str",
_path.c_str()
);
goto fail;
}
if (doc.Error())
{
vlog_error("Error parsing %s: %s", _path.c_str(), doc.ErrorStr());
FILESYSTEM_setLevelDirError(
loc::gettext("Error parsing {path}: {error}"),
"path:str, error:str",
_path.c_str(),
doc.ErrorStr()
);
goto fail;
}

View File

@@ -456,7 +456,7 @@ const char* FILESYSTEM_getLevelDirError(void)
return levelDirError;
}
static void setLevelDirError(const char* text, const char* args_index, ...)
void FILESYSTEM_setLevelDirError(const char* text, const char* args_index, ...)
{
levelDirHasError = true;
@@ -475,7 +475,7 @@ static bool FILESYSTEM_mountAssetsFrom(const char *fname)
if (real_dir == NULL)
{
setLevelDirError(
FILESYSTEM_setLevelDirError(
loc::gettext("Could not mount {path}: real directory doesn't exist"),
"path:str",
fname

View File

@@ -60,6 +60,7 @@ void FILESYSTEM_freeEnumerate(EnumHandle* handle);
bool FILESYSTEM_levelDirHasError(void);
void FILESYSTEM_clearLevelDirError(void);
const char* FILESYSTEM_getLevelDirError(void);
void FILESYSTEM_setLevelDirError(const char* text, const char* args_index, ...);
bool FILESYSTEM_openDirectoryEnabled(void);
bool FILESYSTEM_openDirectory(const char *dname);