Merge branch 'master' into jgrpp

# Conflicts:
#	src/console_cmds.cpp
#	src/lang/belarusian.txt
This commit is contained in:
Jonathan G Rennison
2022-02-07 01:37:52 +00:00
4 changed files with 117 additions and 14 deletions

View File

@@ -278,6 +278,59 @@ DEF_CONSOLE_CMD(ConResetTile)
}
#endif /* _DEBUG */
/**
* Zoom map to given level.
* param level As defined by ZoomLevel and as limited by zoom_min/zoom_max from GUISettings.
* @return True when either console help was shown or a proper amount of parameters given.
*/
DEF_CONSOLE_CMD(ConZoomToLevel)
{
switch (argc) {
case 0:
IConsoleHelp("Set the current zoom level of the main viewport.");
IConsoleHelp("Usage: 'zoomto <level>'.");
IConsolePrintF(
CC_WARNING,
ZOOM_LVL_MIN < _settings_client.gui.zoom_min ?
"- The lowest zoom-in level allowed by current client settings is %u." :
"- The lowest supported zoom-in level is %u.",
std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min)
);
IConsolePrintF(
CC_WARNING,
_settings_client.gui.zoom_max < ZOOM_LVL_MAX ?
"- The highest zoom-out level allowed by current client settings is %u." :
"- The highest supported zoom-out level is %u.",
std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX)
);
return true;
case 2: {
uint32 level;
if (GetArgumentInteger(&level, argv[1])) {
if (level < ZOOM_LVL_MIN) {
IConsolePrintF(CC_ERROR, "Zoom-in levels below %u are not supported.", ZOOM_LVL_MIN);
} else if (level < _settings_client.gui.zoom_min) {
IConsolePrintF(CC_ERROR, "Current client settings do not allow zooming in below level %u.", _settings_client.gui.zoom_min);
} else if (level > ZOOM_LVL_MAX) {
IConsolePrintF(CC_ERROR, "Zoom-in levels above %u are not supported.", ZOOM_LVL_MAX);
} else if (level > _settings_client.gui.zoom_max) {
IConsolePrintF(CC_ERROR, "Current client settings do not allow zooming out beyond level %u.", _settings_client.gui.zoom_max);
} else {
Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
Viewport *vp = w->viewport;
while (vp->zoom > level) DoZoomInOutWindow(ZOOM_IN, w);
while (vp->zoom < level) DoZoomInOutWindow(ZOOM_OUT, w);
}
return true;
}
break;
}
}
return false;
}
/**
* Scroll to a tile on the map.
* param x tile number or tile x coordinate.
@@ -289,34 +342,44 @@ DEF_CONSOLE_CMD(ConResetTile)
*/
DEF_CONSOLE_CMD(ConScrollToTile)
{
switch (argc) {
case 0:
IConsoleHelp("Center the screen on a given tile.");
IConsoleHelp("Usage: 'scrollto <tile>' or 'scrollto <x> <y>'");
IConsoleHelp("Numbers can be either decimal (34161) or hexadecimal (0x4a5B).");
return true;
if (argc == 0) {
IConsoleHelp("Center the screen on a given tile.");
IConsoleHelp("Usage: 'scrollto [instant] <tile>' or 'scrollto [instant] <x> <y>'.");
IConsoleHelp("Numbers can be either decimal (34161) or hexadecimal (0x4a5B).");
IConsoleHelp("'instant' will immediately move and redraw viewport without smooth scrolling.");
return true;
}
if (argc < 2) return false;
case 2: {
uint32 arg_index = 1;
bool instant = false;
if (strcmp(argv[arg_index], "instant") == 0) {
++arg_index;
instant = true;
}
switch (argc - arg_index) {
case 1: {
uint32 result;
if (GetArgumentInteger(&result, argv[1])) {
if (GetArgumentInteger(&result, argv[arg_index])) {
if (result >= MapSize()) {
IConsolePrint(CC_ERROR, "Tile does not exist");
return true;
}
ScrollMainWindowToTile((TileIndex)result);
ScrollMainWindowToTile((TileIndex)result, instant);
return true;
}
break;
}
case 3: {
case 2: {
uint32 x, y;
if (GetArgumentInteger(&x, argv[1]) && GetArgumentInteger(&y, argv[2])) {
if (GetArgumentInteger(&x, argv[arg_index]) && GetArgumentInteger(&y, argv[arg_index + 1])) {
if (x >= MapSizeX() || y >= MapSizeY()) {
IConsolePrint(CC_ERROR, "Tile does not exist");
return true;
}
ScrollMainWindowToTile(TileXY(x, y));
ScrollMainWindowToTile(TileXY(x, y), instant);
return true;
}
break;
@@ -3441,6 +3504,7 @@ void IConsoleStdLibRegister()
IConsole::CmdRegister("screenshot", ConScreenShot);
IConsole::CmdRegister("minimap", ConMinimap);
IConsole::CmdRegister("script", ConScript);
IConsole::CmdRegister("zoomto", ConZoomToLevel);
IConsole::CmdRegister("scrollto", ConScrollToTile);
IConsole::CmdRegister("highlight_tile", ConHighlightTile);
IConsole::AliasRegister("scrollto_highlight", "scrollto %+; highlight_tile %+");