mirror of https://github.com/OpenTTD/OpenTTD
(svn r14805) -Feature [FS#2238]: pressing CTRL while dragging to build a bridge build the last built bridge type if possible (planetmaker)
parent
e5c1a7b5c3
commit
51b9091689
|
@ -22,6 +22,11 @@
|
||||||
|
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
|
/** The type of the last built rail bridge */
|
||||||
|
static BridgeType _last_railbridge_type = 0;
|
||||||
|
/** The type of the last built road bridge */
|
||||||
|
static BridgeType _last_roadbridge_type = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Carriage for the data we need if we want to build a bridge
|
* Carriage for the data we need if we want to build a bridge
|
||||||
*/
|
*/
|
||||||
|
@ -93,6 +98,11 @@ private:
|
||||||
|
|
||||||
void BuildBridge(uint8 i)
|
void BuildBridge(uint8 i)
|
||||||
{
|
{
|
||||||
|
switch ((TransportType)(this->type >> 15)) {
|
||||||
|
case TRANSPORT_RAIL: _last_railbridge_type = this->bridges->Get(i)->index; break;
|
||||||
|
case TRANSPORT_ROAD: _last_roadbridge_type = this->bridges->Get(i)->index; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->Get(i)->index,
|
DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->Get(i)->index,
|
||||||
CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
|
CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
|
||||||
}
|
}
|
||||||
|
@ -287,6 +297,25 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||||
* 7..0 = type of bridge */
|
* 7..0 = type of bridge */
|
||||||
uint32 type = (transport_type << 15) | (road_rail_type << 8);
|
uint32 type = (transport_type << 15) | (road_rail_type << 8);
|
||||||
|
|
||||||
|
/* The bridge length without ramps. */
|
||||||
|
const uint bridge_len = GetTunnelBridgeLength(start, end);
|
||||||
|
|
||||||
|
/* If Ctrl is being pressed, check wether the last bridge built is available
|
||||||
|
* If so, return this bridge type. Otherwise continue normally.
|
||||||
|
* We store bridge types for each transport type, so we have to check for
|
||||||
|
* the transport type beforehand.
|
||||||
|
*/
|
||||||
|
BridgeType last_bridge_type = 0;
|
||||||
|
switch (transport_type) {
|
||||||
|
case TRANSPORT_ROAD: last_bridge_type = _last_roadbridge_type; break;
|
||||||
|
case TRANSPORT_RAIL: last_bridge_type = _last_railbridge_type; break;
|
||||||
|
default: break; // water ways and air routes don't have bridge types
|
||||||
|
}
|
||||||
|
if (_ctrl_pressed && CheckBridge_Stuff(last_bridge_type, bridge_len)) {
|
||||||
|
DoCommandP(end, start, type | last_bridge_type, CMD_BUILD_BRIDGE | CMD_MSG(STR_5015_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* only query bridge building possibility once, result is the same for all bridges!
|
/* only query bridge building possibility once, result is the same for all bridges!
|
||||||
* returns CMD_ERROR on failure, and price on success */
|
* returns CMD_ERROR on failure, and price on success */
|
||||||
StringID errmsg = INVALID_STRING_ID;
|
StringID errmsg = INVALID_STRING_ID;
|
||||||
|
@ -296,11 +325,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo
|
||||||
if (CmdFailed(ret)) {
|
if (CmdFailed(ret)) {
|
||||||
errmsg = _error_message;
|
errmsg = _error_message;
|
||||||
} else {
|
} else {
|
||||||
/* check which bridges can be built
|
/* check which bridges can be built */
|
||||||
* get absolute bridge length
|
|
||||||
* length of the middle parts of the bridge */
|
|
||||||
const uint bridge_len = GetTunnelBridgeLength(start, end);
|
|
||||||
/* total length of bridge */
|
|
||||||
const uint tot_bridgedata_len = CalcBridgeLenCostFactor(bridge_len + 2);
|
const uint tot_bridgedata_len = CalcBridgeLenCostFactor(bridge_len + 2);
|
||||||
|
|
||||||
bl = new GUIBridgeList();
|
bl = new GUIBridgeList();
|
||||||
|
|
Loading…
Reference in New Issue