Merge branch 'master' into jgrpp
# Conflicts: # src/console_cmds.cpp # src/lang/belarusian.txt
This commit is contained in:
@@ -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 %+");
|
||||
|
Reference in New Issue
Block a user