Merge branch 'master' into jgrpp
# Conflicts: # .github/workflows/ci-build.yml # .github/workflows/codeql.yml # .github/workflows/commit-checker.yml # .github/workflows/release-linux-legacy.yml # .github/workflows/release-linux.yml # .github/workflows/release-macos.yml # .github/workflows/release-windows-store.yml # .github/workflows/release-windows.yml # .github/workflows/upload-cdn.yml # .github/workflows/upload-gog.yml # .github/workflows/upload-steam.yml # src/console_cmds.cpp # src/core/math_func.hpp # src/fios.cpp # src/fios.h # src/intro_gui.cpp # src/network/network_server.cpp # src/openttd.cpp # src/settings.cpp # src/settings_gui.cpp # src/settings_internal.h # src/settings_table.cpp # src/settings_type.h # src/table/settings.h.preamble # src/table/settings/company_settings.ini # src/table/settings/currency_settings.ini # src/table/settings/difficulty_settings.ini # src/table/settings/economy_settings.ini # src/table/settings/game_settings.ini # src/table/settings/gui_settings.ini # src/table/settings/linkgraph_settings.ini # src/table/settings/locale_settings.ini # src/table/settings/misc_settings.ini # src/table/settings/multimedia_settings.ini # src/table/settings/network_private_settings.ini # src/table/settings/network_settings.ini # src/table/settings/news_display_settings.ini # src/table/settings/old_gameopt_settings.ini # src/table/settings/pathfinding_settings.ini # src/table/settings/script_settings.ini # src/table/settings/win32_settings.ini # src/table/settings/window_settings.ini # src/table/settings/world_settings.ini # src/viewport.cpp # src/viewport_func.h # src/window.cpp
This commit is contained in:
@@ -77,9 +77,8 @@ static uint _script_current_depth; ///< Depth of scripts running (used to abort
|
||||
/** File list storage for the console, for caching the last 'ls' command. */
|
||||
class ConsoleFileList : public FileList {
|
||||
public:
|
||||
ConsoleFileList() : FileList()
|
||||
ConsoleFileList(AbstractFileType abstract_filetype, bool show_dirs) : FileList(), abstract_filetype(abstract_filetype), show_dirs(show_dirs)
|
||||
{
|
||||
this->file_list_valid = false;
|
||||
}
|
||||
|
||||
/** Declare the file storage cache as being invalid, also clears all stored files. */
|
||||
@@ -96,15 +95,19 @@ public:
|
||||
void ValidateFileList(bool force_reload = false)
|
||||
{
|
||||
if (force_reload || !this->file_list_valid) {
|
||||
this->BuildFileList(FT_SAVEGAME, SLO_LOAD);
|
||||
this->BuildFileList(this->abstract_filetype, SLO_LOAD, this->show_dirs);
|
||||
this->file_list_valid = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool file_list_valid; ///< If set, the file list is valid.
|
||||
AbstractFileType abstract_filetype; ///< The abstract file type to list.
|
||||
bool show_dirs; ///< Whether to show directories in the file list.
|
||||
bool file_list_valid = false; ///< If set, the file list is valid.
|
||||
};
|
||||
|
||||
static ConsoleFileList _console_file_list; ///< File storage cache for the console.
|
||||
static ConsoleFileList _console_file_list_savegame{FT_SAVEGAME, true}; ///< File storage cache for savegames.
|
||||
static ConsoleFileList _console_file_list_scenario{FT_SCENARIO, false}; ///< File storage cache for scenarios.
|
||||
static ConsoleFileList _console_file_list_heightmap{FT_HEIGHTMAP, false}; ///< File storage cache for heightmaps.
|
||||
|
||||
/* console command defines */
|
||||
#define DEF_CONSOLE_CMD(function) static bool function([[maybe_unused]] byte argc, [[maybe_unused]] char *argv[])
|
||||
@@ -515,8 +518,8 @@ DEF_CONSOLE_CMD(ConLoad)
|
||||
if (argc != 2) return false;
|
||||
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
_console_file_list_savegame.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list_savegame.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
if (GetAbstractFileType(item->type) == FT_SAVEGAME) {
|
||||
_switch_mode = SM_LOAD_GAME;
|
||||
@@ -531,6 +534,57 @@ DEF_CONSOLE_CMD(ConLoad)
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConLoadScenario)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Load a scenario by name or index. Usage: 'load_scenario <file | number>'.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (argc != 2) return false;
|
||||
|
||||
const char *file = argv[1];
|
||||
_console_file_list_scenario.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list_scenario.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
if (GetAbstractFileType(item->type) == FT_SCENARIO) {
|
||||
_switch_mode = SM_LOAD_GAME;
|
||||
_file_to_saveload.Set(*item);
|
||||
} else {
|
||||
IConsolePrintF(CC_ERROR, "'%s' is not a scenario.", file);
|
||||
}
|
||||
} else {
|
||||
IConsolePrintF(CC_ERROR, "'%s' cannot be found.", file);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConLoadHeightmap)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Load a heightmap by name or index. Usage: 'load_heightmap <file | number>'.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (argc != 2) return false;
|
||||
|
||||
const char *file = argv[1];
|
||||
_console_file_list_heightmap.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list_heightmap.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
if (GetAbstractFileType(item->type) == FT_HEIGHTMAP) {
|
||||
_switch_mode = SM_START_HEIGHTMAP;
|
||||
_file_to_saveload.Set(*item);
|
||||
} else {
|
||||
IConsolePrintF(CC_ERROR, "'%s' is not a heightmap.", file);
|
||||
}
|
||||
} else {
|
||||
IConsolePrintF(CC_ERROR, "'%s' cannot be found.", file);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConRemove)
|
||||
{
|
||||
@@ -542,8 +596,8 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||
if (argc != 2) return false;
|
||||
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
_console_file_list_savegame.ValidateFileList();
|
||||
const FiosItem *item = _console_file_list_savegame.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
if (unlink(item->name.c_str()) != 0) {
|
||||
IConsolePrintF(CC_ERROR, "%s: Failed to delete file", file);
|
||||
@@ -552,7 +606,7 @@ DEF_CONSOLE_CMD(ConRemove)
|
||||
IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file);
|
||||
}
|
||||
|
||||
_console_file_list.InvalidateFileList();
|
||||
_console_file_list_savegame.InvalidateFileList();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -565,9 +619,41 @@ DEF_CONSOLE_CMD(ConListFiles)
|
||||
return true;
|
||||
}
|
||||
|
||||
_console_file_list.ValidateFileList(true);
|
||||
for (uint i = 0; i < _console_file_list.size(); i++) {
|
||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list[i].title.c_str());
|
||||
_console_file_list_savegame.ValidateFileList(true);
|
||||
for (uint i = 0; i < _console_file_list_savegame.size(); i++) {
|
||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list_savegame[i].title.c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* List all the scenarios */
|
||||
DEF_CONSOLE_CMD(ConListScenarios)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("List all loadable scenarios. Usage: 'list_scenarios'.");
|
||||
return true;
|
||||
}
|
||||
|
||||
_console_file_list_scenario.ValidateFileList(true);
|
||||
for (uint i = 0; i < _console_file_list_scenario.size(); i++) {
|
||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list_scenario[i].title.c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* List all the heightmaps */
|
||||
DEF_CONSOLE_CMD(ConListHeightmaps)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("List all loadable heightmaps. Usage: 'list_heightmaps'.");
|
||||
return true;
|
||||
}
|
||||
|
||||
_console_file_list_heightmap.ValidateFileList(true);
|
||||
for (uint i = 0; i < _console_file_list_heightmap.size(); i++) {
|
||||
IConsolePrintF(CC_DEFAULT, "%d) %s", i, _console_file_list_heightmap[i].title.c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -584,8 +670,8 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||
if (argc != 2) return false;
|
||||
|
||||
const char *file = argv[1];
|
||||
_console_file_list.ValidateFileList(true);
|
||||
const FiosItem *item = _console_file_list.FindItem(file);
|
||||
_console_file_list_savegame.ValidateFileList(true);
|
||||
const FiosItem *item = _console_file_list_savegame.FindItem(file);
|
||||
if (item != nullptr) {
|
||||
switch (item->type) {
|
||||
case FIOS_TYPE_DIR: case FIOS_TYPE_DRIVE: case FIOS_TYPE_PARENT:
|
||||
@@ -597,7 +683,7 @@ DEF_CONSOLE_CMD(ConChangeDirectory)
|
||||
IConsolePrintF(CC_ERROR, "%s: No such file or directory.", file);
|
||||
}
|
||||
|
||||
_console_file_list.InvalidateFileList();
|
||||
_console_file_list_savegame.InvalidateFileList();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -609,8 +695,8 @@ DEF_CONSOLE_CMD(ConPrintWorkingDirectory)
|
||||
}
|
||||
|
||||
/* XXX - Workaround for broken file handling */
|
||||
_console_file_list.ValidateFileList(true);
|
||||
_console_file_list.InvalidateFileList();
|
||||
_console_file_list_savegame.ValidateFileList(true);
|
||||
_console_file_list_savegame.InvalidateFileList();
|
||||
|
||||
IConsolePrint(CC_DEFAULT, FiosGetCurrentPath().c_str());
|
||||
return true;
|
||||
@@ -2406,6 +2492,7 @@ DEF_CONSOLE_CMD(ConListDirs)
|
||||
{ SAVE_DIR, "save", true },
|
||||
{ AUTOSAVE_DIR, "autosave", true },
|
||||
{ SCREENSHOT_DIR, "screenshot", true },
|
||||
{ SOCIAL_INTEGRATION_DIR, "social_integration", true },
|
||||
};
|
||||
|
||||
if (argc != 2) {
|
||||
@@ -3836,10 +3923,16 @@ void IConsoleStdLibRegister()
|
||||
IConsole::AliasRegister("scrollto_highlight", "scrollto %+; highlight_tile %+");
|
||||
IConsole::CmdRegister("alias", ConAlias);
|
||||
IConsole::CmdRegister("load", ConLoad);
|
||||
IConsole::CmdRegister("load_save", ConLoad);
|
||||
IConsole::CmdRegister("load_scenario", ConLoadScenario);
|
||||
IConsole::CmdRegister("load_heightmap", ConLoadHeightmap);
|
||||
IConsole::CmdRegister("rm", ConRemove);
|
||||
IConsole::CmdRegister("save", ConSave);
|
||||
IConsole::CmdRegister("saveconfig", ConSaveConfig);
|
||||
IConsole::CmdRegister("ls", ConListFiles);
|
||||
IConsole::CmdRegister("list_saves", ConListFiles);
|
||||
IConsole::CmdRegister("list_scenarios", ConListScenarios);
|
||||
IConsole::CmdRegister("list_heightmaps", ConListHeightmaps);
|
||||
IConsole::CmdRegister("cd", ConChangeDirectory);
|
||||
IConsole::CmdRegister("pwd", ConPrintWorkingDirectory);
|
||||
IConsole::CmdRegister("clear", ConClearBuffer);
|
||||
|
Reference in New Issue
Block a user