mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
request using the RailtypeInfo struct
This commit is contained in:
parent
017b72d98a
commit
1d527c58cb
19
rail.h
19
rail.h
|
@ -142,6 +142,8 @@ typedef enum SignalStates {
|
||||||
/** This struct contains all the info that is needed to draw and construct tracks.
|
/** This struct contains all the info that is needed to draw and construct tracks.
|
||||||
*/
|
*/
|
||||||
typedef struct RailtypeInfo {
|
typedef struct RailtypeInfo {
|
||||||
|
/** Struct containing the main sprites. @note not all sprites are listed, but only
|
||||||
|
* the ones used directly in the code */
|
||||||
struct {
|
struct {
|
||||||
SpriteID track_y; ///< single piece of rail in Y direction, with ground
|
SpriteID track_y; ///< single piece of rail in Y direction, with ground
|
||||||
SpriteID track_ns; ///< two pieces of rail in North and South corner (East-West direction)
|
SpriteID track_ns; ///< two pieces of rail in North and South corner (East-West direction)
|
||||||
|
@ -154,6 +156,23 @@ typedef struct RailtypeInfo {
|
||||||
SpriteID single_w; ///< single piece of rail in the western corner
|
SpriteID single_w; ///< single piece of rail in the western corner
|
||||||
} base_sprites;
|
} base_sprites;
|
||||||
|
|
||||||
|
/** struct containing the sprites for the rail GUI. @note only sprites referred to
|
||||||
|
* directly in the code are listed */
|
||||||
|
struct {
|
||||||
|
SpriteID build_ns_rail; ///< button for building single rail in N-S direction
|
||||||
|
SpriteID build_x_rail; ///< button for building single rail in X direction
|
||||||
|
SpriteID build_ew_rail; ///< button for building single rail in E-W direction
|
||||||
|
SpriteID build_y_rail; ///< button for building single rail in Y direction
|
||||||
|
SpriteID auto_rail; ///< button for the autorail construction
|
||||||
|
SpriteID build_depot; ///< button for building depots
|
||||||
|
SpriteID build_tunnel; ///< button for building a tunnel
|
||||||
|
SpriteID convert_rail; ///< button for converting rail
|
||||||
|
} gui_sprites;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
StringID toolbar_caption;
|
||||||
|
} strings;
|
||||||
|
|
||||||
/** sprite number difference between a piece of track on a snowy ground and the corresponding one on normal ground */
|
/** sprite number difference between a piece of track on a snowy ground and the corresponding one on normal ground */
|
||||||
SpriteID snow_offset;
|
SpriteID snow_offset;
|
||||||
|
|
||||||
|
|
120
rail_gui.c
120
rail_gui.c
|
@ -1,5 +1,7 @@
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
|
/** @file rail_gui.c File for dealing with rail construction user interface */
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "openttd.h"
|
#include "openttd.h"
|
||||||
#include "table/sprites.h"
|
#include "table/sprites.h"
|
||||||
|
@ -486,7 +488,7 @@ static void BuildRailToolbWndProc(Window *w, WindowEvent *e)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const Widget _build_railroad_widgets[] = {
|
static const Widget _build_rail_widgets[] = {
|
||||||
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW},
|
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW},
|
||||||
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 359, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 359, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
||||||
{ WWT_STICKYBOX, RESIZE_NONE, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON},
|
{ WWT_STICKYBOX, RESIZE_NONE, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON},
|
||||||
|
@ -515,94 +517,47 @@ static const Widget _build_railroad_widgets[] = {
|
||||||
{ WIDGETS_END},
|
{ WIDGETS_END},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const WindowDesc _build_railroad_desc = {
|
static const WindowDesc _build_rail_desc = {
|
||||||
640-372, 22, 372, 36,
|
640-372, 22, 372, 36,
|
||||||
WC_BUILD_TOOLBAR,0,
|
WC_BUILD_TOOLBAR,0,
|
||||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
||||||
_build_railroad_widgets,
|
_build_rail_widgets,
|
||||||
BuildRailToolbWndProc
|
BuildRailToolbWndProc
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Widget _build_monorail_widgets[] = {
|
/** Enum referring to the widgets of the build rail toolbar
|
||||||
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW},
|
*/
|
||||||
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 359, 0, 13, STR_100B_MONORAIL_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
typedef enum {
|
||||||
{ WWT_STICKYBOX, RESIZE_NONE, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON},
|
RTW_CAPTION = 1,
|
||||||
|
RTW_BUILD_NS = 4,
|
||||||
|
RTW_BUILD_X = 5,
|
||||||
|
RTW_BUILD_EW = 6,
|
||||||
|
RTW_BUILD_Y = 7,
|
||||||
|
RTW_AUTORAIL = 8,
|
||||||
|
RTW_BUILD_DEPOT = 10,
|
||||||
|
RTW_BUILD_TUNNEL = 15,
|
||||||
|
RTW_CONVERT_RAIL = 17
|
||||||
|
} RailToolbarWidgets;
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 110, 113, 14, 35, 0x0, STR_NULL},
|
/** Configures the rail toolbar for railtype given
|
||||||
|
* @param railtype the railtype to display
|
||||||
|
* @param w the window to modify
|
||||||
|
*/
|
||||||
|
static void SetupRailToolbar(uint16 railtype, Window *w)
|
||||||
|
{
|
||||||
|
const RailtypeInfo *rti = GetRailTypeInfo(railtype);
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 0, 21, 14, 35, 0x4E7, STR_1018_BUILD_RAILROAD_TRACK},
|
assert(railtype < RAILTYPE_END);
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 22, 43, 14, 35, 0x4E8, STR_1018_BUILD_RAILROAD_TRACK},
|
w->widget[RTW_CAPTION].unkA = rti->strings.toolbar_caption;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 44, 65, 14, 35, 0x4E9, STR_1018_BUILD_RAILROAD_TRACK},
|
w->widget[RTW_BUILD_NS].unkA = rti->gui_sprites.build_ns_rail;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 66, 87, 14, 35, 0x4EA, STR_1018_BUILD_RAILROAD_TRACK},
|
w->widget[RTW_BUILD_X].unkA = rti->gui_sprites.build_x_rail;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_OPENTTD_BASE + 1, STR_BUILD_AUTORAIL_TIP},
|
w->widget[RTW_BUILD_EW].unkA = rti->gui_sprites.build_ew_rail;
|
||||||
|
w->widget[RTW_BUILD_Y].unkA = rti->gui_sprites.build_y_rail;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 114, 135, 14, 35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
|
w->widget[RTW_AUTORAIL].unkA = rti->gui_sprites.auto_rail;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_OPENTTD_BASE + 12, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING},
|
w->widget[RTW_BUILD_DEPOT].unkA = rti->gui_sprites.build_depot;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 158, 179, 14, 35, SPR_OPENTTD_BASE + 3, STR_CONVERT_RAIL_TO_WAYPOINT_TIP},
|
w->widget[RTW_CONVERT_RAIL].unkA = rti->gui_sprites.convert_rail;
|
||||||
|
w->widget[RTW_BUILD_TUNNEL].unkA = rti->gui_sprites.build_tunnel;
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 180, 221, 14, 35, 0x512, STR_101A_BUILD_RAILROAD_STATION},
|
}
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 222, 243, 14, 35, 0x50B, STR_101B_BUILD_RAILROAD_SIGNALS},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 244, 285, 14, 35, 0xA22, STR_101C_BUILD_RAILROAD_BRIDGE},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 286, 305, 14, 35, 0x97F, STR_101D_BUILD_RAILROAD_TUNNEL},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 306, 327, 14, 35, 0x2CA, STR_101E_TOGGLE_BUILD_REMOVE_FOR},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 328, 349, 14, 35, SPR_OPENTTD_BASE + 27, STR_CONVERT_RAIL_TIP},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 350, 371, 14, 35, SPR_IMG_LANDSCAPING, STR_LANDSCAPING_TOOLBAR_TIP},
|
|
||||||
|
|
||||||
{ WIDGETS_END},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const WindowDesc _build_monorail_desc = {
|
|
||||||
640-372, 22, 372, 36,
|
|
||||||
WC_BUILD_TOOLBAR,0,
|
|
||||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
|
||||||
_build_monorail_widgets,
|
|
||||||
BuildRailToolbWndProc
|
|
||||||
};
|
|
||||||
|
|
||||||
static const Widget _build_maglev_widgets[] = {
|
|
||||||
{ WWT_CLOSEBOX, RESIZE_NONE, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW},
|
|
||||||
{ WWT_CAPTION, RESIZE_NONE, 7, 11, 359, 0, 13, STR_100C_MAGLEV_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
|
|
||||||
{ WWT_STICKYBOX, RESIZE_NONE, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 110, 113, 14, 35, 0x0, STR_NULL},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 0, 21, 14, 35, 0x4EB, STR_1018_BUILD_RAILROAD_TRACK},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 22, 43, 14, 35, 0x4EC, STR_1018_BUILD_RAILROAD_TRACK},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 44, 65, 14, 35, 0x4EE, STR_1018_BUILD_RAILROAD_TRACK},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 66, 87, 14, 35, 0x4ED, STR_1018_BUILD_RAILROAD_TRACK},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 88, 109, 14, 35, SPR_OPENTTD_BASE + 2, STR_BUILD_AUTORAIL_TIP},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 114, 135, 14, 35, 0x2BF, STR_018D_DEMOLISH_BUILDINGS_ETC},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 136, 157, 14, 35, SPR_OPENTTD_BASE + 13, STR_1019_BUILD_TRAIN_DEPOT_FOR_BUILDING},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 158, 179, 14, 35, SPR_OPENTTD_BASE + 3, STR_CONVERT_RAIL_TO_WAYPOINT_TIP},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 180, 221, 14, 35, 0x512, STR_101A_BUILD_RAILROAD_STATION},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 222, 243, 14, 35, 0x50B, STR_101B_BUILD_RAILROAD_SIGNALS},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 244, 285, 14, 35, 0xA22, STR_101C_BUILD_RAILROAD_BRIDGE},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 286, 305, 14, 35, 0x980, STR_101D_BUILD_RAILROAD_TUNNEL},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 306, 327, 14, 35, 0x2CA, STR_101E_TOGGLE_BUILD_REMOVE_FOR},
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 328, 349, 14, 35, SPR_OPENTTD_BASE + 29, STR_CONVERT_RAIL_TIP},
|
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_NONE, 7, 350, 371, 14, 35, SPR_IMG_LANDSCAPING, STR_LANDSCAPING_TOOLBAR_TIP},
|
|
||||||
|
|
||||||
{ WIDGETS_END},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const WindowDesc _build_maglev_desc = {
|
|
||||||
640-372, 22, 372, 36,
|
|
||||||
WC_BUILD_TOOLBAR,0,
|
|
||||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
|
|
||||||
_build_maglev_widgets,
|
|
||||||
BuildRailToolbWndProc
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static const WindowDesc * const _build_rr_desc[] = {
|
|
||||||
&_build_railroad_desc,
|
|
||||||
&_build_monorail_desc,
|
|
||||||
&_build_maglev_desc,
|
|
||||||
};
|
|
||||||
|
|
||||||
void ShowBuildRailToolbar(int index, int button)
|
void ShowBuildRailToolbar(int index, int button)
|
||||||
{
|
{
|
||||||
|
@ -614,7 +569,8 @@ void ShowBuildRailToolbar(int index, int button)
|
||||||
if (button < 0 || !(w = FindWindowById(WC_BUILD_TOOLBAR, 0)) || w->wndproc != BuildRailToolbWndProc) {
|
if (button < 0 || !(w = FindWindowById(WC_BUILD_TOOLBAR, 0)) || w->wndproc != BuildRailToolbWndProc) {
|
||||||
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
||||||
_cur_railtype = (byte)index;
|
_cur_railtype = (byte)index;
|
||||||
w = AllocateWindowDesc(_build_rr_desc[index]);
|
w = AllocateWindowDesc(&_build_rail_desc);
|
||||||
|
SetupRailToolbar( (byte) index, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
_remove_button_clicked = false;
|
_remove_button_clicked = false;
|
||||||
|
|
89
railtypes.h
89
railtypes.h
|
@ -7,52 +7,69 @@
|
||||||
/** Global Railtype definition
|
/** Global Railtype definition
|
||||||
*/
|
*/
|
||||||
const RailtypeInfo _railtypes[RAILTYPE_END] = {
|
const RailtypeInfo _railtypes[RAILTYPE_END] = {
|
||||||
{
|
/** Railway */
|
||||||
{
|
{ /* Main Sprites */
|
||||||
SPR_RAIL_TRACK_Y,
|
{ SPR_RAIL_TRACK_Y, SPR_RAIL_TRACK_N_S, SPR_RAIL_TRACK_BASE, SPR_RAIL_SINGLE_Y, SPR_RAIL_SINGLE_X,
|
||||||
SPR_RAIL_TRACK_N_S,
|
SPR_RAIL_SINGLE_NORTH, SPR_RAIL_SINGLE_SOUTH, SPR_RAIL_SINGLE_EAST, SPR_RAIL_SINGLE_WEST },
|
||||||
SPR_RAIL_TRACK_BASE,
|
|
||||||
SPR_RAIL_SINGLE_Y,
|
/* GUI sprites */
|
||||||
SPR_RAIL_SINGLE_X,
|
{ 0x4E3, 0x4E4, 0x4E5, 0x4E6,
|
||||||
SPR_RAIL_SINGLE_NORTH,
|
SPR_OPENTTD_BASE + 0, 0x50E, 0x97E, SPR_OPENTTD_BASE + 25 },
|
||||||
SPR_RAIL_SINGLE_SOUTH,
|
|
||||||
SPR_RAIL_SINGLE_EAST,
|
/* strings */
|
||||||
SPR_RAIL_SINGLE_WEST
|
{ STR_100A_RAILROAD_CONSTRUCTION },
|
||||||
},
|
|
||||||
|
/* Offset of snow tiles */
|
||||||
SPR_RAIL_SNOW_OFFSET,
|
SPR_RAIL_SNOW_OFFSET,
|
||||||
|
|
||||||
|
/* Compatible railtypes */
|
||||||
(1 << RAILTYPE_RAIL),
|
(1 << RAILTYPE_RAIL),
|
||||||
|
|
||||||
|
/* main offset */
|
||||||
0,
|
0,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
{
|
/** Monorail */
|
||||||
SPR_MONO_TRACK_Y,
|
{ /* Main Sprites */
|
||||||
SPR_MONO_TRACK_N_S,
|
{ SPR_MONO_TRACK_Y, SPR_MONO_TRACK_N_S, SPR_MONO_TRACK_BASE, SPR_MONO_SINGLE_Y, SPR_MONO_SINGLE_X,
|
||||||
SPR_MONO_TRACK_BASE,
|
SPR_MONO_SINGLE_NORTH, SPR_MONO_SINGLE_SOUTH, SPR_MONO_SINGLE_EAST, SPR_MONO_SINGLE_WEST },
|
||||||
SPR_MONO_SINGLE_Y,
|
|
||||||
SPR_MONO_SINGLE_X,
|
/* GUI sprites */
|
||||||
SPR_MONO_SINGLE_NORTH,
|
{ 0x4E7, 0x4E8, 0x4E9, 0x4EA,
|
||||||
SPR_MONO_SINGLE_SOUTH,
|
SPR_OPENTTD_BASE + 1, SPR_OPENTTD_BASE + 12, 0x97F, SPR_OPENTTD_BASE + 27 },
|
||||||
SPR_MONO_SINGLE_EAST,
|
|
||||||
SPR_MONO_SINGLE_WEST
|
/* strings */
|
||||||
},
|
{ STR_100B_MONORAIL_CONSTRUCTION },
|
||||||
|
|
||||||
|
/* Offset of snow tiles */
|
||||||
SPR_MONO_SNOW_OFFSET,
|
SPR_MONO_SNOW_OFFSET,
|
||||||
|
|
||||||
|
/* Compatible Railtypes */
|
||||||
(1 << RAILTYPE_MONO),
|
(1 << RAILTYPE_MONO),
|
||||||
|
|
||||||
|
/* main offset */
|
||||||
82,
|
82,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
{
|
/** Maglev */
|
||||||
SPR_MGLV_TRACK_Y,
|
{ /* Main sprites */
|
||||||
SPR_MGLV_TRACK_N_S,
|
{ SPR_MGLV_TRACK_Y, SPR_MGLV_TRACK_N_S, SPR_MGLV_TRACK_BASE, SPR_MGLV_SINGLE_Y, SPR_MGLV_SINGLE_X,
|
||||||
SPR_MGLV_TRACK_BASE,
|
SPR_MGLV_SINGLE_NORTH, SPR_MGLV_SINGLE_SOUTH, SPR_MGLV_SINGLE_EAST, SPR_MGLV_SINGLE_WEST },
|
||||||
SPR_MGLV_SINGLE_Y,
|
|
||||||
SPR_MGLV_SINGLE_X,
|
/* GUI sprites */
|
||||||
SPR_MGLV_SINGLE_NORTH,
|
{ 0x4EB, 0x4EC, 0x4EE, 0x4ED,
|
||||||
SPR_MGLV_SINGLE_SOUTH,
|
SPR_OPENTTD_BASE + 2, SPR_OPENTTD_BASE + 13, 0x980, SPR_OPENTTD_BASE + 29 },
|
||||||
SPR_MGLV_SINGLE_EAST,
|
|
||||||
SPR_MGLV_SINGLE_WEST
|
/* strings */
|
||||||
},
|
{ STR_100C_MAGLEV_CONSTRUCTION },
|
||||||
|
|
||||||
|
/* Offset of snow tiles */
|
||||||
SPR_MGLV_SNOW_OFFSET,
|
SPR_MGLV_SNOW_OFFSET,
|
||||||
|
|
||||||
|
/* Compatible Railtypes */
|
||||||
(1 << RAILTYPE_MAGLEV),
|
(1 << RAILTYPE_MAGLEV),
|
||||||
|
|
||||||
|
/* main offset */
|
||||||
164,
|
164,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue