mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r3153) - Feature: [ 1276827 ] Drag and drop rocky areas in scenario editor (MeusH-ish)
This commit is contained in:
parent
7304bbe500
commit
947fc8a8ec
3
gui.h
3
gui.h
|
@ -74,7 +74,8 @@ enum { // max 32 - 4 = 28 types
|
|||
GUI_PlaceProc_LevelArea = 1 << 4,
|
||||
GUI_PlaceProc_DesertArea = 2 << 4,
|
||||
GUI_PlaceProc_WaterArea = 3 << 4,
|
||||
GUI_PlaceProc_ConvertRailArea = 4 << 4
|
||||
GUI_PlaceProc_ConvertRailArea = 4 << 4,
|
||||
GUI_PlaceProc_RockyArea = 5 << 4,
|
||||
};
|
||||
|
||||
/* misc_gui.c */
|
||||
|
|
|
@ -1211,11 +1211,7 @@ static void PlaceProc_LowerBigLand(TileIndex tile)
|
|||
|
||||
static void PlaceProc_RockyArea(TileIndex tile)
|
||||
{
|
||||
if (!IsTileType(tile, MP_CLEAR) && !IsTileType(tile, MP_TREES))
|
||||
return;
|
||||
|
||||
ModifyTile(tile, MP_SETTYPE(MP_CLEAR) | MP_MAP5, (_m[tile].m5 & ~0x1C) | 0xB);
|
||||
SndPlayTileFx(SND_1F_SPLAT, tile);
|
||||
VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_RockyArea);
|
||||
}
|
||||
|
||||
static void PlaceProc_LightHouse(TileIndex tile)
|
||||
|
|
|
@ -62,6 +62,33 @@ static void GenerateDesertArea(TileIndex end, TileIndex start)
|
|||
_generating_world = false;
|
||||
}
|
||||
|
||||
/** Scenario editor command that generates desert areas */
|
||||
static void GenerateRockyArea(TileIndex end, TileIndex start)
|
||||
{
|
||||
int size_x, size_y;
|
||||
bool success = false;
|
||||
int sx = TileX(start);
|
||||
int sy = TileY(start);
|
||||
int ex = TileX(end);
|
||||
int ey = TileY(end);
|
||||
|
||||
if (_game_mode != GM_EDITOR) return;
|
||||
|
||||
if (ex < sx) intswap(ex, sx);
|
||||
if (ey < sy) intswap(ey, sy);
|
||||
size_x = (ex - sx) + 1;
|
||||
size_y = (ey - sy) + 1;
|
||||
|
||||
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) {
|
||||
if (IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) {
|
||||
ModifyTile(tile, MP_SETTYPE(MP_CLEAR) | MP_MAP5, (_m[tile].m5 & ~0x1C) | 0xB);
|
||||
success = true;
|
||||
}
|
||||
} END_TILE_LOOP(tile, size_x, size_y, 0);
|
||||
|
||||
if (success) SndPlayTileFx(SND_1F_SPLAT, end);
|
||||
}
|
||||
|
||||
/**
|
||||
* A central place to handle all X_AND_Y dragged GUI functions.
|
||||
* @param we @WindowEvent variable holding in its higher bits (excluding the lower
|
||||
|
@ -82,6 +109,9 @@ bool GUIPlaceProcDragXY(const WindowEvent *we)
|
|||
case GUI_PlaceProc_LevelArea >> 4:
|
||||
DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_LEVEL_LAND | CMD_AUTO);
|
||||
break;
|
||||
case GUI_PlaceProc_RockyArea >> 4:
|
||||
GenerateRockyArea(end_tile, start_tile);
|
||||
break;
|
||||
case GUI_PlaceProc_DesertArea >> 4:
|
||||
GenerateDesertArea(end_tile, start_tile);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue