|
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 } |