(svn r3153) - Feature: [ 1276827 ] Drag and drop rocky areas in scenario editor (MeusH-ish)
authorDarkvater
Mon, 07 Nov 2005 16:19:45 +0000
changeset 2615 4f6f464ba3eb
parent 2614 0e69ad985358
child 2616 e47170379049
(svn r3153) - Feature: [ 1276827 ] Drag and drop rocky areas in scenario editor (MeusH-ish)
gui.h
main_gui.c
terraform_gui.c
--- a/gui.h	Mon Nov 07 14:34:23 2005 +0000
+++ b/gui.h	Mon Nov 07 16:19:45 2005 +0000
@@ -74,7 +74,8 @@
 	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 */
--- a/main_gui.c	Mon Nov 07 14:34:23 2005 +0000
+++ b/main_gui.c	Mon Nov 07 16:19:45 2005 +0000
@@ -1211,11 +1211,7 @@
 
 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)
--- a/terraform_gui.c	Mon Nov 07 14:34:23 2005 +0000
+++ b/terraform_gui.c	Mon Nov 07 16:19:45 2005 +0000
@@ -62,6 +62,33 @@
 	_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 @@
 	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;