terraform_gui.c
changeset 0 29654efe3188
child 30 e705d4f866e5
equal deleted inserted replaced
-1:000000000000 0:29654efe3188
       
     1 #include "stdafx.h"
       
     2 #include "ttd.h"
       
     3 
       
     4 #include "window.h"
       
     5 #include "gui.h"
       
     6 #include "viewport.h"
       
     7 #include "gfx.h"
       
     8 #include "command.h"
       
     9 #include "vehicle.h"
       
    10 
       
    11 
       
    12 static void CcTerraform(bool success, uint tile, uint32 p1, uint32 p2)
       
    13 {
       
    14 	if (success) {
       
    15 		SndPlayTileFx(0x1D, tile);
       
    16 	} else {
       
    17 		SetRedErrorSquare(_terraform_err_tile);
       
    18 	}
       
    19 }
       
    20 
       
    21 static void GenericRaiseLowerLand(uint tile, int mode)
       
    22 {
       
    23 	if (mode) {
       
    24 		DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0808_CAN_T_RAISE_LAND_HERE)); 
       
    25 	} else {
       
    26 		DoCommandP(tile, 8, (uint32)mode, CcTerraform, CMD_TERRAFORM_LAND | CMD_AUTO | CMD_MSG(STR_0809_CAN_T_LOWER_LAND_HERE)); 
       
    27 	}
       
    28 }
       
    29 
       
    30 
       
    31 typedef void OnButtonClick(Window *w);
       
    32 
       
    33 static const uint16 _terraform_keycodes[] = {
       
    34 	'1',
       
    35 	'2',
       
    36 	'3',
       
    37 	'4',
       
    38 	'5',
       
    39 	'6',
       
    40 	'7',
       
    41 };
       
    42 
       
    43 void PlaceProc_DemolishArea(uint tile)
       
    44 {
       
    45 	VpStartPlaceSizing(tile, VPM_X_AND_Y);
       
    46 }
       
    47 
       
    48 void PlaceProc_RaiseLand(uint tile)
       
    49 {
       
    50 	GenericRaiseLowerLand(tile, 1);
       
    51 }
       
    52 
       
    53 void PlaceProc_LowerLand(uint tile)
       
    54 {
       
    55 	GenericRaiseLowerLand(tile, 0);
       
    56 }
       
    57 
       
    58 void PlaceProc_LevelLand(uint tile)
       
    59 {
       
    60 	VpStartPlaceSizing(tile, VPM_X_AND_Y | (2<<4));
       
    61 }
       
    62 
       
    63 void PlaceProc_PlantTree(uint tile)
       
    64 {
       
    65 }
       
    66 
       
    67 
       
    68 
       
    69 
       
    70 static void TerraformClick_Dynamite(Window *w)
       
    71 {
       
    72 	HandlePlacePushButton(w, 2, ANIMCURSOR_DEMOLISH, 1, PlaceProc_DemolishArea);
       
    73 }
       
    74 
       
    75 static void TerraformClick_Lower(Window *w)
       
    76 {
       
    77 	HandlePlacePushButton(w, 3, ANIMCURSOR_LOWERLAND, 2, PlaceProc_LowerLand);
       
    78 }
       
    79 
       
    80 static void TerraformClick_Raise(Window *w)
       
    81 {
       
    82 	HandlePlacePushButton(w, 4, ANIMCURSOR_RAISELAND, 2, PlaceProc_RaiseLand);
       
    83 }
       
    84 
       
    85 static void TerraformClick_Level(Window *w)
       
    86 {
       
    87 	HandlePlacePushButton(w, 5, SPR_OPENTTD_BASE+69, 2, PlaceProc_LevelLand);
       
    88 }
       
    89 
       
    90 static void TerraformClick_BuyLand(Window *w)
       
    91 {
       
    92 	HandlePlacePushButton(w, 6, 4792, 1, PlaceProc_BuyLand);
       
    93 }
       
    94 
       
    95 static void TerraformClick_Trees(Window *w)
       
    96 {
       
    97 	if (HandlePlacePushButton(w, 8, 0, 1, PlaceProc_PlantTree)) ShowBuildTreesToolbar();	
       
    98 }
       
    99 
       
   100 static void TerraformClick_PlaceSign(Window *w)
       
   101 {
       
   102 	HandlePlacePushButton(w, 9, 722, 1, PlaceProc_Sign);
       
   103 }
       
   104 
       
   105 
       
   106 static OnButtonClick * const _terraform_button_proc[] = {
       
   107 	TerraformClick_Dynamite,
       
   108 	TerraformClick_Lower,
       
   109 	TerraformClick_Raise,
       
   110 	TerraformClick_Level,
       
   111 	TerraformClick_BuyLand,
       
   112 	0,
       
   113 	TerraformClick_Trees,
       
   114 	TerraformClick_PlaceSign,
       
   115 };
       
   116 
       
   117 
       
   118 
       
   119 static void TerraformToolbWndProc(Window *w, WindowEvent *e)
       
   120 {
       
   121 	switch(e->event) {
       
   122 	case WE_PAINT:
       
   123 		DrawWindowWidgets(w);
       
   124 		break;
       
   125 	case WE_CLICK:
       
   126 		if (e->click.widget >= 2 && e->click.widget != 7) {
       
   127 			_terraform_button_proc[e->click.widget - 2](w);
       
   128 		}
       
   129 		break;
       
   130 
       
   131 	case WE_KEYPRESS:
       
   132 	{
       
   133 		int i;
       
   134 		for(i=0; i!=lengthof(_terraform_keycodes); i++)
       
   135 			if (e->keypress.keycode == _terraform_keycodes[i]) {
       
   136 				e->keypress.cont = false;
       
   137 				_terraform_button_proc[i](w);
       
   138 				break;
       
   139 			}
       
   140 	}
       
   141 		break;
       
   142 
       
   143 	case WE_PLACE_OBJ:
       
   144 		_place_proc(e->place.tile);
       
   145 		return;
       
   146 
       
   147 	case WE_PLACE_DRAG:
       
   148 		VpSelectTilesWithMethod(e->place.pt.x, e->place.pt.y, e->place.userdata & 0xF);
       
   149 		break;
       
   150 
       
   151 	case WE_PLACE_MOUSEUP:
       
   152 		if (e->click.pt.x != -1) {
       
   153 			uint start_tile = e->place.starttile;
       
   154 			uint end_tile = e->place.tile;
       
   155 
       
   156 			if (e->place.userdata == VPM_X_AND_Y) {
       
   157 				DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_CLEAR_AREA | CMD_MSG(STR_00B5_CAN_T_CLEAR_THIS_AREA));
       
   158 			} else if (e->place.userdata == (VPM_X_AND_Y | (2<<4))) {
       
   159 				DoCommandP(end_tile, start_tile, 0, CcPlaySound10, CMD_LEVEL_LAND | CMD_AUTO);
       
   160 			} else if (e->place.userdata == VPM_X_AND_Y_LIMITED) {
       
   161 //				if (e->click.pt.x != -1) {
       
   162 //					DoCommandP(e->place.tile, _tree_to_plant, e->place.starttile, NULL, 
       
   163 //						CMD_PLANT_TREE | CMD_AUTO | CMD_MSG(STR_2805_CAN_T_PLANT_TREE_HERE));
       
   164 			} else {
       
   165 				assert(true);
       
   166 			}
       
   167 		}
       
   168 		break;
       
   169 
       
   170 	case WE_ABORT_PLACE_OBJ:
       
   171 		w->click_state = 0;
       
   172 		SetWindowDirty(w);
       
   173 
       
   174 		w = FindWindowById(WC_BUILD_STATION, 0);
       
   175 		if (w != NULL) WP(w,def_d).close=true;
       
   176 		w = FindWindowById(WC_BUILD_DEPOT, 0);
       
   177 		if (w != NULL) WP(w,def_d).close=true;
       
   178 		break;
       
   179 
       
   180 	case WE_PLACE_PRESIZE: {
       
   181 	} break;
       
   182 	}
       
   183 }
       
   184 
       
   185 static const Widget _terraform_widgets[] = {
       
   186 { WWT_CLOSEBOX,     7,   0,  10,   0,  13, STR_00C5, STR_018B_CLOSE_WINDOW},
       
   187 {  WWT_CAPTION,     7,  11, 157,   0,  13, STR_LANDSCAPING_TOOLBAR, STR_018C_WINDOW_TITLE_DRAG_THIS},
       
   188 
       
   189 
       
   190 {    WWT_PANEL,     7,   0,  21,  14,  35,  703, STR_018D_DEMOLISH_BUILDINGS_ETC},
       
   191 {    WWT_PANEL,     7,  22,  43,  14,  35,  695, STR_018E_LOWER_A_CORNER_OF_LAND},
       
   192 {    WWT_PANEL,     7,  44,  65,  14,  35,  694, STR_018F_RAISE_A_CORNER_OF_LAND},
       
   193 {    WWT_PANEL,     7,  66,  87,  14,  35,  SPR_OPENTTD_BASE+68, STR_LEVEL_LAND_TOOLTIP},
       
   194 {    WWT_PANEL,     7,  88, 109,  14,  35, 4791, STR_0329_PURCHASE_LAND_FOR_FUTURE},
       
   195 {    WWT_PANEL,     7, 110, 113,  14,  35,    0, 0x0},
       
   196 {    WWT_PANEL,     7, 114, 135,  14,  35,  742, STR_0185_PLANT_TREES_PLACE_SIGNS},
       
   197 {    WWT_PANEL,     7, 136, 157,  14,  35, SPR_OPENTTD_BASE+70, STR_0289_PLACE_SIGN},
       
   198 
       
   199 {      WWT_LAST},
       
   200 };
       
   201 
       
   202 static const WindowDesc _terraform_desc = {
       
   203 	640-158, 22+36, 158, 36,
       
   204 	WC_SCEN_LAND_GEN,0,
       
   205 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
       
   206 	_terraform_widgets,
       
   207 	TerraformToolbWndProc
       
   208 };
       
   209 
       
   210 
       
   211 
       
   212 void ShowTerraformToolbar()
       
   213 {
       
   214 	AllocateWindowDescFront(&_terraform_desc, 0);
       
   215 }