Changeset - r9298:06e4a9703da1
[Not reviewed]
master
0 2 0
rubidium - 16 years ago 2008-05-18 17:40:13
rubidium@openttd.org
(svn r13166) -Codechange: CmdSetRoadDriveSide belongs in road_cmd.cpp, not settings_gui.cpp.
2 files changed with 32 insertions and 31 deletions:
0 comments (0 inline, 0 general)
src/road_cmd.cpp
Show inline comments
 
@@ -40,12 +40,43 @@
 
#include "elrail_func.h"
 
#include "oldpool_func.h"
 

	
 
#include "table/sprites.h"
 
#include "table/strings.h"
 

	
 

	
 
bool RoadVehiclesAreBuilt()
 
{
 
	const Vehicle* v;
 

	
 
	FOR_ALL_VEHICLES(v) {
 
		if (v->type == VEH_ROAD) return true;
 
	}
 
	return false;
 
}
 

	
 
/**
 
 * Change the side of the road vehicles drive on (server only).
 
 * @param tile unused
 
 * @param flags operation to perform
 
 * @param p1 the side of the road; 0 = left side and 1 = right side
 
 * @param p2 unused
 
 */
 
CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 
{
 
	/* Check boundaries and you can only change this if NO vehicles have been built yet,
 
	 * except in the intro-menu where of course it's always possible to do so. */
 
	if (p1 > 1 || (_game_mode != GM_MENU && RoadVehiclesAreBuilt())) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		_opt_ptr->road_side = p1;
 
		InvalidateWindow(WC_GAME_OPTIONS, 0);
 
	}
 
	return CommandCost();
 
}
 

	
 
#define M(x) (1 << (x))
 
/* Level crossings may only be built on these slopes */
 
static const uint32 VALID_LEVEL_CROSSING_SLOPES = (M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT));
 
#undef M
 

	
 
/* Invalid RoadBits on slopes  */
src/settings_gui.cpp
Show inline comments
 
@@ -17,13 +17,12 @@
 
#include "variables.h"
 
#include "settings_internal.h"
 
#include "newgrf_townname.h"
 
#include "strings_func.h"
 
#include "functions.h"
 
#include "window_func.h"
 
#include "vehicle_base.h"
 
#include "core/alloc_func.hpp"
 
#include "string_func.h"
 
#include "gfx_func.h"
 
#include "waypoint.h"
 
#include "widgets/dropdown_type.h"
 
#include "widgets/dropdown_func.h"
 
@@ -99,23 +98,12 @@ static int GetCurRes()
 
			break;
 
		}
 
	}
 
	return i;
 
}
 

	
 
static inline bool RoadVehiclesAreBuilt()
 
{
 
	const Vehicle* v;
 

	
 
	FOR_ALL_VEHICLES(v) {
 
		if (v->type == VEH_ROAD) return true;
 
	}
 
	return false;
 
}
 

	
 

	
 
enum GameOptionsWidgets {
 
	GAMEOPT_CURRENCY_BTN    =  4,
 
	GAMEOPT_DISTANCE_BTN    =  6,
 
	GAMEOPT_ROADSIDE_BTN    =  8,
 
	GAMEOPT_TOWNNAME_BTN    = 10,
 
	GAMEOPT_AUTOSAVE_BTN    = 12,
 
@@ -196,12 +184,13 @@ struct GameOptionsWindow : Window {
 
			case GAMEOPT_DISTANCE_BTN: // Setup distance unit dropdown
 
				ShowDropDownMenu(this, _units_dropdown, _opt_ptr->units, GAMEOPT_DISTANCE_BTN, 0, 0);
 
				break;
 

	
 
			case GAMEOPT_ROADSIDE_BTN: { // Setup road-side dropdown
 
				int i = 0;
 
				extern bool RoadVehiclesAreBuilt();
 

	
 
				/* You can only change the drive side if you are in the menu or ingame with
 
				 * no vehicles present. In a networking game only the server can change it */
 
				if ((_game_mode != GM_MENU && RoadVehiclesAreBuilt()) || (_networking && !_network_server)) {
 
					i = (-1) ^ (1 << _opt_ptr->road_side); // disable the other value
 
				}
 
@@ -320,31 +309,12 @@ struct GameOptionsWindow : Window {
 
				this->SetDirty();
 
				break;
 
		}
 
	}
 
};
 

	
 
/** Change the side of the road vehicles drive on (server only).
 
 * @param tile unused
 
 * @param flags operation to perform
 
 * @param p1 the side of the road; 0 = left side and 1 = right side
 
 * @param p2 unused
 
 */
 
CommandCost CmdSetRoadDriveSide(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
 
{
 
	/* Check boundaries and you can only change this if NO vehicles have been built yet,
 
	 * except in the intro-menu where of course it's always possible to do so. */
 
	if (p1 > 1 || (_game_mode != GM_MENU && RoadVehiclesAreBuilt())) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		_opt_ptr->road_side = p1;
 
		InvalidateWindow(WC_GAME_OPTIONS, 0);
 
	}
 
	return CommandCost();
 
}
 

	
 
static const Widget _game_options_widgets[] = {
 
{   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                          STR_018B_CLOSE_WINDOW},
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   369,     0,    13, STR_00B1_GAME_OPTIONS,             STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{      WWT_PANEL,   RESIZE_NONE,    14,     0,   369,    14,   238, 0x0,                               STR_NULL},
 
{      WWT_FRAME,   RESIZE_NONE,    14,    10,   179,    20,    55, STR_02E0_CURRENCY_UNITS,           STR_NULL},
 
{ WWT_DROPDOWNIN,   RESIZE_NONE,    14,    20,   169,    34,    45, STR_02E1,                          STR_02E2_CURRENCY_UNITS_SELECTION},
0 comments (0 inline, 0 general)