2005-07-24 14:12:37 +00:00
|
|
|
/* $Id$ */
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
#include "stdafx.h"
|
2005-06-02 19:30:21 +00:00
|
|
|
#include "openttd.h"
|
2005-02-13 11:18:02 +00:00
|
|
|
#include "table/sprites.h"
|
2004-11-25 10:47:30 +00:00
|
|
|
#include "table/strings.h"
|
2005-07-22 07:02:20 +00:00
|
|
|
#include "functions.h"
|
2004-12-15 22:18:54 +00:00
|
|
|
#include "map.h"
|
2004-08-09 17:04:08 +00:00
|
|
|
#include "window.h"
|
2004-12-08 15:46:13 +00:00
|
|
|
#include "station.h"
|
2004-08-09 17:04:08 +00:00
|
|
|
#include "gui.h"
|
|
|
|
#include "viewport.h"
|
|
|
|
#include "gfx.h"
|
2004-11-05 23:12:33 +00:00
|
|
|
#include "sound.h"
|
2004-08-09 17:04:08 +00:00
|
|
|
#include "command.h"
|
2005-07-21 22:15:02 +00:00
|
|
|
#include "variables.h"
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
static void ShowBuildDockStationPicker(void);
|
|
|
|
static void ShowBuildDocksDepotPicker(void);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2006-03-08 06:55:33 +00:00
|
|
|
static Axis _ship_depot_direction;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
void CcBuildDocks(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
if (success) {
|
2004-12-04 09:26:39 +00:00
|
|
|
SndPlayTileFx(SND_02_SPLAT, tile);
|
2004-08-09 17:04:08 +00:00
|
|
|
ResetObjectToPlace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
void CcBuildCanal(bool success, TileIndex tile, uint32 p1, uint32 p2)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2004-12-04 09:26:39 +00:00
|
|
|
if (success) SndPlayTileFx(SND_02_SPLAT, tile);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_Dock(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_DOCK | CMD_AUTO | CMD_MSG(STR_9802_CAN_T_BUILD_DOCK_HERE));
|
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_Depot(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
DoCommandP(tile, _ship_depot_direction, 0, CcBuildDocks, CMD_BUILD_SHIP_DEPOT | CMD_AUTO | CMD_MSG(STR_3802_CAN_T_BUILD_SHIP_DEPOT));
|
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_Buoy(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_AUTO | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE));
|
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_DemolishArea(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
- Fix: 'L' no longer opens ingame terraform bar in scenario editor bar, but the land generator one
- Feature: [ 1095110 ] Create Lake and draggable Create Desert tools (initial implementation GoneWacko), also added sticky buttons to land generator and town generator
- CodeChange: moved around some of the draggable tools, demystifying them
- CodeChange: change CmdBuildCanal to allow for XANDY dragging not only X or Y (only scenario editor)
- CodeChange: add some more enums to sprites.
- TODO: merge most of the ingame and scenario editor land terraform code. This can only be done after OnClickButton function is changed so it also includes the backreference to the widget being clicked, postponed to after 0.4.0
2005-04-02 23:05:09 +00:00
|
|
|
VpStartPlaceSizing(tile, VPM_X_AND_Y | GUI_PlaceProc_DemolishArea);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_BuildCanal(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
VpStartPlaceSizing(tile, VPM_X_OR_Y);
|
|
|
|
}
|
|
|
|
|
2005-06-24 12:38:35 +00:00
|
|
|
static void PlaceDocks_BuildLock(TileIndex tile)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_AUTO | CMD_MSG(STR_CANT_BUILD_LOCKS));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2006-11-22 16:08:01 +00:00
|
|
|
enum {
|
|
|
|
DTW_CANAL = 3,
|
|
|
|
DTW_LOCK = 4,
|
|
|
|
DTW_DEMOLISH = 6,
|
|
|
|
DTW_DEPOT = 7,
|
|
|
|
DTW_STATION = 8,
|
|
|
|
DTW_BUOY = 9
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Canal(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
HandlePlacePushButton(w, DTW_CANAL, SPR_CURSOR_CANAL, 1, PlaceDocks_BuildCanal);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Lock(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
HandlePlacePushButton(w, DTW_LOCK, SPR_CURSOR_LOCK, 1, PlaceDocks_BuildLock);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void BuildDocksClick_Demolish(Window *w)
|
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
HandlePlacePushButton(w, DTW_DEMOLISH, ANIMCURSOR_DEMOLISH, 1, PlaceDocks_DemolishArea);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Depot(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
if (HandlePlacePushButton(w, DTW_DEPOT, SPR_CURSOR_SHIP_DEPOT, 1, PlaceDocks_Depot)) ShowBuildDocksDepotPicker();
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Dock(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
if (HandlePlacePushButton(w, DTW_STATION, SPR_CURSOR_DOCK, 3, PlaceDocks_Dock)) ShowBuildDockStationPicker();
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Buoy(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-11-22 16:08:01 +00:00
|
|
|
HandlePlacePushButton(w, DTW_BUOY, SPR_CURSOR_BOUY, 1, PlaceDocks_Buoy);
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 17:42:04 +00:00
|
|
|
static void BuildDocksClick_Landscaping(Window *w)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2004-12-12 17:42:04 +00:00
|
|
|
ShowTerraformToolbar();
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
typedef void OnButtonClick(Window *w);
|
|
|
|
static OnButtonClick * const _build_docks_button_proc[] = {
|
|
|
|
BuildDocksClick_Canal,
|
|
|
|
BuildDocksClick_Lock,
|
2005-10-22 06:39:32 +00:00
|
|
|
NULL,
|
2004-12-12 17:42:04 +00:00
|
|
|
BuildDocksClick_Demolish,
|
|
|
|
BuildDocksClick_Depot,
|
|
|
|
BuildDocksClick_Dock,
|
|
|
|
BuildDocksClick_Buoy,
|
|
|
|
BuildDocksClick_Landscaping,
|
2004-08-09 17:04:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static void BuildDocksToolbWndProc(Window *w, WindowEvent *e)
|
|
|
|
{
|
2006-02-01 07:36:15 +00:00
|
|
|
switch (e->event) {
|
2004-08-09 17:04:08 +00:00
|
|
|
case WE_PAINT:
|
|
|
|
DrawWindowWidgets(w);
|
|
|
|
break;
|
|
|
|
|
2005-10-22 06:39:32 +00:00
|
|
|
case WE_CLICK:
|
2006-09-23 02:39:24 +00:00
|
|
|
if (e->we.click.widget - 3 >= 0 && e->we.click.widget != 5) _build_docks_button_proc[e->we.click.widget - 3](w);
|
2005-10-22 06:39:32 +00:00
|
|
|
break;
|
2005-01-15 08:58:31 +00:00
|
|
|
|
2005-10-23 13:04:44 +00:00
|
|
|
case WE_KEYPRESS:
|
2006-09-23 02:39:24 +00:00
|
|
|
switch (e->we.keypress.keycode) {
|
2005-01-08 09:40:22 +00:00
|
|
|
case '1': BuildDocksClick_Canal(w); break;
|
|
|
|
case '2': BuildDocksClick_Lock(w); break;
|
|
|
|
case '3': BuildDocksClick_Demolish(w); break;
|
|
|
|
case '4': BuildDocksClick_Depot(w); break;
|
|
|
|
case '5': BuildDocksClick_Dock(w); break;
|
|
|
|
case '6': BuildDocksClick_Buoy(w); break;
|
|
|
|
case 'l': BuildDocksClick_Landscaping(w); break;
|
2005-10-23 13:04:44 +00:00
|
|
|
default: return;
|
2005-01-08 09:40:22 +00:00
|
|
|
}
|
2005-10-23 13:04:44 +00:00
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
case WE_PLACE_OBJ:
|
2006-09-23 02:39:24 +00:00
|
|
|
_place_proc(e->we.place.tile);
|
2004-09-10 19:02:27 +00:00
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
case WE_PLACE_DRAG: {
|
2006-09-23 02:39:24 +00:00
|
|
|
VpSelectTilesWithMethod(e->we.place.pt.x, e->we.place.pt.y, e->we.place.userdata);
|
2004-08-09 17:04:08 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
case WE_PLACE_MOUSEUP:
|
2006-10-28 23:47:00 +00:00
|
|
|
if (e->we.place.pt.x != -1) {
|
2006-09-23 02:39:24 +00:00
|
|
|
if ((e->we.place.userdata & 0xF) == VPM_X_AND_Y) { // dragged actions
|
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
- Fix: 'L' no longer opens ingame terraform bar in scenario editor bar, but the land generator one
- Feature: [ 1095110 ] Create Lake and draggable Create Desert tools (initial implementation GoneWacko), also added sticky buttons to land generator and town generator
- CodeChange: moved around some of the draggable tools, demystifying them
- CodeChange: change CmdBuildCanal to allow for XANDY dragging not only X or Y (only scenario editor)
- CodeChange: add some more enums to sprites.
- TODO: merge most of the ingame and scenario editor land terraform code. This can only be done after OnClickButton function is changed so it also includes the backreference to the widget being clicked, postponed to after 0.4.0
2005-04-02 23:05:09 +00:00
|
|
|
GUIPlaceProcDragXY(e);
|
2006-09-23 02:39:24 +00:00
|
|
|
} else if (e->we.place.userdata == VPM_X_OR_Y) {
|
|
|
|
DoCommandP(e->we.place.tile, e->we.place.starttile, _ctrl_pressed, CcBuildCanal, CMD_BUILD_CANAL | CMD_AUTO | CMD_MSG(STR_CANT_BUILD_CANALS));
|
2005-10-23 13:04:44 +00:00
|
|
|
}
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case WE_ABORT_PLACE_OBJ:
|
2006-10-03 20:16:20 +00:00
|
|
|
RaiseWindowButtons(w);
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
w = FindWindowById(WC_BUILD_STATION, 0);
|
2005-10-23 13:04:44 +00:00
|
|
|
if (w != NULL) WP(w,def_d).close = true;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
|
|
|
w = FindWindowById(WC_BUILD_DEPOT, 0);
|
2005-10-23 13:04:44 +00:00
|
|
|
if (w != NULL) WP(w,def_d).close = true;
|
2004-08-09 17:04:08 +00:00
|
|
|
break;
|
2004-09-10 19:02:27 +00:00
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
case WE_PLACE_PRESIZE: {
|
2005-06-24 12:38:35 +00:00
|
|
|
TileIndex tile_from;
|
|
|
|
TileIndex tile_to;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2006-09-23 02:39:24 +00:00
|
|
|
tile_from = tile_to = e->we.place.tile;
|
2005-06-25 16:44:57 +00:00
|
|
|
switch (GetTileSlope(tile_from, NULL)) {
|
2006-04-23 13:48:16 +00:00
|
|
|
case SLOPE_SW: tile_to += TileDiffXY(-1, 0); break;
|
|
|
|
case SLOPE_SE: tile_to += TileDiffXY( 0, -1); break;
|
|
|
|
case SLOPE_NW: tile_to += TileDiffXY( 0, 1); break;
|
|
|
|
case SLOPE_NE: tile_to += TileDiffXY( 1, 0); break;
|
|
|
|
default: break;
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
VpSetPresizeRange(tile_from, tile_to);
|
|
|
|
} break;
|
2005-11-09 07:25:55 +00:00
|
|
|
|
|
|
|
case WE_DESTROY:
|
|
|
|
if (_patches.link_terraform_toolbar) DeleteWindowById(WC_SCEN_LAND_GEN, 0);
|
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static const Widget _build_docks_toolb_widgets[] = {
|
2006-08-22 14:38:37 +00:00
|
|
|
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
|
|
|
|
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 145, 0, 13, STR_9801_DOCK_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
|
|
|
{ WWT_STICKYBOX, RESIZE_NONE, 7, 146, 157, 0, 13, 0x0, STR_STICKY_BUTTON},
|
2006-10-24 14:15:17 +00:00
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 0, 21, 14, 35, SPR_IMG_BUILD_CANAL, STR_BUILD_CANALS_TIP},
|
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 22, 43, 14, 35, SPR_IMG_BUILD_LOCK, STR_BUILD_LOCKS_TIP},
|
2006-08-22 14:38:37 +00:00
|
|
|
|
|
|
|
{ WWT_PANEL, RESIZE_NONE, 7, 44, 47, 14, 35, 0x0, STR_NULL},
|
|
|
|
|
2006-10-24 13:20:54 +00:00
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 48, 69, 14, 35, SPR_IMG_DYNAMITE, STR_018D_DEMOLISH_BUILDINGS_ETC},
|
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 70, 91, 14, 35, SPR_IMG_SHIP_DEPOT, STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING},
|
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 92, 113, 14, 35, SPR_IMG_SHIP_DOCK, STR_981D_BUILD_SHIP_DOCK},
|
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 114, 135, 14, 35, SPR_IMG_BOUY, STR_9834_POSITION_BUOY_WHICH_CAN},
|
|
|
|
{ WWT_IMGBTN, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_IMG_LANDSCAPING, STR_LANDSCAPING_TOOLBAR_TIP},
|
2004-09-07 21:48:09 +00:00
|
|
|
{ WIDGETS_END},
|
2004-08-09 17:04:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const WindowDesc _build_docks_toolbar_desc = {
|
2006-11-11 10:12:00 +00:00
|
|
|
WDP_ALIGN_TBR, 22, 158, 36,
|
2006-11-10 19:24:14 +00:00
|
|
|
WC_BUILD_TOOLBAR, 0,
|
2004-12-22 00:18:40 +00:00
|
|
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
2004-08-09 17:04:08 +00:00
|
|
|
_build_docks_toolb_widgets,
|
|
|
|
BuildDocksToolbWndProc
|
|
|
|
};
|
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
void ShowBuildDocksToolbar(void)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-10-31 21:15:56 +00:00
|
|
|
if (!IsValidPlayer(_current_player)) return;
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
|
|
|
AllocateWindowDesc(&_build_docks_toolbar_desc);
|
2005-11-09 07:25:55 +00:00
|
|
|
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void BuildDockStationWndProc(Window *w, WindowEvent *e)
|
|
|
|
{
|
2005-11-14 19:48:04 +00:00
|
|
|
switch (e->event) {
|
2006-10-03 20:16:20 +00:00
|
|
|
case WE_CREATE: LowerWindowWidget(w, _station_show_coverage + 3); break;
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
case WE_PAINT: {
|
2005-11-14 19:48:04 +00:00
|
|
|
int rad;
|
|
|
|
|
|
|
|
if (WP(w,def_d).close) return;
|
2004-08-09 17:04:08 +00:00
|
|
|
DrawWindowWidgets(w);
|
2005-11-13 14:54:09 +00:00
|
|
|
|
|
|
|
rad = (_patches.modified_catchment) ? CA_DOCK : 4;
|
2004-12-19 09:31:35 +00:00
|
|
|
|
2006-09-03 22:39:02 +00:00
|
|
|
if (_station_show_coverage) SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
|
2004-12-19 09:31:35 +00:00
|
|
|
|
2004-12-21 18:30:51 +00:00
|
|
|
DrawStationCoverageAreaText(4, 50, (uint)-1, rad);
|
2005-11-14 19:48:04 +00:00
|
|
|
break;
|
|
|
|
}
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2005-11-14 19:48:04 +00:00
|
|
|
case WE_CLICK:
|
2006-09-23 02:39:24 +00:00
|
|
|
switch (e->we.click.widget) {
|
2005-11-14 19:48:04 +00:00
|
|
|
case 3:
|
|
|
|
case 4:
|
2006-10-03 20:16:20 +00:00
|
|
|
RaiseWindowWidget(w, _station_show_coverage + 3);
|
2006-09-23 02:39:24 +00:00
|
|
|
_station_show_coverage = e->we.click.widget - 3;
|
2006-10-03 20:16:20 +00:00
|
|
|
LowerWindowWidget(w, _station_show_coverage + 3);
|
2005-11-14 19:48:04 +00:00
|
|
|
SndPlayFx(SND_15_BEEP);
|
|
|
|
SetWindowDirty(w);
|
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
2005-11-14 19:48:04 +00:00
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
|
2005-11-14 19:48:04 +00:00
|
|
|
case WE_MOUSELOOP:
|
2004-08-09 17:04:08 +00:00
|
|
|
if (WP(w,def_d).close) {
|
|
|
|
DeleteWindow(w);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
CheckRedrawStationCoverage(w);
|
|
|
|
break;
|
2005-01-20 08:36:15 +00:00
|
|
|
|
|
|
|
case WE_DESTROY:
|
2005-11-14 19:48:04 +00:00
|
|
|
if (!WP(w,def_d).close) ResetObjectToPlace();
|
2005-01-20 08:36:15 +00:00
|
|
|
break;
|
2004-09-10 19:02:27 +00:00
|
|
|
}
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static const Widget _build_dock_station_widgets[] = {
|
2006-08-22 15:23:25 +00:00
|
|
|
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
|
|
|
|
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 147, 0, 13, STR_3068_DOCK, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
|
|
|
{ WWT_PANEL, RESIZE_NONE, 7, 0, 147, 14, 74, 0x0, STR_NULL},
|
|
|
|
{ WWT_TEXTBTN, RESIZE_NONE, 14, 14, 73, 30, 40, STR_02DB_OFF, STR_3065_DON_T_HIGHLIGHT_COVERAGE},
|
|
|
|
{ WWT_TEXTBTN, RESIZE_NONE, 14, 74, 133, 30, 40, STR_02DA_ON, STR_3064_HIGHLIGHT_COVERAGE_AREA},
|
|
|
|
{ WWT_LABEL, RESIZE_NONE, 7, 0, 147, 17, 30, STR_3066_COVERAGE_AREA_HIGHLIGHT, STR_NULL},
|
2004-09-07 21:48:09 +00:00
|
|
|
{ WIDGETS_END},
|
2004-08-09 17:04:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const WindowDesc _build_dock_station_desc = {
|
2006-11-10 19:24:14 +00:00
|
|
|
WDP_AUTO, WDP_AUTO, 148, 75,
|
|
|
|
WC_BUILD_STATION, WC_BUILD_TOOLBAR,
|
2004-08-09 17:04:08 +00:00
|
|
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
|
|
|
|
_build_dock_station_widgets,
|
|
|
|
BuildDockStationWndProc
|
|
|
|
};
|
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
static void ShowBuildDockStationPicker(void)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
AllocateWindowDesc(&_build_dock_station_desc);
|
|
|
|
}
|
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
static void UpdateDocksDirection(void)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-03-08 06:55:33 +00:00
|
|
|
if (_ship_depot_direction != AXIS_X) {
|
2004-08-09 17:04:08 +00:00
|
|
|
SetTileSelectSize(1, 2);
|
|
|
|
} else {
|
|
|
|
SetTileSelectSize(2, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void BuildDocksDepotWndProc(Window *w, WindowEvent *e)
|
|
|
|
{
|
2005-10-23 13:04:44 +00:00
|
|
|
switch (e->event) {
|
2006-10-03 20:16:20 +00:00
|
|
|
case WE_CREATE: LowerWindowWidget(w, _ship_depot_direction + 3); break;
|
|
|
|
|
2004-08-09 17:04:08 +00:00
|
|
|
case WE_PAINT:
|
|
|
|
DrawWindowWidgets(w);
|
|
|
|
|
|
|
|
DrawShipDepotSprite(67, 35, 0);
|
|
|
|
DrawShipDepotSprite(35, 51, 1);
|
|
|
|
DrawShipDepotSprite(135, 35, 2);
|
|
|
|
DrawShipDepotSprite(167, 51, 3);
|
|
|
|
return;
|
|
|
|
|
|
|
|
case WE_CLICK: {
|
2006-09-23 02:39:24 +00:00
|
|
|
switch (e->we.click.widget) {
|
2004-08-09 17:04:08 +00:00
|
|
|
case 3:
|
|
|
|
case 4:
|
2006-10-03 20:16:20 +00:00
|
|
|
RaiseWindowWidget(w, _ship_depot_direction + 3);
|
2006-09-23 02:39:24 +00:00
|
|
|
_ship_depot_direction = e->we.click.widget - 3;
|
2006-10-03 20:16:20 +00:00
|
|
|
LowerWindowWidget(w, _ship_depot_direction + 3);
|
2004-12-04 09:26:39 +00:00
|
|
|
SndPlayFx(SND_15_BEEP);
|
2004-08-09 17:04:08 +00:00
|
|
|
UpdateDocksDirection();
|
|
|
|
SetWindowDirty(w);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} break;
|
|
|
|
|
|
|
|
case WE_MOUSELOOP:
|
2005-11-14 19:48:04 +00:00
|
|
|
if (WP(w,def_d).close) DeleteWindow(w);
|
2004-08-09 17:04:08 +00:00
|
|
|
break;
|
2005-01-20 08:36:15 +00:00
|
|
|
|
|
|
|
case WE_DESTROY:
|
2005-11-14 19:48:04 +00:00
|
|
|
if (!WP(w,def_d).close) ResetObjectToPlace();
|
2005-01-20 08:36:15 +00:00
|
|
|
break;
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static const Widget _build_docks_depot_widgets[] = {
|
2006-08-22 14:38:37 +00:00
|
|
|
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW},
|
|
|
|
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 203, 0, 13, STR_3800_SHIP_DEPOT_ORIENTATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
|
|
|
{ WWT_PANEL, RESIZE_NONE, 7, 0, 203, 14, 85, 0x0, STR_NULL},
|
|
|
|
{ WWT_PANEL, RESIZE_NONE, 14, 3, 100, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
|
|
|
|
{ WWT_PANEL, RESIZE_NONE, 14, 103, 200, 17, 82, 0x0, STR_3803_SELECT_SHIP_DEPOT_ORIENTATION},
|
2004-09-07 21:48:09 +00:00
|
|
|
{ WIDGETS_END},
|
2004-08-09 17:04:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
static const WindowDesc _build_docks_depot_desc = {
|
2006-11-10 19:24:14 +00:00
|
|
|
WDP_AUTO, WDP_AUTO, 204, 86,
|
|
|
|
WC_BUILD_DEPOT, WC_BUILD_TOOLBAR,
|
2004-08-09 17:04:08 +00:00
|
|
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
|
|
|
|
_build_docks_depot_widgets,
|
|
|
|
BuildDocksDepotWndProc
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
static void ShowBuildDocksDepotPicker(void)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
|
|
|
AllocateWindowDesc(&_build_docks_depot_desc);
|
|
|
|
UpdateDocksDirection();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-22 20:23:18 +00:00
|
|
|
void InitializeDockGui(void)
|
2004-08-09 17:04:08 +00:00
|
|
|
{
|
2006-03-08 06:55:33 +00:00
|
|
|
_ship_depot_direction = AXIS_X;
|
2004-08-09 17:04:08 +00:00
|
|
|
}
|