mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 07:29:44 +00:00
(svn r18984) -Add: Viewport place methods for dragging a line with limited size.
This commit is contained in:
parent
615324130b
commit
8849943da5
@ -2526,6 +2526,8 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
|
|||||||
sx = _thd.selstart.x;
|
sx = _thd.selstart.x;
|
||||||
sy = _thd.selstart.y;
|
sy = _thd.selstart.y;
|
||||||
|
|
||||||
|
int limit = 0;
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case VPM_X_OR_Y: // drag in X or Y direction
|
case VPM_X_OR_Y: // drag in X or Y direction
|
||||||
if (abs(sy - y) < abs(sx - x)) {
|
if (abs(sy - y) < abs(sx - x)) {
|
||||||
@ -2536,15 +2538,29 @@ void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method)
|
|||||||
style = HT_DIR_Y;
|
style = HT_DIR_Y;
|
||||||
}
|
}
|
||||||
goto calc_heightdiff_single_direction;
|
goto calc_heightdiff_single_direction;
|
||||||
|
|
||||||
|
case VPM_X_LIMITED: // Drag in X direction (limited size).
|
||||||
|
limit = (_thd.sizelimit - 1) * TILE_SIZE;
|
||||||
|
/* Fallthrough. */
|
||||||
|
|
||||||
case VPM_FIX_X: // drag in Y direction
|
case VPM_FIX_X: // drag in Y direction
|
||||||
x = sx;
|
x = sx;
|
||||||
style = HT_DIR_Y;
|
style = HT_DIR_Y;
|
||||||
goto calc_heightdiff_single_direction;
|
goto calc_heightdiff_single_direction;
|
||||||
|
|
||||||
|
case VPM_Y_LIMITED: // Drag in Y direction (limited size).
|
||||||
|
limit = (_thd.sizelimit - 1) * TILE_SIZE;
|
||||||
|
/* Fallthrough. */
|
||||||
|
|
||||||
case VPM_FIX_Y: // drag in X direction
|
case VPM_FIX_Y: // drag in X direction
|
||||||
y = sy;
|
y = sy;
|
||||||
style = HT_DIR_X;
|
style = HT_DIR_X;
|
||||||
|
|
||||||
calc_heightdiff_single_direction:;
|
calc_heightdiff_single_direction:;
|
||||||
|
if (limit > 0) {
|
||||||
|
x = sx + Clamp(x - sx, -limit, limit);
|
||||||
|
y = sy + Clamp(y - sy, -limit, limit);
|
||||||
|
}
|
||||||
if (_settings_client.gui.measure_tooltip) {
|
if (_settings_client.gui.measure_tooltip) {
|
||||||
TileIndex t0 = TileVirtXY(sx, sy);
|
TileIndex t0 = TileVirtXY(sx, sy);
|
||||||
TileIndex t1 = TileVirtXY(x, y);
|
TileIndex t1 = TileVirtXY(x, y);
|
||||||
@ -2567,11 +2583,12 @@ calc_heightdiff_single_direction:;
|
|||||||
ShowMeasurementTooltips(measure_strings_length[index], index, params);
|
ShowMeasurementTooltips(measure_strings_length[index], index, params);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VPM_X_AND_Y_LIMITED: { // drag an X by Y constrained rect area
|
case VPM_X_AND_Y_LIMITED: // Drag an X by Y constrained rect area.
|
||||||
int limit = (_thd.sizelimit - 1) * TILE_SIZE;
|
limit = (_thd.sizelimit - 1) * TILE_SIZE;
|
||||||
x = sx + Clamp(x - sx, -limit, limit);
|
x = sx + Clamp(x - sx, -limit, limit);
|
||||||
y = sy + Clamp(y - sy, -limit, limit);
|
y = sy + Clamp(y - sy, -limit, limit);
|
||||||
} // Fallthrough
|
/* Fallthrough. */
|
||||||
|
|
||||||
case VPM_X_AND_Y: { // drag an X by Y area
|
case VPM_X_AND_Y: { // drag an X by Y area
|
||||||
if (_settings_client.gui.measure_tooltip) {
|
if (_settings_client.gui.measure_tooltip) {
|
||||||
static const StringID measure_strings_area[] = {
|
static const StringID measure_strings_area[] = {
|
||||||
|
@ -77,6 +77,8 @@ enum ViewportPlaceMethod {
|
|||||||
VPM_X_AND_Y_LIMITED = 4, ///< area of land of limited size
|
VPM_X_AND_Y_LIMITED = 4, ///< area of land of limited size
|
||||||
VPM_FIX_HORIZONTAL = 5, ///< drag only in horizontal direction
|
VPM_FIX_HORIZONTAL = 5, ///< drag only in horizontal direction
|
||||||
VPM_FIX_VERTICAL = 6, ///< drag only in vertical direction
|
VPM_FIX_VERTICAL = 6, ///< drag only in vertical direction
|
||||||
|
VPM_X_LIMITED = 7, ///< Drag only in X axis with limited size
|
||||||
|
VPM_Y_LIMITED = 8, ///< Drag only in Y axis with limited size
|
||||||
VPM_RAILDIRS = 0x40, ///< all rail directions
|
VPM_RAILDIRS = 0x40, ///< all rail directions
|
||||||
VPM_SIGNALDIRS = 0x80, ///< similiar to VMP_RAILDIRS, but with different cursor
|
VPM_SIGNALDIRS = 0x80, ///< similiar to VMP_RAILDIRS, but with different cursor
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user