author | rubidium |
Thu, 15 May 2008 13:39:36 +0000 | |
changeset 9234 | bfc9d27d3d0d |
parent 9154 | 2c042b567165 |
child 9297 | 1cb8d7bbdc8a |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
9111
48ce04029fe4
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
9075
diff
changeset
|
3 |
/** @file station_cmd.cpp Handling of station tiles. */ |
2213
bab9abeaa644
(svn r2731) -Fix [ 1244171 ]: Hangar orders are now properly invalidated as soon as the airport is removed
celestar
parents:
2187
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1881
diff
changeset
|
6 |
#include "openttd.h" |
6087 | 7 |
#include "aircraft.h" |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5380
diff
changeset
|
8 |
#include "bridge_map.h" |
6134 | 9 |
#include "cmd_helper.h" |
1299
39c06aba09aa
(svn r1803) Move debugging stuff into files of it's own
tron
parents:
1295
diff
changeset
|
10 |
#include "debug.h" |
8119
52b48108425a
(svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents:
8116
diff
changeset
|
11 |
#include "tile_cmd.h" |
6453
226bcddeba32
(svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents:
6427
diff
changeset
|
12 |
#include "landscape.h" |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
13 |
#include "station_map.h" |
8225
cd84a95b6630
(svn r11788) -Fix (11787): makedepend doesn't mark delete files as changed...
rubidium
parents:
8214
diff
changeset
|
14 |
#include "viewport_func.h" |
8116
8da76dcb3287
(svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents:
8114
diff
changeset
|
15 |
#include "command_func.h" |
0 | 16 |
#include "town.h" |
8763
81fadd257f67
(svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents:
8732
diff
changeset
|
17 |
#include "news_func.h" |
0 | 18 |
#include "saveload.h" |
19 |
#include "airport.h" |
|
405
415546028e8d
(svn r602) -newgrf: Move DrawTileSeqStruct & co and struct SpriteGroup to sprite.h (pasky)
darkvater
parents:
403
diff
changeset
|
20 |
#include "sprite.h" |
2676
59b65b4fb480
(svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents:
2671
diff
changeset
|
21 |
#include "train.h" |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6823
diff
changeset
|
22 |
#include "roadveh.h" |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3102
diff
changeset
|
23 |
#include "water_map.h" |
3515
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
24 |
#include "industry_map.h" |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
25 |
#include "newgrf_callbacks.h" |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
26 |
#include "newgrf_station.h" |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
27 |
#include "yapf/yapf.h" |
8102
906a3d3b6df1
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8098
diff
changeset
|
28 |
#include "road_type.h" |
906a3d3b6df1
(svn r11663) -Codechange: moving of the road related types and functions.
rubidium
parents:
8098
diff
changeset
|
29 |
#include "road_internal.h" /* For drawing catenary/checking road removal */ |
6091
c8827d9ae04a
(svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents:
6087
diff
changeset
|
30 |
#include "cargotype.h" |
8211
29a8510dfd62
(svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium
parents:
8166
diff
changeset
|
31 |
#include "variables.h" |
7582
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
32 |
#include "autoslope.h" |
7849
0a1c0af2c96c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
7826
diff
changeset
|
33 |
#include "transparency.h" |
7948
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7931
diff
changeset
|
34 |
#include "water.h" |
8016
1c7062ad5f50
(svn r11576) -Codechange: enumerize and comment station GUI
smatz
parents:
8015
diff
changeset
|
35 |
#include "station_gui.h" |
8114
dd6d21dc99c1
(svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents:
8109
diff
changeset
|
36 |
#include "strings_func.h" |
8131
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8130
diff
changeset
|
37 |
#include "functions.h" |
160939e24ed3
(svn r11692) -Codechange: move some functions from 'functions.h' to a more logical place and remove about 50% of the includes of 'functions.h'
rubidium
parents:
8130
diff
changeset
|
38 |
#include "window_func.h" |
8140
0d0d8c94f84b
(svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents:
8139
diff
changeset
|
39 |
#include "date_func.h" |
8144
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8140
diff
changeset
|
40 |
#include "vehicle_func.h" |
8214
971f861d5543
(svn r11777) -Codechange: split the string header and make do not include it when it's not necessary.
rubidium
parents:
8211
diff
changeset
|
41 |
#include "string_func.h" |
8238
d47a86c79603
(svn r11802) -Fix [FS#716]: do not crash trains when leaving depot to a very long track
smatz
parents:
8236
diff
changeset
|
42 |
#include "signal_func.h" |
8847
426dd2d582e7
(svn r12599) -Codechange: force AllocateSafeRaw() to be linked to simplify compiler's decisions about inlining
smatz
parents:
8846
diff
changeset
|
43 |
#include "oldpool_func.h" |
9005
d6b0e0a54ef2
(svn r12800) -Codechange: move the animated tile related functions out of texteff.cpp (it isn't a text effect after all). Also remove a few more functions from functions.
rubidium
parents:
9003
diff
changeset
|
44 |
#include "animated_tile_func.h" |
9154
2c042b567165
(svn r13016) -Codechange: unify the detection if rail catenary should be drawn
smatz
parents:
9111
diff
changeset
|
45 |
#include "elrail_func.h" |
8238
d47a86c79603
(svn r11802) -Fix [FS#716]: do not crash trains when leaving depot to a very long track
smatz
parents:
8236
diff
changeset
|
46 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
47 |
#include "table/sprites.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8258
diff
changeset
|
48 |
#include "table/strings.h" |
5666
d0e00c728f41
(svn r8126) -Fix (r8125): missing #include fixes compilation error on g++ (still some warnings, working on it)
KUDr
parents:
5665
diff
changeset
|
49 |
|
7376
066596e64cd5
(svn r10745) -Codechange: generalize the pool cleanup/initialize functions for stations (in such a manner that they can be used for other pools too).
rubidium
parents:
7370
diff
changeset
|
50 |
DEFINE_OLD_POOL_GENERIC(Station, Station) |
066596e64cd5
(svn r10745) -Codechange: generalize the pool cleanup/initialize functions for stations (in such a manner that they can be used for other pools too).
rubidium
parents:
7370
diff
changeset
|
51 |
DEFINE_OLD_POOL_GENERIC(RoadStop, RoadStop) |
1272
9aa073c64fc7
(svn r1776) -Add: Dynamic stations. You can now have up to 64k of stations
truelight
parents:
1266
diff
changeset
|
52 |
|
9aa073c64fc7
(svn r1776) -Add: Dynamic stations. You can now have up to 64k of stations
truelight
parents:
1266
diff
changeset
|
53 |
|
7320
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
54 |
/** |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
55 |
* Check whether the given tile is a hangar. |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
56 |
* @param t the tile to of whether it is a hangar. |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
57 |
* @pre IsTileType(t, MP_STATION) |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
58 |
* @return true if and only if the tile is a hangar. |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
59 |
*/ |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
60 |
bool IsHangar(TileIndex t) |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
61 |
{ |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
62 |
assert(IsTileType(t, MP_STATION)); |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
63 |
|
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
64 |
const Station *st = GetStationByTile(t); |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
65 |
const AirportFTAClass *apc = st->Airport(); |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
66 |
|
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
67 |
for (uint i = 0; i < apc->nof_depots; i++) { |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
68 |
if (st->airport_tile + ToTileIndexDiff(apc->airport_depots[i]) == t) return true; |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
69 |
} |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
70 |
|
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
71 |
return false; |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
72 |
} |
96d5862ec06a
(svn r10681) -Codechange: do not determine whether a tile is a hangar based on the graphics index to be drawn on the given tile, but do it based on the specification of the location of hangars of the airport.
rubidium
parents:
7319
diff
changeset
|
73 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
74 |
RoadStop *GetRoadStopByTile(TileIndex tile, RoadStopType type) |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
75 |
{ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
76 |
const Station *st = GetStationByTile(tile); |
6069 | 77 |
|
78 |
for (RoadStop *rs = st->GetPrimaryRoadStop(type);; rs = rs->next) { |
|
79 |
if (rs->xy == tile) return rs; |
|
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
80 |
assert(rs->next != NULL); |
2639 | 81 |
} |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
82 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
83 |
|
5913 | 84 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
85 |
static uint GetNumRoadStopsInStation(const Station *st, RoadStopType type) |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
86 |
{ |
2549 | 87 |
uint num = 0; |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
88 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
89 |
assert(st != NULL); |
6069 | 90 |
for (const RoadStop *rs = st->GetPrimaryRoadStop(type); rs != NULL; rs = rs->next) { |
91 |
num++; |
|
92 |
} |
|
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
93 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
94 |
return num; |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
95 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
96 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
97 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
98 |
/** Calculate the radius of the station. Basicly it is the biggest |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
99 |
* radius that is available within the station |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
100 |
* @param st Station to query |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
101 |
* @return the so calculated radius |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
102 |
*/ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
103 |
static uint FindCatchmentRadius(const Station *st) |
703
3f64a428fcbc
(svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
truelight
parents:
701
diff
changeset
|
104 |
{ |
6041 | 105 |
uint ret = CA_NONE; |
106 |
||
107 |
if (st->bus_stops != NULL) ret = max<uint>(ret, CA_BUS); |
|
108 |
if (st->truck_stops != NULL) ret = max<uint>(ret, CA_TRUCK); |
|
109 |
if (st->train_tile != 0) ret = max<uint>(ret, CA_TRAIN); |
|
110 |
if (st->dock_tile != 0) ret = max<uint>(ret, CA_DOCK); |
|
111 |
if (st->airport_tile) ret = max<uint>(ret, st->Airport()->catchment); |
|
703
3f64a428fcbc
(svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
truelight
parents:
701
diff
changeset
|
112 |
|
3f64a428fcbc
(svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
truelight
parents:
701
diff
changeset
|
113 |
return ret; |
3f64a428fcbc
(svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
truelight
parents:
701
diff
changeset
|
114 |
} |
3f64a428fcbc
(svn r1153) -Fix: FindCatchmentRadius is now a function that uses the enums instead
truelight
parents:
701
diff
changeset
|
115 |
|
0 | 116 |
#define CHECK_STATIONS_ERR ((Station*)-1) |
117 |
||
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
118 |
static Station *GetStationAround(TileIndex tile, int w, int h, StationID closest_station) |
0 | 119 |
{ |
6420
456c275f3313
(svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents:
6402
diff
changeset
|
120 |
/* check around to see if there's any stations there */ |
1981 | 121 |
BEGIN_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1)) |
1035
812f837ee03f
(svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts
tron
parents:
1032
diff
changeset
|
122 |
if (IsTileType(tile_cur, MP_STATION)) { |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
123 |
StationID t = GetStationIndex(tile_cur); |
28
635ad4c62bec
(svn r29) -Fix You cannot take ownership of an oilrig by building right next to it
darkvater
parents:
27
diff
changeset
|
124 |
|
2498
3ed05caa4449
(svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents:
2493
diff
changeset
|
125 |
if (closest_station == INVALID_STATION) { |
0 | 126 |
closest_station = t; |
127 |
} else if (closest_station != t) { |
|
128 |
_error_message = STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING; |
|
129 |
return CHECK_STATIONS_ERR; |
|
130 |
} |
|
131 |
} |
|
1981 | 132 |
END_TILE_LOOP(tile_cur, w + 2, h + 2, tile - TileDiffXY(1, 1)) |
2498
3ed05caa4449
(svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents:
2493
diff
changeset
|
133 |
return (closest_station == INVALID_STATION) ? NULL : GetStation(closest_station); |
0 | 134 |
} |
135 |
||
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
136 |
/** |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
137 |
* Function to check whether the given tile matches some criterion. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
138 |
* @param tile the tile to check |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
139 |
* @return true if it matches, false otherwise |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
140 |
*/ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
141 |
typedef bool (*CMSAMatcher)(TileIndex tile); |
0 | 142 |
|
3515
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
143 |
/** |
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
144 |
* Counts the numbers of tiles matching a specific type in the area around |
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
145 |
* @param tile the center tile of the 'count area' |
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
146 |
* @param type the type of tile searched for |
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
147 |
* @param industry when type == MP_INDUSTRY, the type of the industry, |
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
148 |
* in all other cases this parameter is ignored |
6201
bee01dc45e39
(svn r8987) -Cleanup: doxygen changes. Again. Mostly (still) @files missing tags and (more than just) a few comments style.
belugas
parents:
6198
diff
changeset
|
149 |
* @return the result the noumber of matching tiles around |
3515
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
150 |
*/ |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
151 |
static int CountMapSquareAround(TileIndex tile, CMSAMatcher cmp) |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
152 |
{ |
0 | 153 |
int num = 0; |
154 |
||
6069 | 155 |
for (int dx = -3; dx <= 3; dx++) { |
156 |
for (int dy = -3; dy <= 3; dy++) { |
|
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
157 |
if (cmp(TILE_MASK(tile + TileDiffXY(dx, dy)))) num++; |
3515
86dccaaef457
(svn r4367) CodeChange : Remove another direct map access in station_cmd.c. Replace an array of TileIndexDiffC by a use of loop with TileDiffXY. Thanks to Rubidium
belugas
parents:
3503
diff
changeset
|
158 |
} |
0 | 159 |
} |
160 |
||
161 |
return num; |
|
162 |
} |
|
163 |
||
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
164 |
/** |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
165 |
* Check whether the tile is a mine. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
166 |
* @param tile the tile to investigate. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
167 |
* @return true if and only if the tile is a mine |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
168 |
*/ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
169 |
static bool CMSAMine(TileIndex tile) |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
170 |
{ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
171 |
/* No industry */ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
172 |
if (!IsTileType(tile, MP_INDUSTRY)) return false; |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
173 |
|
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
174 |
const Industry *ind = GetIndustryByTile(tile); |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
175 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
176 |
/* No extractive industry */ |
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
177 |
if ((GetIndustrySpec(ind->type)->life_type & INDUSTRYLIFE_EXTRACTIVE) == 0) return false; |
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
178 |
|
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
179 |
for (uint i = 0; i < lengthof(ind->produced_cargo); i++) { |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
180 |
/* The industry extracts something non-liquid, i.e. no oil or plastic, so it is a mine */ |
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
181 |
if (ind->produced_cargo[i] != CT_INVALID && (GetCargo(ind->produced_cargo[i])->classes & CC_LIQUID) == 0) return true; |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
182 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
183 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
184 |
return false; |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
185 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
186 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
187 |
/** |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
188 |
* Check whether the tile is water. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
189 |
* @param tile the tile to investigate. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
190 |
* @return true if and only if the tile is a mine |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
191 |
*/ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
192 |
static bool CMSAWater(TileIndex tile) |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
193 |
{ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
194 |
return IsTileType(tile, MP_WATER) && IsWater(tile); |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
195 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
196 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
197 |
/** |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
198 |
* Check whether the tile is a tree. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
199 |
* @param tile the tile to investigate. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
200 |
* @return true if and only if the tile is a mine |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
201 |
*/ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
202 |
static bool CMSATree(TileIndex tile) |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
203 |
{ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
204 |
return IsTileType(tile, MP_TREES); |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
205 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
206 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
207 |
/** |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
208 |
* Check whether the tile is a forest. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
209 |
* @param tile the tile to investigate. |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
210 |
* @return true if and only if the tile is a mine |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
211 |
*/ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
212 |
static bool CMSAForest(TileIndex tile) |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
213 |
{ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
214 |
/* No industry */ |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
215 |
if (!IsTileType(tile, MP_INDUSTRY)) return false; |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
216 |
|
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
217 |
const Industry *ind = GetIndustryByTile(tile); |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
218 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
219 |
/* No extractive industry */ |
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
220 |
if ((GetIndustrySpec(ind->type)->life_type & INDUSTRYLIFE_ORGANIC) == 0) return false; |
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
221 |
|
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
222 |
for (uint i = 0; i < lengthof(ind->produced_cargo); i++) { |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
223 |
/* The industry produces wood. */ |
7645
efa25fcf7917
(svn r11176) -Revert (r9867): as it is needed for newgrf callbacks 14B and 14C
glx
parents:
7642
diff
changeset
|
224 |
if (ind->produced_cargo[i] != CT_INVALID && GetCargo(ind->produced_cargo[i])->label == 'WOOD') return true; |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
225 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
226 |
|
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
227 |
return false; |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
228 |
} |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
229 |
|
0 | 230 |
#define M(x) ((x) - STR_SV_STNAME) |
231 |
||
7814 | 232 |
enum StationNaming { |
7813
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
233 |
STATIONNAMING_RAIL = 0, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
234 |
STATIONNAMING_ROAD = 0, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
235 |
STATIONNAMING_AIRPORT, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
236 |
STATIONNAMING_OILRIG, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
237 |
STATIONNAMING_DOCK, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
238 |
STATIONNAMING_BUOY, |
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
239 |
STATIONNAMING_HELIPORT, |
7814 | 240 |
}; |
7813
8d6600887f9d
(svn r11363) -Codechange: Remove some magical numbers
belugas
parents:
7795
diff
changeset
|
241 |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
242 |
static StringID GenerateStationName(Station *st, TileIndex tile, int flag) |
0 | 243 |
{ |
244 |
static const uint32 _gen_station_name_bits[] = { |
|
1454 | 245 |
0, /* 0 */ |
246 |
1 << M(STR_SV_STNAME_AIRPORT), /* 1 */ |
|
247 |
1 << M(STR_SV_STNAME_OILFIELD), /* 2 */ |
|
248 |
1 << M(STR_SV_STNAME_DOCKS), /* 3 */ |
|
249 |
0x1FF << M(STR_SV_STNAME_BUOY_1), /* 4 */ |
|
250 |
1 << M(STR_SV_STNAME_HELIPORT), /* 5 */ |
|
0 | 251 |
}; |
252 |
||
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
253 |
const Town *t = st->town; |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
254 |
uint32 free_names = UINT32_MAX; |
0 | 255 |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
256 |
const Station *s; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
257 |
FOR_ALL_STATIONS(s) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
258 |
if (s != st && s->town == t) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
259 |
uint str = M(s->string_id); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
260 |
if (str <= 0x20) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
261 |
if (str == M(STR_SV_STNAME_FOREST)) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
262 |
str = M(STR_SV_STNAME_WOODS); |
0 | 263 |
} |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
264 |
ClrBit(free_names, str); |
0 | 265 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
266 |
} |
0 | 267 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
268 |
|
0 | 269 |
/* check default names */ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
270 |
uint32 tmp = free_names & _gen_station_name_bits[flag]; |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
271 |
if (tmp != 0) return STR_SV_STNAME + FindFirstBit(tmp); |
0 | 272 |
|
273 |
/* check mine? */ |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
274 |
if (HasBit(free_names, M(STR_SV_STNAME_MINES))) { |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
275 |
if (CountMapSquareAround(tile, CMSAMine) >= 2) { |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
276 |
return STR_SV_STNAME_MINES; |
1454 | 277 |
} |
0 | 278 |
} |
279 |
||
280 |
/* check close enough to town to get central as name? */ |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
281 |
if (DistanceMax(tile, t->xy) < 8) { |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
282 |
if (HasBit(free_names, M(STR_SV_STNAME))) return STR_SV_STNAME; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
283 |
|
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
284 |
if (HasBit(free_names, M(STR_SV_STNAME_CENTRAL))) return STR_SV_STNAME_CENTRAL; |
0 | 285 |
} |
286 |
||
287 |
/* Check lakeside */ |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
288 |
if (HasBit(free_names, M(STR_SV_STNAME_LAKESIDE)) && |
1472
a2abe3b9d7a7
(svn r1976) Cleanups - mostly indentation and fiddling with loops
tron
parents:
1457
diff
changeset
|
289 |
DistanceFromEdge(tile) < 20 && |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
290 |
CountMapSquareAround(tile, CMSAWater) >= 5) { |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
291 |
return STR_SV_STNAME_LAKESIDE; |
1454 | 292 |
} |
0 | 293 |
|
294 |
/* Check woods */ |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
295 |
if (HasBit(free_names, M(STR_SV_STNAME_WOODS)) && ( |
7319
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
296 |
CountMapSquareAround(tile, CMSATree) >= 8 || |
9b20d1dbe5d6
(svn r10675) -Codechange: unhardcode the industry types used in several locations of the source code.
rubidium
parents:
7298
diff
changeset
|
297 |
CountMapSquareAround(tile, CMSAForest) >= 2) |
1472
a2abe3b9d7a7
(svn r1976) Cleanups - mostly indentation and fiddling with loops
tron
parents:
1457
diff
changeset
|
298 |
) { |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
299 |
return _opt.landscape == LT_TROPIC ? STR_SV_STNAME_FOREST : STR_SV_STNAME_WOODS; |
0 | 300 |
} |
301 |
||
302 |
/* check elevation compared to town */ |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
303 |
uint z = GetTileZ(tile); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
304 |
uint z2 = GetTileZ(t->xy); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
305 |
if (z < z2) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
306 |
if (HasBit(free_names, M(STR_SV_STNAME_VALLEY))) return STR_SV_STNAME_VALLEY; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
307 |
} else if (z > z2) { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
308 |
if (HasBit(free_names, M(STR_SV_STNAME_HEIGHTS))) return STR_SV_STNAME_HEIGHTS; |
0 | 309 |
} |
310 |
||
311 |
/* check direction compared to town */ |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
312 |
static const int8 _direction_and_table[] = { |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
313 |
~( (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_EAST)) | (1 << M(STR_SV_STNAME_NORTH)) ), |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
314 |
~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_NORTH)) ), |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
315 |
~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_EAST)) | (1 << M(STR_SV_STNAME_NORTH)) ), |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
316 |
~( (1 << M(STR_SV_STNAME_SOUTH)) | (1 << M(STR_SV_STNAME_WEST)) | (1 << M(STR_SV_STNAME_EAST)) ), |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
317 |
}; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
318 |
|
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
319 |
free_names &= _direction_and_table[ |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
320 |
(TileX(tile) < TileX(t->xy)) + |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
321 |
(TileY(tile) < TileY(t->xy)) * 2]; |
0 | 322 |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
323 |
tmp = free_names & ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 6) | (1 << 7) | (1 << 12) | (1 << 26) | (1 << 27) | (1 << 28) | (1 << 29) | (1 << 30)); |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
324 |
return (tmp == 0) ? STR_SV_STNAME_FALLBACK : (STR_SV_STNAME + FindFirstBit(tmp)); |
0 | 325 |
} |
326 |
#undef M |
|
327 |
||
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
328 |
static Station *GetClosestStationFromTile(TileIndex tile) |
0 | 329 |
{ |
6052 | 330 |
uint threshold = 8; |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
331 |
Station *best_station = NULL; |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
332 |
Station *st; |
0 | 333 |
|
334 |
FOR_ALL_STATIONS(st) { |
|
6052 | 335 |
if (st->facilities == 0 && st->owner == _current_player) { |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
336 |
uint cur_dist = DistanceManhattan(tile, st->xy); |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
337 |
|
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
338 |
if (cur_dist < threshold) { |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
339 |
threshold = cur_dist; |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
340 |
best_station = st; |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
341 |
} |
0 | 342 |
} |
343 |
} |
|
344 |
||
345 |
return best_station; |
|
346 |
} |
|
347 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
348 |
/** Update the virtual coords needed to draw the station sign. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
349 |
* @param st Station to update for. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
350 |
*/ |
0 | 351 |
static void UpdateStationVirtCoord(Station *st) |
352 |
{ |
|
3422
a6eba3443452
(svn r4249) -Codechange: Replace more occurences of 16 by TILE_SIZE and of 8 by TILE_HEIGHT. Reverted one change from the previous commit because it was faulty
celestar
parents:
3418
diff
changeset
|
353 |
Point pt = RemapCoords2(TileX(st->xy) * TILE_SIZE, TileY(st->xy) * TILE_SIZE); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
354 |
|
0 | 355 |
pt.y -= 32; |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
356 |
if (st->facilities & FACIL_AIRPORT && st->airport_type == AT_OILRIG) pt.y -= 16; |
0 | 357 |
|
534
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
358 |
SetDParam(0, st->index); |
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
359 |
SetDParam(1, st->facilities); |
0 | 360 |
UpdateViewportSignPos(&st->sign, pt.x, pt.y, STR_305C_0); |
361 |
} |
|
362 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
363 |
/** Update the virtual coords needed to draw the station sign for all stations. */ |
6247 | 364 |
void UpdateAllStationVirtCoord() |
0 | 365 |
{ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
366 |
Station *st; |
2639 | 367 |
|
0 | 368 |
FOR_ALL_STATIONS(st) { |
4346
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
369 |
UpdateStationVirtCoord(st); |
0 | 370 |
} |
371 |
} |
|
372 |
||
7545
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
373 |
/** |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
374 |
* Update the station virt coords while making the modified parts dirty. |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
375 |
* |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
376 |
* This function updates the virt coords and mark the modified parts as dirty |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
377 |
* |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
378 |
* @param st The station to update the virt coords |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
379 |
* @ingroup dirty |
d44e19c5671e
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents:
7539
diff
changeset
|
380 |
*/ |
0 | 381 |
static void UpdateStationVirtCoordDirty(Station *st) |
382 |
{ |
|
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
383 |
st->MarkDirty(); |
0 | 384 |
UpdateStationVirtCoord(st); |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
385 |
st->MarkDirty(); |
0 | 386 |
} |
387 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
388 |
/** Get a mask of the cargo types that the station accepts. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
389 |
* @param st Station to query |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
390 |
* @return the expected mask |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
391 |
*/ |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
392 |
static uint GetAcceptanceMask(const Station *st) |
0 | 393 |
{ |
394 |
uint mask = 0; |
|
6069 | 395 |
|
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6329
diff
changeset
|
396 |
for (CargoID i = 0; i < NUM_CARGO; i++) { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
397 |
if (HasBit(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE)) mask |= 1 << i; |
0 | 398 |
} |
399 |
return mask; |
|
400 |
} |
|
401 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
402 |
/** Items contains the two cargo names that are to be accepted or rejected. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
403 |
* msg is the string id of the message to display. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
404 |
*/ |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
405 |
static void ShowRejectOrAcceptNews(const Station *st, uint num_items, CargoID *cargo, StringID msg) |
0 | 406 |
{ |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
407 |
for (uint i = 0; i < num_items; i++) { |
6091
c8827d9ae04a
(svn r8826) -Codechange: Replace _cargoc's separate arrays with a regular struct array (with accessor) and implement new initialization method using cargo labels.
peter1138
parents:
6087
diff
changeset
|
408 |
SetDParam(i + 1, GetCargo(cargo[i])->name); |
0 | 409 |
} |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
410 |
|
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
411 |
SetDParam(0, st->index); |
9234
bfc9d27d3d0d
(svn r13100) -Codechange: reduce the amount of parameters passed via AddNewsMessage as there is (for each news message type) a tuple of 4 parameters that is the same for all calls.
rubidium
parents:
9154
diff
changeset
|
412 |
AddNewsItem(msg, NS_ACCEPTANCE, st->xy, 0); |
0 | 413 |
} |
414 |
||
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
415 |
/** |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
416 |
* Get a list of the cargo types being produced around the tile (in a rectangle). |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
417 |
* @param produced: Destination array of produced cargo |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
418 |
* @param tile: Center of the search area |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
419 |
* @param w: Width of the center |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
420 |
* @param h: Height of the center |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
421 |
* @param rad: Radius of the search area |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
422 |
*/ |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
423 |
void GetProductionAroundTiles(AcceptedCargo produced, TileIndex tile, |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
424 |
int w, int h, int rad) |
0 | 425 |
{ |
2133 | 426 |
memset(produced, 0, sizeof(AcceptedCargo)); |
0 | 427 |
|
6069 | 428 |
int x = TileX(tile); |
429 |
int y = TileY(tile); |
|
0 | 430 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
431 |
/* expand the region by rad tiles on each side |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
432 |
* while making sure that we remain inside the board. */ |
6069 | 433 |
int x2 = min(x + w + rad, MapSizeX()); |
434 |
int x1 = max(x - rad, 0); |
|
435 |
||
436 |
int y2 = min(y + h + rad, MapSizeY()); |
|
437 |
int y1 = max(y - rad, 0); |
|
0 | 438 |
|
439 |
assert(x1 < x2); |
|
440 |
assert(y1 < y2); |
|
441 |
assert(w > 0); |
|
442 |
assert(h > 0); |
|
443 |
||
6069 | 444 |
for (int yc = y1; yc != y2; yc++) { |
445 |
for (int xc = x1; xc != x2; xc++) { |
|
8846
1b90782b2c4e
(svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium
parents:
8840
diff
changeset
|
446 |
TileIndex tile = TileXY(xc, yc); |
1b90782b2c4e
(svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium
parents:
8840
diff
changeset
|
447 |
|
1b90782b2c4e
(svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium
parents:
8840
diff
changeset
|
448 |
if (!IsTileType(tile, MP_STATION)) { |
6069 | 449 |
GetProducedCargoProc *gpc = _tile_type_procs[GetTileType(tile)]->get_produced_cargo_proc; |
0 | 450 |
if (gpc != NULL) { |
8846
1b90782b2c4e
(svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium
parents:
8840
diff
changeset
|
451 |
CargoID cargos[256]; // Required for CBID_HOUSE_PRODUCE_CARGO. |
1b90782b2c4e
(svn r12596) -Feature: show what cargos a station could be supplied with. Patch by Roujin.
rubidium
parents:
8840
diff
changeset
|
452 |
memset(cargos, CT_INVALID, 256); |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
453 |
|
0 | 454 |
gpc(tile, cargos); |
8637
c282b7ea972e
(svn r12258) -Fix: GetProductionAroundTiles() may fail if only the second production slot exists
glx
parents:
8616
diff
changeset
|
455 |
for (uint i = 0; i < lengthof(cargos); ++i) { |
c282b7ea972e
(svn r12258) -Fix: GetProductionAroundTiles() may fail if only the second production slot exists
glx
parents:
8616
diff
changeset
|
456 |
if (cargos[i] != CT_INVALID) produced[cargos[i]]++; |
0 | 457 |
} |
458 |
} |
|
459 |
} |
|
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
460 |
} |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
461 |
} |
0 | 462 |
} |
463 |
||
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
464 |
/** |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
465 |
* Get a list of the cargo types that are accepted around the tile. |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
466 |
* @param accepts: Destination array of accepted cargo |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
467 |
* @param tile: Center of the search area |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
468 |
* @param w: Width of the center |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
469 |
* @param h: Height of the center |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
470 |
* @param rad: Radius of the rectangular search area |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
471 |
*/ |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
472 |
void GetAcceptanceAroundTiles(AcceptedCargo accepts, TileIndex tile, |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
473 |
int w, int h, int rad) |
0 | 474 |
{ |
473
77f0ef57e7cf
(svn r724) Remove restriction that a tile can only accept 3 cargo types.
tron
parents:
457
diff
changeset
|
475 |
memset(accepts, 0, sizeof(AcceptedCargo)); |
0 | 476 |
|
6069 | 477 |
int x = TileX(tile); |
478 |
int y = TileY(tile); |
|
0 | 479 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
480 |
/* expand the region by rad tiles on each side |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
481 |
* while making sure that we remain inside the board. */ |
6069 | 482 |
int x2 = min(x + w + rad, MapSizeX()); |
483 |
int y2 = min(y + h + rad, MapSizeY()); |
|
484 |
int x1 = max(x - rad, 0); |
|
485 |
int y1 = max(y - rad, 0); |
|
0 | 486 |
|
487 |
assert(x1 < x2); |
|
488 |
assert(y1 < y2); |
|
489 |
assert(w > 0); |
|
490 |
assert(h > 0); |
|
491 |
||
6069 | 492 |
for (int yc = y1; yc != y2; yc++) { |
493 |
for (int xc = x1; xc != x2; xc++) { |
|
1981 | 494 |
TileIndex tile = TileXY(xc, yc); |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
495 |
|
1035
812f837ee03f
(svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts
tron
parents:
1032
diff
changeset
|
496 |
if (!IsTileType(tile, MP_STATION)) { |
473
77f0ef57e7cf
(svn r724) Remove restriction that a tile can only accept 3 cargo types.
tron
parents:
457
diff
changeset
|
497 |
AcceptedCargo ac; |
77f0ef57e7cf
(svn r724) Remove restriction that a tile can only accept 3 cargo types.
tron
parents:
457
diff
changeset
|
498 |
|
77f0ef57e7cf
(svn r724) Remove restriction that a tile can only accept 3 cargo types.
tron
parents:
457
diff
changeset
|
499 |
GetAcceptedCargo(tile, ac); |
6069 | 500 |
for (uint i = 0; i < lengthof(ac); ++i) accepts[i] += ac[i]; |
0 | 501 |
} |
1424
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
502 |
} |
38b76de179c9
(svn r1928) Miscellaneous cleanups (data types, whitespace, const correctness)
tron
parents:
1423
diff
changeset
|
503 |
} |
0 | 504 |
} |
505 |
||
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
506 |
static inline void MergePoint(Rect *rect, TileIndex tile) |
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
507 |
{ |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
508 |
int x = TileX(tile); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
509 |
int y = TileY(tile); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
510 |
|
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
511 |
if (rect->left > x) rect->left = x; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
512 |
if (rect->bottom > y) rect->bottom = y; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
513 |
if (rect->right < x) rect->right = x; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
514 |
if (rect->top < y) rect->top = y; |
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
515 |
} |
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
516 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
517 |
/** Update the acceptance for a station. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
518 |
* @param st Station to update |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
519 |
* @param show_msg controls whether to display a message that acceptance was changed. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
520 |
*/ |
0 | 521 |
static void UpdateStationAcceptance(Station *st, bool show_msg) |
522 |
{ |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
523 |
/* Don't update acceptance for a buoy */ |
6069 | 524 |
if (st->IsBuoy()) return; |
525 |
||
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
526 |
Rect rect; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
527 |
rect.left = MapSizeX(); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
528 |
rect.bottom = MapSizeY(); |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
529 |
rect.right = 0; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
530 |
rect.top = 0; |
0 | 531 |
|
532 |
/* old accepted goods types */ |
|
6069 | 533 |
uint old_acc = GetAcceptanceMask(st); |
0 | 534 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
535 |
/* Put all the tiles that span an area in the table. */ |
0 | 536 |
if (st->train_tile != 0) { |
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
537 |
MergePoint(&rect, st->train_tile); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
538 |
MergePoint(&rect, st->train_tile + TileDiffXY(st->trainst_w - 1, st->trainst_h - 1)); |
0 | 539 |
} |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
540 |
|
0 | 541 |
if (st->airport_tile != 0) { |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
542 |
const AirportFTAClass *afc = st->Airport(); |
3876
468642825a10
(svn r4918) Move the information about the size of airports from an global array into the struct which describes an airport
tron
parents:
3873
diff
changeset
|
543 |
|
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
544 |
MergePoint(&rect, st->airport_tile); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
545 |
MergePoint(&rect, st->airport_tile + TileDiffXY(afc->size_x - 1, afc->size_y - 1)); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
546 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
547 |
|
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
548 |
if (st->dock_tile != 0) MergePoint(&rect, st->dock_tile); |
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
549 |
|
6069 | 550 |
for (const RoadStop *rs = st->bus_stops; rs != NULL; rs = rs->next) { |
551 |
MergePoint(&rect, rs->xy); |
|
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
552 |
} |
0 | 553 |
|
6069 | 554 |
for (const RoadStop *rs = st->truck_stops; rs != NULL; rs = rs->next) { |
555 |
MergePoint(&rect, rs->xy); |
|
0 | 556 |
} |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
557 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
558 |
/* And retrieve the acceptance. */ |
6069 | 559 |
AcceptedCargo accepts; |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
560 |
if (rect.right >= rect.left) { |
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
561 |
GetAcceptanceAroundTiles( |
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
562 |
accepts, |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
563 |
TileXY(rect.left, rect.bottom), |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
564 |
rect.right - rect.left + 1, |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
565 |
rect.top - rect.bottom + 1, |
8574
7a10054a7d2a
(svn r12155) -Fix (r12154): some warnings (always compile before commit)
glx
parents:
8573
diff
changeset
|
566 |
_patches.modified_catchment ? FindCatchmentRadius(st) : (uint)CA_UNMODIFIED |
1423
11cd644bf8f8
(svn r1927) Replace implementation of UpdateStationAcceptance(). The new one doesn't malloc() and calculates the station area in one pass instead of 3
tron
parents:
1417
diff
changeset
|
567 |
); |
0 | 568 |
} else { |
569 |
memset(accepts, 0, sizeof(accepts)); |
|
570 |
} |
|
571 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
572 |
/* Adjust in case our station only accepts fewer kinds of goods */ |
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6329
diff
changeset
|
573 |
for (CargoID i = 0; i < NUM_CARGO; i++) { |
0 | 574 |
uint amt = min(accepts[i], 15); |
575 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
576 |
/* Make sure the station can accept the goods type. */ |
6329
a492d5e61d7b
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6306
diff
changeset
|
577 |
bool is_passengers = IsCargoInClass(i, CC_PASSENGERS); |
a492d5e61d7b
(svn r9301) -Codechange: Use cargo class to determine if a road vehicle can stop in bus or truck stops.
peter1138
parents:
6306
diff
changeset
|
578 |
if ((!is_passengers && !(st->facilities & (byte)~FACIL_BUS_STOP)) || |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
579 |
(is_passengers && !(st->facilities & (byte)~FACIL_TRUCK_STOP))) { |
0 | 580 |
amt = 0; |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
581 |
} |
0 | 582 |
|
7474
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
583 |
SB(st->goods[i].acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, amt >= 8); |
0 | 584 |
} |
585 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
586 |
/* Only show a message in case the acceptance was actually changed. */ |
6069 | 587 |
uint new_acc = GetAcceptanceMask(st); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
588 |
if (old_acc == new_acc) return; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
589 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
590 |
/* show a message to report that the acceptance was changed? */ |
0 | 591 |
if (show_msg && st->owner == _local_player && st->facilities) { |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
592 |
/* List of accept and reject strings for different number of |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
593 |
* cargo types */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
594 |
static const StringID accept_msg[] = { |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
595 |
STR_3040_NOW_ACCEPTS, |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
596 |
STR_3041_NOW_ACCEPTS_AND, |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
597 |
}; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
598 |
static const StringID reject_msg[] = { |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
599 |
STR_303E_NO_LONGER_ACCEPTS, |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
600 |
STR_303F_NO_LONGER_ACCEPTS_OR, |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
601 |
}; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
602 |
|
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
603 |
/* Array of accepted and rejected cargo types */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
604 |
CargoID accepts[2] = { CT_INVALID, CT_INVALID }; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
605 |
CargoID rejects[2] = { CT_INVALID, CT_INVALID }; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
606 |
uint num_acc = 0; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
607 |
uint num_rej = 0; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
608 |
|
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
609 |
/* Test each cargo type to see if its acceptange has changed */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
610 |
for (CargoID i = 0; i < NUM_CARGO; i++) { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
611 |
if (HasBit(new_acc, i)) { |
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
612 |
if (!HasBit(old_acc, i) && num_acc < lengthof(accepts)) { |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
613 |
/* New cargo is accepted */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
614 |
accepts[num_acc++] = i; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
615 |
} |
0 | 616 |
} else { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
617 |
if (HasBit(old_acc, i) && num_rej < lengthof(rejects)) { |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
618 |
/* Old cargo is no longer accepted */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
619 |
rejects[num_rej++] = i; |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
620 |
} |
0 | 621 |
} |
5690
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
622 |
} |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
623 |
|
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
624 |
/* Show news message if there are any changes */ |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
625 |
if (num_acc > 0) ShowRejectOrAcceptNews(st, num_acc, accepts, accept_msg[num_acc - 1]); |
2f290fd103cd
(svn r8153) -Codechange: Change UpdateStationAcceptance() and ShowRejectOrAcceptNews() to work with cargo IDs instead of cargo names, and explicitly list the different strings to use.
peter1138
parents:
5683
diff
changeset
|
626 |
if (num_rej > 0) ShowRejectOrAcceptNews(st, num_rej, rejects, reject_msg[num_rej - 1]); |
0 | 627 |
} |
628 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
629 |
/* redraw the station view since acceptance changed */ |
8016
1c7062ad5f50
(svn r11576) -Codechange: enumerize and comment station GUI
smatz
parents:
8015
diff
changeset
|
630 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_ACCEPTLIST); |
0 | 631 |
} |
632 |
||
5098
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
633 |
static void UpdateStationSignCoord(Station *st) |
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
634 |
{ |
6069 | 635 |
const StationRect *r = &st->rect; |
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
636 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
637 |
if (r->IsEmpty()) return; /* no tiles belong to this station */ |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
638 |
|
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
639 |
/* clamp sign coord to be inside the station rect */ |
7922
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7891
diff
changeset
|
640 |
st->xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom)); |
5098
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
641 |
UpdateStationVirtCoordDirty(st); |
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
642 |
} |
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
643 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
644 |
/** This is called right after a station was deleted. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
645 |
* It checks if the whole station is free of substations, and if so, the station will be |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
646 |
* deleted after a little while. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
647 |
* @param st Station |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
648 |
*/ |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
649 |
static void DeleteStationIfEmpty(Station *st) |
2639 | 650 |
{ |
0 | 651 |
if (st->facilities == 0) { |
652 |
st->delete_ctr = 0; |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
653 |
RebuildStationLists(); |
28
635ad4c62bec
(svn r29) -Fix You cannot take ownership of an oilrig by building right next to it
darkvater
parents:
27
diff
changeset
|
654 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
27
87c8058a69b5
(svn r28) -Fix removing station merged with oilrig, will reset oilrigs ownership
darkvater
parents:
22
diff
changeset
|
655 |
} |
5098
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
656 |
/* station remains but it probably lost some parts - station sign should stay in the station boundaries */ |
7de23befaee4
(svn r7169) -Fix: [FS#388] Station sign (and base station coordinates) didn't move along with station when station moved by walking. (HMage)
KUDr
parents:
4982
diff
changeset
|
657 |
UpdateStationSignCoord(st); |
0 | 658 |
} |
659 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
660 |
static CommandCost ClearTile_Station(TileIndex tile, byte flags); |
977
ab88e042b39d
(svn r1472) -Fix: correct error message for when trying to build a railroad station over a bus/truck/etc-station.
darkvater
parents:
972
diff
changeset
|
661 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
662 |
/** Tries to clear the given area. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
663 |
* @param tile TileIndex to start check |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
664 |
* @param w width of search area |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
665 |
* @param h height of search area |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
666 |
* @param flags operation to perform |
8429
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
667 |
* @param invalid_dirs prohibited directions (set of DiagDirections) |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
668 |
* @param station StationID to be queried and returned if available |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
669 |
* @param check_clear if clearing tile should be performed (in wich case, cost will be added) |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
670 |
* @return the cost in case of success, or an error code if it failed. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
671 |
*/ |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
672 |
CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, uint flags, uint invalid_dirs, StationID *station, bool check_clear = true) |
0 | 673 |
{ |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
674 |
CommandCost cost(EXPENSES_CONSTRUCTION); |
1335
a5f223b9f549
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1328
diff
changeset
|
675 |
int allowed_z = -1; |
6069 | 676 |
|
677 |
BEGIN_TILE_LOOP(tile_cur, w, h, tile) { |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5380
diff
changeset
|
678 |
if (MayHaveBridgeAbove(tile_cur) && IsBridgeAbove(tile_cur)) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5380
diff
changeset
|
679 |
return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5380
diff
changeset
|
680 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5380
diff
changeset
|
681 |
|
6915
67a982c01f44
(svn r10168) -Fix [FS#879]: cannot build airport when an aircraft is flying over it.
rubidium
parents:
6857
diff
changeset
|
682 |
if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR; |
0 | 683 |
|
6069 | 684 |
uint z; |
685 |
Slope tileh = GetTileSlope(tile_cur, &z); |
|
0 | 686 |
|
2085
876f20a0e843
(svn r2595) -Codechange: Introduced "IsSteepTileh" to find whether a tile is steep
celestar
parents:
2049
diff
changeset
|
687 |
/* Prohibit building if |
4549
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
688 |
* 1) The tile is "steep" (i.e. stretches two height levels) |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
689 |
* -OR- |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
690 |
* 2) The tile is non-flat if |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
691 |
* a) the player building is an "old-school" AI |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
692 |
* -OR- |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
693 |
* b) the build_on_slopes switch is disabled |
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
694 |
*/ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
695 |
if (IsSteepSlope(tileh) || |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
696 |
((_is_old_ai_player || !_patches.build_on_slopes) && tileh != SLOPE_FLAT)) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
697 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
0 | 698 |
} |
699 |
||
6069 | 700 |
int flat_z = z; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
701 |
if (tileh != SLOPE_FLAT) { |
8429
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
702 |
/* need to check so the entrance to the station is not pointing at a slope. |
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
703 |
* This must be valid for all station tiles, as the user can remove single station tiles. */ |
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
704 |
if ((HasBit(invalid_dirs, DIAGDIR_NE) && !(tileh & SLOPE_NE)) || |
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
705 |
(HasBit(invalid_dirs, DIAGDIR_SE) && !(tileh & SLOPE_SE)) || |
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
706 |
(HasBit(invalid_dirs, DIAGDIR_SW) && !(tileh & SLOPE_SW)) || |
ec2a1005006e
(svn r11999) -Fix: Do entrance-slope-check for every tile of railstations.
frosch
parents:
8424
diff
changeset
|
707 |
(HasBit(invalid_dirs, DIAGDIR_NW) && !(tileh & SLOPE_NW))) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
708 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
0 | 709 |
} |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
710 |
cost.AddCost(_price.terraform); |
3645
7f950533d510
(svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents:
3636
diff
changeset
|
711 |
flat_z += TILE_HEIGHT; |
0 | 712 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
713 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
714 |
/* get corresponding flat level and make sure that all parts of the station have the same level. */ |
0 | 715 |
if (allowed_z == -1) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
716 |
/* first tile */ |
0 | 717 |
allowed_z = flat_z; |
718 |
} else if (allowed_z != flat_z) { |
|
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
719 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
0 | 720 |
} |
721 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
722 |
/* if station is set, then we have special handling to allow building on top of already existing stations. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
723 |
* so station points to INVALID_STATION if we can build on any station. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
724 |
* Or it points to a station if we're only allowed to build on exactly that station. */ |
1035
812f837ee03f
(svn r1536) Move GET_TILEHEIGHT, GET_TILETYPE and IS_TILETYPE to map.h, turn them into inline functions and add some asserts
tron
parents:
1032
diff
changeset
|
725 |
if (station != NULL && IsTileType(tile_cur, MP_STATION)) { |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
726 |
if (!IsRailwayStation(tile_cur)) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
727 |
return ClearTile_Station(tile_cur, DC_AUTO); // get error message |
0 | 728 |
} else { |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
729 |
StationID st = GetStationIndex(tile_cur); |
2498
3ed05caa4449
(svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents:
2493
diff
changeset
|
730 |
if (*station == INVALID_STATION) { |
0 | 731 |
*station = st; |
2498
3ed05caa4449
(svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents:
2493
diff
changeset
|
732 |
} else if (*station != st) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
733 |
return_cmd_error(STR_3006_ADJOINS_MORE_THAN_ONE_EXISTING); |
0 | 734 |
} |
735 |
} |
|
6720
34eab44fd841
(svn r9952) -Fix r9951: it was not possible to build a drive-through station over a road/tram
glx
parents:
6719
diff
changeset
|
736 |
} else if (check_clear) { |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
737 |
CommandCost ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
738 |
if (CmdFailed(ret)) return ret; |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
739 |
cost.AddCost(ret); |
0 | 740 |
} |
6069 | 741 |
} END_TILE_LOOP(tile_cur, w, h, tile) |
0 | 742 |
|
743 |
return cost; |
|
744 |
} |
|
745 |
||
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
746 |
static bool CanExpandRailroadStation(const Station *st, uint *fin, Axis axis) |
0 | 747 |
{ |
6069 | 748 |
uint curw = st->trainst_w; |
749 |
uint curh = st->trainst_h; |
|
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
750 |
TileIndex tile = fin[0]; |
0 | 751 |
uint w = fin[1]; |
752 |
uint h = fin[2]; |
|
753 |
||
754 |
if (_patches.nonuniform_stations) { |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
755 |
/* determine new size of train station region.. */ |
926
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
919
diff
changeset
|
756 |
int x = min(TileX(st->train_tile), TileX(tile)); |
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
919
diff
changeset
|
757 |
int y = min(TileY(st->train_tile), TileY(tile)); |
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
919
diff
changeset
|
758 |
curw = max(TileX(st->train_tile) + curw, TileX(tile) + w) - x; |
a6d140a6a4de
(svn r1414) Move TileIndex, TILE_MASK and GET_TILE_[XY] to map.h and turn the latter into inline functions names Tile[XY]
tron
parents:
919
diff
changeset
|
759 |
curh = max(TileY(st->train_tile) + curh, TileY(tile) + h) - y; |
1981 | 760 |
tile = TileXY(x, y); |
0 | 761 |
} else { |
8098
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
762 |
/* do not allow modifying non-uniform stations, |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
763 |
* the uniform-stations code wouldn't handle it well */ |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
764 |
BEGIN_TILE_LOOP(t, st->trainst_w, st->trainst_h, st->train_tile) |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
765 |
if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station |
8424
c3477565c975
(svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents:
8413
diff
changeset
|
766 |
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED; |
8098
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
767 |
return false; |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
768 |
} |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
769 |
END_TILE_LOOP(t, st->trainst_w, st->trainst_h, st->train_tile) |
e42d1a10cda9
(svn r11659) -Fix [FS#1563]: do not allow modifying non-uniform stations when non-uniform stations are disabled
smatz
parents:
8096
diff
changeset
|
770 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
771 |
/* check so the orientation is the same */ |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
772 |
if (GetRailStationAxis(st->train_tile) != axis) { |
8424
c3477565c975
(svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents:
8413
diff
changeset
|
773 |
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED; |
1189
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
774 |
return false; |
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
775 |
} |
0 | 776 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
777 |
/* check if the new station adjoins the old station in either direction */ |
1981 | 778 |
if (curw == w && st->train_tile == tile + TileDiffXY(0, h)) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
779 |
/* above */ |
0 | 780 |
curh += h; |
1981 | 781 |
} else if (curw == w && st->train_tile == tile - TileDiffXY(0, curh)) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
782 |
/* below */ |
1981 | 783 |
tile -= TileDiffXY(0, curh); |
0 | 784 |
curh += h; |
1981 | 785 |
} else if (curh == h && st->train_tile == tile + TileDiffXY(w, 0)) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
786 |
/* to the left */ |
0 | 787 |
curw += w; |
1981 | 788 |
} else if (curh == h && st->train_tile == tile - TileDiffXY(curw, 0)) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
789 |
/* to the right */ |
1981 | 790 |
tile -= TileDiffXY(curw, 0); |
0 | 791 |
curw += w; |
1189
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
792 |
} else { |
8424
c3477565c975
(svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents:
8413
diff
changeset
|
793 |
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED; |
0 | 794 |
return false; |
1189
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
795 |
} |
0 | 796 |
} |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
797 |
/* make sure the final size is not too big. */ |
1189
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
798 |
if (curw > _patches.station_spread || curh > _patches.station_spread) { |
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
799 |
_error_message = STR_306C_STATION_TOO_SPREAD_OUT; |
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
800 |
return false; |
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
801 |
} |
0 | 802 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
803 |
/* now tile contains the new value for st->train_tile |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
804 |
* curw, curh contain the new value for width and height */ |
0 | 805 |
fin[0] = tile; |
806 |
fin[1] = curw; |
|
807 |
fin[2] = curh; |
|
808 |
return true; |
|
809 |
} |
|
810 |
||
536 | 811 |
static inline byte *CreateSingle(byte *layout, int n) |
0 | 812 |
{ |
813 |
int i = n; |
|
814 |
do *layout++ = 0; while (--i); |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
815 |
layout[((n - 1) >> 1) - n] = 2; |
0 | 816 |
return layout; |
817 |
} |
|
818 |
||
536 | 819 |
static inline byte *CreateMulti(byte *layout, int n, byte b) |
0 | 820 |
{ |
821 |
int i = n; |
|
822 |
do *layout++ = b; while (--i); |
|
823 |
if (n > 4) { |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
824 |
layout[0 - n] = 0; |
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
825 |
layout[n - 1 - n] = 0; |
0 | 826 |
} |
827 |
return layout; |
|
828 |
} |
|
829 |
||
3676
680dfa6336a1
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents:
3657
diff
changeset
|
830 |
static void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec) |
0 | 831 |
{ |
3676
680dfa6336a1
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents:
3657
diff
changeset
|
832 |
if (statspec != NULL && statspec->lengths >= plat_len && |
680dfa6336a1
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents:
3657
diff
changeset
|
833 |
statspec->platforms[plat_len - 1] >= numtracks && |
680dfa6336a1
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents:
3657
diff
changeset
|
834 |
statspec->layouts[plat_len - 1][numtracks - 1]) { |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
835 |
/* Custom layout defined, follow it. */ |
3676
680dfa6336a1
(svn r4593) CodeChange : Renamed spec (when using StationSpec) to statspec.
belugas
parents:
3657
diff
changeset
|
836 |
memcpy(layout, statspec->layouts[plat_len - 1][numtracks - 1], |
1472
a2abe3b9d7a7
(svn r1976) Cleanups - mostly indentation and fiddling with loops
tron
parents:
1457
diff
changeset
|
837 |
plat_len * numtracks); |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
838 |
return; |
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
839 |
} |
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
840 |
|
0 | 841 |
if (plat_len == 1) { |
842 |
CreateSingle(layout, numtracks); |
|
843 |
} else { |
|
2639 | 844 |
if (numtracks & 1) layout = CreateSingle(layout, plat_len); |
845 |
numtracks >>= 1; |
|
0 | 846 |
|
847 |
while (--numtracks >= 0) { |
|
848 |
layout = CreateMulti(layout, plat_len, 4); |
|
849 |
layout = CreateMulti(layout, plat_len, 6); |
|
850 |
} |
|
851 |
} |
|
852 |
} |
|
853 |
||
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
854 |
/** Build railroad station |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
855 |
* @param tile_org starting position of station dragging/placement |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
856 |
* @param flags operation to perform |
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
857 |
* @param p1 various bitstuffed elements |
6134 | 858 |
* - p1 = (bit 0) - orientation (Axis) |
2140
a04d0142ad65
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2133
diff
changeset
|
859 |
* - p1 = (bit 8-15) - number of tracks |
a04d0142ad65
(svn r2650) Convert many explicit shifts+ands to extract bits to invocations of GB - should be a bit nicer to read
tron
parents:
2133
diff
changeset
|
860 |
* - p1 = (bit 16-23) - platform length |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
861 |
* - p1 = (bit 24) - allow stations directly adjacent to other stations. |
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
862 |
* @param p2 various bitstuffed elements |
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
863 |
* - p2 = (bit 0- 3) - railtype (p2 & 0xF) |
3587 | 864 |
* - p2 = (bit 8-15) - custom station class |
865 |
* - p2 = (bit 16-23) - custom station id |
|
0 | 866 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
867 |
CommandCost CmdBuildRailroadStation(TileIndex tile_org, uint32 flags, uint32 p1, uint32 p2) |
0 | 868 |
{ |
869 |
/* Does the authority allow this? */ |
|
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
870 |
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile_org)) return CMD_ERROR; |
8236
8a5dd0b42e47
(svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents:
8230
diff
changeset
|
871 |
if (!ValParamRailtype((RailType)(p2 & 0xF))) return CMD_ERROR; |
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
872 |
|
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
873 |
/* unpack parameters */ |
6134 | 874 |
Axis axis = Extract<Axis, 0>(p1); |
6069 | 875 |
uint numtracks = GB(p1, 8, 8); |
876 |
uint plat_len = GB(p1, 16, 8); |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
877 |
|
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
878 |
int w_org, h_org; |
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
879 |
if (axis == AXIS_X) { |
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
880 |
w_org = plat_len; |
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
881 |
h_org = numtracks; |
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
882 |
} else { |
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
883 |
h_org = plat_len; |
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
884 |
w_org = numtracks; |
0 | 885 |
} |
886 |
||
1781
5e2fef482637
(svn r2285) - Codechange: Fix up some of the missing things from server-checking; namely bridge-type, bridge-length, dragged end-tile (bridge/station), station_spread
Darkvater
parents:
1775
diff
changeset
|
887 |
if (h_org > _patches.station_spread || w_org > _patches.station_spread) return CMD_ERROR; |
5e2fef482637
(svn r2285) - Codechange: Fix up some of the missing things from server-checking; namely bridge-type, bridge-length, dragged end-tile (bridge/station), station_spread
Darkvater
parents:
1775
diff
changeset
|
888 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
889 |
/* these values are those that will be stored in train_tile and station_platforms */ |
6069 | 890 |
uint finalvalues[3]; |
0 | 891 |
finalvalues[0] = tile_org; |
892 |
finalvalues[1] = w_org; |
|
893 |
finalvalues[2] = h_org; |
|
894 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
895 |
/* Make sure the area below consists of clear tiles. (OR tiles belonging to a certain rail station) */ |
6069 | 896 |
StationID est = INVALID_STATION; |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
897 |
/* If DC_EXEC is in flag, do not want to pass it to CheckFlatLandBelow, because of a nice bug |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
898 |
* for detail info, see: |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
899 |
* https://sourceforge.net/tracker/index.php?func=detail&aid=1029064&group_id=103924&atid=636365 */ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
900 |
CommandCost ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags & ~DC_EXEC, 5 << axis, _patches.nonuniform_stations ? &est : NULL); |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
901 |
if (CmdFailed(ret)) return ret; |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
902 |
CommandCost cost(EXPENSES_CONSTRUCTION, ret.GetCost() + (numtracks * _price.train_station_track + _price.train_station_length) * plat_len); |
0 | 903 |
|
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
904 |
Station *st = NULL; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
905 |
bool check_surrounding = true; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
906 |
|
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
907 |
if (_patches.adjacent_stations) { |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
908 |
if (est != INVALID_STATION) { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
909 |
if (HasBit(p1, 24)) { |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
910 |
/* You can't build an adjacent station over the top of one that |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
911 |
* already exists. */ |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
912 |
return_cmd_error(STR_MUST_REMOVE_RAILWAY_STATION_FIRST); |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
913 |
} else { |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
914 |
/* Extend the current station, and don't check whether it will |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
915 |
* be near any other stations. */ |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
916 |
st = GetStation(est); |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
917 |
check_surrounding = false; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
918 |
} |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
919 |
} else { |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
920 |
/* There's no station here. Don't check the tiles surrounding this |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
921 |
* one if the player wanted to build an adjacent station. */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
922 |
if (HasBit(p1, 24)) check_surrounding = false; |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
923 |
} |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
924 |
} |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
925 |
|
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
926 |
if (check_surrounding) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
927 |
/* Make sure there are no similar stations around us. */ |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
928 |
st = GetStationAround(tile_org, w_org, h_org, est); |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
929 |
if (st == CHECK_STATIONS_ERR) return CMD_ERROR; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
930 |
} |
0 | 931 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
932 |
/* See if there is a deleted station close to us. */ |
6052 | 933 |
if (st == NULL) st = GetClosestStationFromTile(tile_org); |
0 | 934 |
|
935 |
if (st != NULL) { |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
936 |
/* Reuse an existing station. */ |
6064 | 937 |
if (st->owner != _current_player) |
0 | 938 |
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION); |
939 |
||
940 |
if (st->train_tile != 0) { |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
941 |
/* check if we want to expanding an already existing station? */ |
2422
897a01f7c624
(svn r2948) -Fix: the old AI needs a special flag that triggers all kind of special
truelight
parents:
2395
diff
changeset
|
942 |
if (_is_old_ai_player || !_patches.join_stations) |
0 | 943 |
return_cmd_error(STR_3005_TOO_CLOSE_TO_ANOTHER_RAILROAD); |
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
944 |
if (!CanExpandRailroadStation(st, finalvalues, axis)) |
1189
257509152c47
(svn r1693) -Fix: [ 1108618 ] A wrong error message was displayed when trying to
Celestar
parents:
1174
diff
changeset
|
945 |
return CMD_ERROR; |
0 | 946 |
} |
947 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
948 |
/* XXX can't we pack this in the "else" part of the if above? */ |
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
949 |
if (!st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TEST)) return CMD_ERROR; |
4434
a08cb4b5c179
(svn r6204) -Cleanup: replace non-indentation with spaces; like '}<TAB>else {' -> '} else {', tabs between code and comment, etc.
rubidium
parents:
4399
diff
changeset
|
950 |
} else { |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
951 |
/* allocate and initialize new station */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
952 |
if (!Station::CanAllocateItem()) return_cmd_error(STR_3008_TOO_MANY_STATIONS_LOADING); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
953 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
954 |
if (flags & DC_EXEC) { |
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
955 |
st = new Station(tile_org); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
956 |
|
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
957 |
st->town = ClosestTownFromTile(tile_org, UINT_MAX); |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
958 |
st->string_id = GenerateStationName(st, tile_org, STATIONNAMING_RAIL); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
959 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
960 |
if (IsValidPlayer(_current_player)) { |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
961 |
SetBit(st->town->have_ratings, _current_player); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
962 |
} |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
963 |
} |
0 | 964 |
} |
965 |
||
3587 | 966 |
/* Check if the given station class is valid */ |
8296
59fa0940aefe
(svn r11860) -Fix: Test station class validity against number of classes, not abosolute limit.
peter1138
parents:
8264
diff
changeset
|
967 |
if (GB(p2, 8, 8) >= GetNumStationClasses()) return CMD_ERROR; |
3587 | 968 |
|
969 |
/* Check if we can allocate a custom stationspec to this station */ |
|
6069 | 970 |
const StationSpec *statspec = GetCustomStationSpec((StationClassID)GB(p2, 8, 8), GB(p2, 16, 8)); |
971 |
int specindex = AllocateSpecToStation(statspec, st, flags & DC_EXEC); |
|
3587 | 972 |
if (specindex == -1) return CMD_ERROR; |
973 |
||
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
974 |
if (statspec != NULL) { |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
975 |
/* Perform NewStation checks */ |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
976 |
|
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
977 |
/* Check if the station size is permitted */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
978 |
if (HasBit(statspec->disallowed_platforms, numtracks - 1) || HasBit(statspec->disallowed_lengths, plat_len - 1)) { |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
979 |
return CMD_ERROR; |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
980 |
} |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
981 |
|
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
982 |
/* Check if the station is buildable */ |
9020
8174bbda9abe
(svn r12819) -Codechange: handle more NewGRFs in the same way as TTDP does it, i.e. testing the low bits for 0xFF or 0 instead of all bits.
rubidium
parents:
9005
diff
changeset
|
983 |
if (HasBit(statspec->callbackmask, CBM_STATION_AVAIL) && GB(GetStationCallback(CBID_STATION_AVAILABILITY, 0, 0, statspec, NULL, INVALID_TILE), 0, 8) == 0) { |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
984 |
return CMD_ERROR; |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
985 |
} |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
986 |
} |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
987 |
|
0 | 988 |
if (flags & DC_EXEC) { |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
989 |
TileIndexDiff tile_delta; |
0 | 990 |
byte *layout_ptr; |
3769
7d3b35126fc1
(svn r4761) - Newstations: support platform information in variable 10 (callback parameter 1) when building a station
peter1138
parents:
3766
diff
changeset
|
991 |
byte numtracks_orig; |
2824
4409cab99b02
(svn r3372) - Fix: update signal states when building or removing rail station blocks
peter1138
parents:
2817
diff
changeset
|
992 |
Track track; |
0 | 993 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
994 |
/* Now really clear the land below the station |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
995 |
* It should never return CMD_ERROR.. but you never know ;) |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
996 |
* (a bit strange function name for it, but it really does clear the land, when DC_EXEC is in flags) */ |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
997 |
ret = CheckFlatLandBelow(tile_org, w_org, h_org, flags, 5 << axis, _patches.nonuniform_stations ? &est : NULL); |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3161
diff
changeset
|
998 |
if (CmdFailed(ret)) return ret; |
313
0c7cac001d1a
(svn r319) -Fix: [ 1029064 ] Building a station acted weird in some rare situations
truelight
parents:
243
diff
changeset
|
999 |
|
0 | 1000 |
st->train_tile = finalvalues[0]; |
5721
fa4e587f59f5
(svn r8231) -Fix (r8125): MP desync caused by calling Random() from station constructor. This was wrong because station constructor is called also when loading savegame and when player tries to build station when it is not sure that it will succeed (thanks Rubidium)
KUDr
parents:
5718
diff
changeset
|
1001 |
st->AddFacility(FACIL_TRAIN, finalvalues[0]); |
0 | 1002 |
|
1003 |
st->trainst_w = finalvalues[1]; |
|
1004 |
st->trainst_h = finalvalues[2]; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1005 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1006 |
st->rect.BeforeAddRect(tile_org, w_org, h_org, StationRect::ADD_TRY); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1007 |
|
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1008 |
if (statspec != NULL) { |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1009 |
/* Include this station spec's animation trigger bitmask |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1010 |
* in the station's cached copy. */ |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1011 |
st->cached_anim_triggers |= statspec->anim_triggers; |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1012 |
} |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1013 |
|
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3123
diff
changeset
|
1014 |
tile_delta = (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); |
4158 | 1015 |
track = AxisToTrack(axis); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1016 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
1017 |
layout_ptr = (byte*)alloca(numtracks * plat_len); |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
1018 |
GetStationLayout(layout_ptr, numtracks, plat_len, statspec); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1019 |
|
3769
7d3b35126fc1
(svn r4761) - Newstations: support platform information in variable 10 (callback parameter 1) when building a station
peter1138
parents:
3766
diff
changeset
|
1020 |
numtracks_orig = numtracks; |
7d3b35126fc1
(svn r4761) - Newstations: support platform information in variable 10 (callback parameter 1) when building a station
peter1138
parents:
3766
diff
changeset
|
1021 |
|
0 | 1022 |
do { |
1775
548dc04d50e2
(svn r2279) - Fix: Check the parameters of the first 10 Commands. While there also add proper comments for the functions and fix up CmdFailed()
Darkvater
parents:
1774
diff
changeset
|
1023 |
TileIndex tile = tile_org; |
0 | 1024 |
int w = plat_len; |
1025 |
do { |
|
3769
7d3b35126fc1
(svn r4761) - Newstations: support platform information in variable 10 (callback parameter 1) when building a station
peter1138
parents:
3766
diff
changeset
|
1026 |
byte layout = *layout_ptr++; |
6556
404da976ca9a
(svn r9758) -Fix (FS#756): Ignore bit 1 (axis) of station tile layouts
peter1138
parents:
6500
diff
changeset
|
1027 |
MakeRailStation(tile, st->owner, st->index, axis, layout & ~1, (RailType)GB(p2, 0, 4)); |
3587 | 1028 |
SetCustomStationSpecIndex(tile, specindex); |
3742
c5ef7a92daa5
(svn r4724) - Newstations: Add per-tile random data for station tiles.
peter1138
parents:
3741
diff
changeset
|
1029 |
SetStationTileRandomBits(tile, GB(Random(), 0, 4)); |
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1030 |
SetStationAnimationFrame(tile, 0); |
0 | 1031 |
|
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
1032 |
if (statspec != NULL) { |
3784
213a1a3f8697
(svn r4780) - Newstations: when building using a dynamic layout, add the station axis to the returned tile type. Also supply correct parameters to var 10.
peter1138
parents:
3775
diff
changeset
|
1033 |
/* Use a fixed axis for GetPlatformInfo as our platforms / numtracks are always the right way around */ |
213a1a3f8697
(svn r4780) - Newstations: when building using a dynamic layout, add the station axis to the returned tile type. Also supply correct parameters to var 10.
peter1138
parents:
3775
diff
changeset
|
1034 |
uint32 platinfo = GetPlatformInfo(AXIS_X, 0, plat_len, numtracks_orig, plat_len - w, numtracks_orig - numtracks, false); |
7864
1380a814e4e0
(svn r11414) -Fix [FS#1387]: when building a station, even though we already 'know' it in memory, it should still be unknown in the realm of callbacks.
rubidium
parents:
7857
diff
changeset
|
1035 |
|
1380a814e4e0
(svn r11414) -Fix [FS#1387]: when building a station, even though we already 'know' it in memory, it should still be unknown in the realm of callbacks.
rubidium
parents:
7857
diff
changeset
|
1036 |
/* As the station is not yet completely finished, the station does not yet exist. */ |
1380a814e4e0
(svn r11414) -Fix [FS#1387]: when building a station, even though we already 'know' it in memory, it should still be unknown in the realm of callbacks.
rubidium
parents:
7857
diff
changeset
|
1037 |
uint16 callback = GetStationCallback(CBID_STATION_TILE_LAYOUT, platinfo, 0, statspec, NULL, tile); |
6556
404da976ca9a
(svn r9758) -Fix (FS#756): Ignore bit 1 (axis) of station tile layouts
peter1138
parents:
6500
diff
changeset
|
1038 |
if (callback != CALLBACK_FAILED && callback < 8) SetStationGfx(tile, (callback & ~1) + axis); |
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1039 |
|
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1040 |
/* Trigger station animation -- after building? */ |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1041 |
StationAnimationTrigger(st, tile, STAT_ANIM_BUILT); |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
1042 |
} |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
1043 |
|
0 | 1044 |
tile += tile_delta; |
1045 |
} while (--w); |
|
8306
22e1344c5457
(svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents:
8302
diff
changeset
|
1046 |
AddTrackToSignalBuffer(tile_org, track, _current_player); |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1047 |
YapfNotifyTrackLayoutChange(tile_org, track); |
1981 | 1048 |
tile_org += tile_delta ^ TileDiffXY(1, 1); // perpendicular to tile_delta |
0 | 1049 |
} while (--numtracks); |
1050 |
||
6823
1f2075619543
(svn r10062) -Codechange: Don't redraw all station tiles when cargo is added or removed if the station has no custom graphics.
peter1138
parents:
6761
diff
changeset
|
1051 |
st->MarkTilesDirty(false); |
0 | 1052 |
UpdateStationVirtCoordDirty(st); |
1053 |
UpdateStationAcceptance(st, false); |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
1054 |
RebuildStationLists(); |
0 | 1055 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1056 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS); |
0 | 1057 |
} |
1058 |
||
1059 |
return cost; |
|
1060 |
} |
|
1061 |
||
1062 |
static void MakeRailwayStationAreaSmaller(Station *st) |
|
1063 |
{ |
|
1064 |
uint w = st->trainst_w; |
|
1065 |
uint h = st->trainst_h; |
|
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
1066 |
TileIndex tile = st->train_tile; |
0 | 1067 |
|
1068 |
restart: |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1069 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1070 |
/* too small? */ |
0 | 1071 |
if (w != 0 && h != 0) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1072 |
/* check the left side, x = constant, y changes */ |
6069 | 1073 |
for (uint i = 0; !st->TileBelongsToRailStation(tile + TileDiffXY(0, i));) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1074 |
/* the left side is unused? */ |
1981 | 1075 |
if (++i == h) { |
1076 |
tile += TileDiffXY(1, 0); |
|
1077 |
w--; |
|
1078 |
goto restart; |
|
1079 |
} |
|
1080 |
} |
|
0 | 1081 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1082 |
/* check the right side, x = constant, y changes */ |
6069 | 1083 |
for (uint i = 0; !st->TileBelongsToRailStation(tile + TileDiffXY(w - 1, i));) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1084 |
/* the right side is unused? */ |
1981 | 1085 |
if (++i == h) { |
1086 |
w--; |
|
1087 |
goto restart; |
|
1088 |
} |
|
1089 |
} |
|
0 | 1090 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1091 |
/* check the upper side, y = constant, x changes */ |
6069 | 1092 |
for (uint i = 0; !st->TileBelongsToRailStation(tile + TileDiffXY(i, 0));) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1093 |
/* the left side is unused? */ |
1981 | 1094 |
if (++i == w) { |
1095 |
tile += TileDiffXY(0, 1); |
|
1096 |
h--; |
|
1097 |
goto restart; |
|
1098 |
} |
|
1099 |
} |
|
0 | 1100 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1101 |
/* check the lower side, y = constant, x changes */ |
6069 | 1102 |
for (uint i = 0; !st->TileBelongsToRailStation(tile + TileDiffXY(i, h - 1));) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1103 |
/* the left side is unused? */ |
1981 | 1104 |
if (++i == w) { |
1105 |
h--; |
|
1106 |
goto restart; |
|
1107 |
} |
|
1108 |
} |
|
0 | 1109 |
} else { |
1110 |
tile = 0; |
|
1111 |
} |
|
1112 |
||
1113 |
st->trainst_w = w; |
|
1114 |
st->trainst_h = h; |
|
1115 |
st->train_tile = tile; |
|
1116 |
} |
|
1117 |
||
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1118 |
/** Remove a single tile from a railroad station. |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1119 |
* This allows for custom-built station with holes and weird layouts |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
1120 |
* @param tile tile of station piece to remove |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1121 |
* @param flags operation to perform |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1122 |
* @param p1 start_tile |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1123 |
* @param p2 unused |
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1124 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1125 |
CommandCost CmdRemoveFromRailroadStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1126 |
{ |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1127 |
TileIndex start = p1 == 0 ? tile : p1; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1128 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1129 |
/* Count of the number of tiles removed */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1130 |
int quantity = 0; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1131 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1132 |
if (tile >= MapSize() || start >= MapSize()) return CMD_ERROR; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1133 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1134 |
/* make sure sx,sy are smaller than ex,ey */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1135 |
int ex = TileX(tile); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1136 |
int ey = TileY(tile); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1137 |
int sx = TileX(start); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1138 |
int sy = TileY(start); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1139 |
if (ex < sx) Swap(ex, sx); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1140 |
if (ey < sy) Swap(ey, sy); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1141 |
tile = TileXY(sx, sy); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1142 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1143 |
int size_x = ex - sx + 1; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1144 |
int size_y = ey - sy + 1; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1145 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1146 |
/* Do the action for every tile into the area */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1147 |
BEGIN_TILE_LOOP(tile2, size_x, size_y, tile) { |
8010
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1148 |
/* Make sure the specified tile is a railroad station */ |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1149 |
if (!IsTileType(tile2, MP_STATION) || !IsRailwayStation(tile2)) { |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1150 |
continue; |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1151 |
} |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1152 |
|
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1153 |
/* If there is a vehicle on ground, do not allow to remove (flood) the tile */ |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1154 |
if (!EnsureNoVehicleOnGround(tile2)) { |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1155 |
continue; |
0 | 1156 |
} |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1157 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1158 |
/* Check ownership of station */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1159 |
Station *st = GetStationByTile(tile2); |
8010
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1160 |
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) { |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1161 |
continue; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1162 |
} |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1163 |
|
8010
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1164 |
/* Do not allow removing from stations if non-uniform stations are not enabled |
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1165 |
* The check must be here to give correct error message |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
1166 |
*/ |
8424
c3477565c975
(svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents:
8413
diff
changeset
|
1167 |
if (!_patches.nonuniform_stations) return_cmd_error(STR_NONUNIFORM_STATIONS_DISALLOWED); |
8010
362ba0e81391
(svn r11570) -Fix: do not flood rail station tiles when there is a vehicle on it (when non-uniform stations are ON)
smatz
parents:
7954
diff
changeset
|
1168 |
|
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1169 |
/* If we reached here, the tile is valid so increase the quantity of tiles we will remove */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1170 |
quantity++; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1171 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1172 |
if (flags & DC_EXEC) { |
8300
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1173 |
/* read variables before the station tile is removed */ |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1174 |
uint specindex = GetCustomStationSpecIndex(tile2); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1175 |
Track track = GetRailStationTrack(tile2); |
8300
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1176 |
Owner owner = GetTileOwner(tile2); |
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1177 |
|
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1178 |
DoClearSquare(tile2); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1179 |
st->rect.AfterRemoveTile(st, tile2); |
8306
22e1344c5457
(svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents:
8302
diff
changeset
|
1180 |
AddTrackToSignalBuffer(tile2, track, owner); |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1181 |
YapfNotifyTrackLayoutChange(tile2, track); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1182 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1183 |
DeallocateSpecFromStation(st, specindex); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1184 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1185 |
/* now we need to make the "spanned" area of the railway station smaller |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1186 |
* if we deleted something at the edges. |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1187 |
* we also need to adjust train_tile. */ |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1188 |
MakeRailwayStationAreaSmaller(st); |
6823
1f2075619543
(svn r10062) -Codechange: Don't redraw all station tiles when cargo is added or removed if the station has no custom graphics.
peter1138
parents:
6761
diff
changeset
|
1189 |
st->MarkTilesDirty(false); |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1190 |
UpdateStationSignCoord(st); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1191 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1192 |
/* if we deleted the whole station, delete the train facility. */ |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1193 |
if (st->train_tile == 0) { |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1194 |
st->facilities &= ~FACIL_TRAIN; |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1195 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS); |
6596
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1196 |
UpdateStationVirtCoordDirty(st); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1197 |
DeleteStationIfEmpty(st); |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1198 |
} |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1199 |
} |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1200 |
} END_TILE_LOOP(tile2, size_x, size_y, tile) |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1201 |
|
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1202 |
/* If we've not removed any tiles, give an error */ |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1203 |
if (quantity == 0) return CMD_ERROR; |
f200c4895149
(svn r9810) -Feature: Add drag and drop removal of station tiles (Wolf01)
peter1138
parents:
6556
diff
changeset
|
1204 |
|
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1205 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_rail_station * quantity); |
0 | 1206 |
} |
1207 |
||
3928
53fe96558353
(svn r5063) -Codechange: Add a function to determine the length of a platform (request by KUDr)
celestar
parents:
3900
diff
changeset
|
1208 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1209 |
static CommandCost RemoveRailroadStation(Station *st, TileIndex tile, uint32 flags) |
0 | 1210 |
{ |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
123
diff
changeset
|
1211 |
/* if there is flooding and non-uniform stations are enabled, remove platforms tile by tile */ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1212 |
if (_current_player == OWNER_WATER && _patches.nonuniform_stations) { |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
1213 |
return DoCommand(tile, 0, 0, DC_EXEC, CMD_REMOVE_FROM_RAILROAD_STATION); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1214 |
} |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
123
diff
changeset
|
1215 |
|
0 | 1216 |
/* Current player owns the station? */ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1217 |
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) return CMD_ERROR; |
0 | 1218 |
|
1219 |
/* determine width and height of platforms */ |
|
1220 |
tile = st->train_tile; |
|
6069 | 1221 |
int w = st->trainst_w; |
1222 |
int h = st->trainst_h; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1223 |
|
0 | 1224 |
assert(w != 0 && h != 0); |
1225 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1226 |
CommandCost cost(EXPENSES_CONSTRUCTION); |
0 | 1227 |
/* clear all areas of the station */ |
1228 |
do { |
|
1229 |
int w_bak = w; |
|
1230 |
do { |
|
8300
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1231 |
/* for nonuniform stations, only remove tiles that are actually train station tiles */ |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1232 |
if (st->TileBelongsToRailStation(tile)) { |
7758
17ad53748c7b
(svn r11303) -Fix: EnsureNoVehicle and EnsureNoVehicleOnGround were both used to check whether there was no vehicle on the ground, except that the former didn't take care of aircraft shadows. So now we only use EnsureNoVehicleOnGround.
rubidium
parents:
7739
diff
changeset
|
1233 |
if (!EnsureNoVehicleOnGround(tile)) |
0 | 1234 |
return CMD_ERROR; |
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
1235 |
cost.AddCost(_price.remove_rail_station); |
2824
4409cab99b02
(svn r3372) - Fix: update signal states when building or removing rail station blocks
peter1138
parents:
2817
diff
changeset
|
1236 |
if (flags & DC_EXEC) { |
8300
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1237 |
/* read variables before the station tile is removed */ |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
1238 |
Track track = GetRailStationTrack(tile); |
8300
dfd530665621
(svn r11864) -Codechange: pass owner whose signals we will update instead of complex detection later
smatz
parents:
8296
diff
changeset
|
1239 |
Owner owner = GetTileOwner(tile); // _current_player can be OWNER_WATER |
0 | 1240 |
DoClearSquare(tile); |
8306
22e1344c5457
(svn r11871) -Fix [FS#1074]: do not update signals after each tile when building/removing a large block of track/signals/station
smatz
parents:
8302
diff
changeset
|
1241 |
AddTrackToSignalBuffer(tile, track, owner); |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1242 |
YapfNotifyTrackLayoutChange(tile, track); |
2824
4409cab99b02
(svn r3372) - Fix: update signal states when building or removing rail station blocks
peter1138
parents:
2817
diff
changeset
|
1243 |
} |
0 | 1244 |
} |
1981 | 1245 |
tile += TileDiffXY(1, 0); |
0 | 1246 |
} while (--w); |
1247 |
w = w_bak; |
|
1981 | 1248 |
tile += TileDiffXY(-w, 1); |
0 | 1249 |
} while (--h); |
1250 |
||
1251 |
if (flags & DC_EXEC) { |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1252 |
st->rect.AfterRemoveRect(st, st->train_tile, st->trainst_w, st->trainst_h); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1253 |
|
0 | 1254 |
st->train_tile = 0; |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1255 |
st->trainst_w = st->trainst_h = 0; |
0 | 1256 |
st->facilities &= ~FACIL_TRAIN; |
1257 |
||
3587 | 1258 |
free(st->speclist); |
1259 |
st->num_specs = 0; |
|
1260 |
st->speclist = NULL; |
|
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
1261 |
st->cached_anim_triggers = 0; |
3587 | 1262 |
|
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1263 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_TRAINS); |
0 | 1264 |
UpdateStationVirtCoordDirty(st); |
1265 |
DeleteStationIfEmpty(st); |
|
1266 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1267 |
|
0 | 1268 |
return cost; |
1269 |
} |
|
1270 |
||
6368
c58210a58402
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
celestar
parents:
6357
diff
changeset
|
1271 |
/** |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
1272 |
* @param truck_station Determines whether a stop is ROADSTOP_BUS or ROADSTOP_TRUCK |
6488
b6c42e91bb35
(svn r9669) -Documentation: some more doxygen fixes
belugas
parents:
6484
diff
changeset
|
1273 |
* @param st The Station to do the whole procedure for |
5906 | 1274 |
* @return a pointer to where to link a new RoadStop* |
4549
106ed18a7675
(svn r6381) -Cleanup: make the '/* */' comments that span multiple lines more uniform.
rubidium
parents:
4528
diff
changeset
|
1275 |
*/ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1276 |
static RoadStop **FindRoadStopSpot(bool truck_station, Station *st) |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1277 |
{ |
3691
56dfcf599c3f
(svn r4619) -Codechange: Rename FindRoadStationSpot into FindRoadStopSpot and try to document it a little.
celestar
parents:
3687
diff
changeset
|
1278 |
RoadStop **primary_stop = (truck_station) ? &st->truck_stops : &st->bus_stops; |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1279 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1280 |
if (*primary_stop == NULL) { |
6488
b6c42e91bb35
(svn r9669) -Documentation: some more doxygen fixes
belugas
parents:
6484
diff
changeset
|
1281 |
/* we have no roadstop of the type yet, so write a "primary stop" */ |
5906 | 1282 |
return primary_stop; |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1283 |
} else { |
6488
b6c42e91bb35
(svn r9669) -Documentation: some more doxygen fixes
belugas
parents:
6484
diff
changeset
|
1284 |
/* there are stops already, so append to the end of the list */ |
5906 | 1285 |
RoadStop *stop = *primary_stop; |
1286 |
while (stop->next != NULL) stop = stop->next; |
|
1287 |
return &stop->next; |
|
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1288 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1289 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1290 |
|
3691
56dfcf599c3f
(svn r4619) -Codechange: Rename FindRoadStationSpot into FindRoadStopSpot and try to document it a little.
celestar
parents:
3687
diff
changeset
|
1291 |
/** Build a bus or truck stop |
56dfcf599c3f
(svn r4619) -Codechange: Rename FindRoadStationSpot into FindRoadStopSpot and try to document it a little.
celestar
parents:
3687
diff
changeset
|
1292 |
* @param tile tile to build the stop at |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1293 |
* @param flags operation to perform |
3333 | 1294 |
* @param p1 entrance direction (DiagDirection) |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1295 |
* @param p2 bit 0: 0 for Bus stops, 1 for truck stops |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1296 |
* bit 1: 0 for normal, 1 for drive-through |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1297 |
* bit 2..4: the roadtypes |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1298 |
* bit 5: allow stations directly adjacent to other stations. |
0 | 1299 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1300 |
CommandCost CmdBuildRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1301 |
{ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1302 |
bool type = HasBit(p2, 0); |
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1303 |
bool is_drive_through = HasBit(p2, 1); |
8563
13b1a41e46f1
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
8520
diff
changeset
|
1304 |
bool build_over_road = is_drive_through && IsNormalRoadTile(tile); |
6067
41d9b6776339
(svn r8797) -Fix (8741): the 'drive through station built on town owned road' bit was not set.
rubidium
parents:
6066
diff
changeset
|
1305 |
bool town_owned_road = build_over_road && IsTileOwner(tile, OWNER_TOWN); |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1306 |
RoadTypes rts = (RoadTypes)GB(p2, 2, 3); |
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1307 |
|
7857
6572278b5822
(svn r11407) -Fix: do not allow building of tram-tracks when they are not available (SmatZ)
truelight
parents:
7849
diff
changeset
|
1308 |
if (!AreValidRoadTypes(rts) || !HasRoadTypesAvail(_current_player, rts)) return CMD_ERROR; |
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1309 |
|
6677
8120427efe01
(svn r9908) -Codechange: prepare the station picker for more road types.
rubidium
parents:
6674
diff
changeset
|
1310 |
/* Trams only have drive through stops */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1311 |
if (!is_drive_through && HasBit(rts, ROADTYPE_TRAM)) return CMD_ERROR; |
6677
8120427efe01
(svn r9908) -Codechange: prepare the station picker for more road types.
rubidium
parents:
6674
diff
changeset
|
1312 |
|
1782
48749e4c2dc6
(svn r2286) - CodeChange: paramcheck the next batch of commands.
Darkvater
parents:
1781
diff
changeset
|
1313 |
/* Saveguard the parameters */ |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
1314 |
if (!IsValidDiagDirection((DiagDirection)p1)) return CMD_ERROR; |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1315 |
/* If it is a drive-through stop check for valid axis */ |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1316 |
if (is_drive_through && !IsValidAxis((Axis)p1)) return CMD_ERROR; |
6018
5d143f68ac94
(svn r8741) -Fix (r8735): make the saveguards of CmdBuildRoadStop more robust and add roadstops.grf to the list of required grfs.
rubidium
parents:
6012
diff
changeset
|
1317 |
/* Road bits in the wrong direction */ |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1318 |
if (build_over_road && (GetAllRoadBits(tile) & ((Axis)p1 == AXIS_X ? ROAD_Y : ROAD_X)) != 0) return_cmd_error(STR_DRIVE_THROUGH_ERROR_DIRECTION); |
6703
fdb8d05ce28f
(svn r9935) -Fix: could not build a drive through station when there when you own the tram bits and the town owns the road.
rubidium
parents:
6691
diff
changeset
|
1319 |
|
fdb8d05ce28f
(svn r9935) -Fix: could not build a drive through station when there when you own the tram bits and the town owns the road.
rubidium
parents:
6691
diff
changeset
|
1320 |
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) return CMD_ERROR; |
fdb8d05ce28f
(svn r9935) -Fix: could not build a drive through station when there when you own the tram bits and the town owns the road.
rubidium
parents:
6691
diff
changeset
|
1321 |
|
6018
5d143f68ac94
(svn r8741) -Fix (r8735): make the saveguards of CmdBuildRoadStop more robust and add roadstops.grf to the list of required grfs.
rubidium
parents:
6012
diff
changeset
|
1322 |
/* Not allowed to build over this road */ |
6402
f15c50d74932
(svn r9532) -Fix (r8741) [FS#708]: Make errors when building drive through road stops more descriptive.
maedhros
parents:
6394
diff
changeset
|
1323 |
if (build_over_road) { |
f15c50d74932
(svn r9532) -Fix (r8741) [FS#708]: Make errors when building drive through road stops more descriptive.
maedhros
parents:
6394
diff
changeset
|
1324 |
if (IsTileOwner(tile, OWNER_TOWN) && !_patches.road_stop_on_town_road) return_cmd_error(STR_DRIVE_THROUGH_ERROR_ON_TOWN_ROAD); |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
1325 |
|
8377
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1326 |
RoadTypes cur_rts = GetRoadTypes(tile); |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1327 |
|
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1328 |
/* there is a road, check if we can build road+tram stop over it */ |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1329 |
if (HasBit(cur_rts, ROADTYPE_ROAD)) { |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1330 |
Owner road_owner = GetRoadOwner(tile, ROADTYPE_ROAD); |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1331 |
if (road_owner != OWNER_TOWN && road_owner != OWNER_NONE && !CheckOwnership(road_owner)) return CMD_ERROR; |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1332 |
} |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1333 |
|
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1334 |
/* there is a tram, check if we can build road+tram stop over it */ |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1335 |
if (HasBit(cur_rts, ROADTYPE_TRAM)) { |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1336 |
Owner tram_owner = GetRoadOwner(tile, ROADTYPE_TRAM); |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1337 |
if (tram_owner != OWNER_NONE && !CheckOwnership(tram_owner)) return CMD_ERROR; |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1338 |
} |
23835ad7ab64
(svn r11944) -Fix: allow building drive-through road/tram stops at road/tram track that has no owner
smatz
parents:
8306
diff
changeset
|
1339 |
|
6761
43c0425f9290
(svn r9996) -Fix: be more strict when building/upgrading roads and/or road stops.
rubidium
parents:
6733
diff
changeset
|
1340 |
/* Don't allow building the roadstop when vehicles are already driving on it */ |
43c0425f9290
(svn r9996) -Fix: be more strict when building/upgrading roads and/or road stops.
rubidium
parents:
6733
diff
changeset
|
1341 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
43c0425f9290
(svn r9996) -Fix: be more strict when building/upgrading roads and/or road stops.
rubidium
parents:
6733
diff
changeset
|
1342 |
|
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1343 |
/* Do not remove roadtypes! */ |
6703
fdb8d05ce28f
(svn r9935) -Fix: could not build a drive through station when there when you own the tram bits and the town owns the road.
rubidium
parents:
6691
diff
changeset
|
1344 |
rts |= cur_rts; |
6402
f15c50d74932
(svn r9532) -Fix (r8741) [FS#708]: Make errors when building drive through road stops more descriptive.
maedhros
parents:
6394
diff
changeset
|
1345 |
} |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1346 |
|
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1347 |
CommandCost cost = CheckFlatLandBelow(tile, 1, 1, flags, is_drive_through ? 5 << p1 : 1 << p1, NULL, !build_over_road); |
6719
70e750141e56
(svn r9951) -Fix: slope check was incomplete when building road over tram track (and vice-versa)
glx
parents:
6703
diff
changeset
|
1348 |
if (CmdFailed(cost)) return cost; |
0 | 1349 |
|
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1350 |
Station *st = NULL; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1351 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1352 |
if (!_patches.adjacent_stations || !HasBit(p2, 5)) { |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1353 |
st = GetStationAround(tile, 1, 1, INVALID_STATION); |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1354 |
if (st == CHECK_STATIONS_ERR) return CMD_ERROR; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1355 |
} |
0 | 1356 |
|
1357 |
/* Find a station close to us */ |
|
6052 | 1358 |
if (st == NULL) st = GetClosestStationFromTile(tile); |
0 | 1359 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1360 |
/* give us a road stop in the list, and check if something went wrong */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1361 |
if (!RoadStop::CanAllocateItem()) return_cmd_error(type ? STR_TOO_MANY_TRUCK_STOPS : STR_TOO_MANY_BUS_STOPS); |
5833
a0abc408c0bb
(svn r8399) -Fix (r8185): a new road stop was always created in CmdBuildRoadStop(), but it was not deleted if DC_EXEC flag was not set or if the station creation failed
glx
parents:
5721
diff
changeset
|
1362 |
|
2989 | 1363 |
if (st != NULL && |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
1364 |
GetNumRoadStopsInStation(st, ROADSTOP_BUS) + GetNumRoadStopsInStation(st, ROADSTOP_TRUCK) >= RoadStop::LIMIT) { |
8424
c3477565c975
(svn r11994) -Codechange: Remove numbers from string names where the strings aren't present in TTD, since they don't correspond to either TTD's TextIDs or OpenTTD's StringIDs.
maedhros
parents:
8413
diff
changeset
|
1365 |
return_cmd_error(type ? STR_TOO_MANY_TRUCK_STOPS : STR_TOO_MANY_BUS_STOPS); |
2951 | 1366 |
} |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1367 |
|
0 | 1368 |
if (st != NULL) { |
6064 | 1369 |
if (st->owner != _current_player) { |
0 | 1370 |
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION); |
2951 | 1371 |
} |
1372 |
||
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1373 |
if (!st->rect.BeforeAddTile(tile, StationRect::ADD_TEST)) return CMD_ERROR; |
0 | 1374 |
} else { |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1375 |
/* allocate and initialize new station */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1376 |
if (!Station::CanAllocateItem()) return_cmd_error(STR_3008_TOO_MANY_STATIONS_LOADING); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1377 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1378 |
if (flags & DC_EXEC) { |
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
1379 |
st = new Station(tile); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1380 |
|
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
1381 |
st->town = ClosestTownFromTile(tile, UINT_MAX); |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
1382 |
st->string_id = GenerateStationName(st, tile, STATIONNAMING_ROAD); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1383 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1384 |
if (IsValidPlayer(_current_player)) { |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1385 |
SetBit(st->town->have_ratings, _current_player); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1386 |
} |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1387 |
st->sign.width_1 = 0; |
2951 | 1388 |
} |
0 | 1389 |
} |
1390 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
1391 |
cost.AddCost((type) ? _price.build_truck_station : _price.build_bus_station); |
0 | 1392 |
|
1393 |
if (flags & DC_EXEC) { |
|
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1394 |
RoadStop *road_stop = new RoadStop(tile); |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1395 |
/* Insert into linked list of RoadStops */ |
5906 | 1396 |
RoadStop **currstop = FindRoadStopSpot(type, st); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1397 |
*currstop = road_stop; |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1398 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1399 |
/*initialize an empty station */ |
5721
fa4e587f59f5
(svn r8231) -Fix (r8125): MP desync caused by calling Random() from station constructor. This was wrong because station constructor is called also when loading savegame and when player tries to build station when it is not sure that it will succeed (thanks Rubidium)
KUDr
parents:
5718
diff
changeset
|
1400 |
st->AddFacility((type) ? FACIL_TRUCK_STOP : FACIL_BUS_STOP, tile); |
0 | 1401 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1402 |
st->rect.BeforeAddTile(tile, StationRect::ADD_TRY); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1403 |
|
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
1404 |
RoadStopType rs_type = type ? ROADSTOP_TRUCK : ROADSTOP_BUS; |
6098 | 1405 |
if (is_drive_through) { |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1406 |
MakeDriveThroughRoadStop(tile, st->owner, st->index, rs_type, rts, (Axis)p1, town_owned_road); |
6098 | 1407 |
} else { |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1408 |
MakeRoadStop(tile, st->owner, st->index, rs_type, rts, (DiagDirection)p1); |
6098 | 1409 |
} |
0 | 1410 |
|
1411 |
UpdateStationVirtCoordDirty(st); |
|
1412 |
UpdateStationAcceptance(st, false); |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
1413 |
RebuildStationLists(); |
0 | 1414 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1415 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_ROADVEHS); |
0 | 1416 |
} |
1417 |
return cost; |
|
1418 |
} |
|
1419 |
||
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1420 |
|
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1421 |
static void *ClearRoadStopStatusEnum(Vehicle *v, void *) |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1422 |
{ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1423 |
if (v->type == VEH_ROAD) ClrBit(v->u.road.state, RVS_IN_DT_ROAD_STOP); |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1424 |
|
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1425 |
return NULL; |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1426 |
} |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1427 |
|
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1428 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1429 |
/** Remove a bus station |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1430 |
* @param st Station to remove |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1431 |
* @param flags operation to perform |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1432 |
* @param tile TileIndex been queried |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1433 |
* @return cost or failure of operation |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1434 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1435 |
static CommandCost RemoveRoadStop(Station *st, uint32 flags, TileIndex tile) |
0 | 1436 |
{ |
2951 | 1437 |
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) { |
0 | 1438 |
return CMD_ERROR; |
2951 | 1439 |
} |
0 | 1440 |
|
6069 | 1441 |
bool is_truck = IsTruckStop(tile); |
1442 |
||
1443 |
RoadStop **primary_stop; |
|
1444 |
RoadStop *cur_stop; |
|
2639 | 1445 |
if (is_truck) { // truck stop |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1446 |
primary_stop = &st->truck_stops; |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
1447 |
cur_stop = GetRoadStopByTile(tile, ROADSTOP_TRUCK); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1448 |
} else { |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1449 |
primary_stop = &st->bus_stops; |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
1450 |
cur_stop = GetRoadStopByTile(tile, ROADSTOP_BUS); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1451 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1452 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1453 |
assert(cur_stop != NULL); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1454 |
|
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1455 |
/* don't do the check for drive-through road stops when company bankrupts */ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1456 |
if (IsDriveThroughStopTile(tile) && (flags & DC_BANKRUPT)) { |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1457 |
/* remove the 'going through road stop' status from all vehicles on that tile */ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1458 |
if (flags & DC_EXEC) VehicleFromPos(tile, NULL, &ClearRoadStopStatusEnum); |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1459 |
} else { |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1460 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1461 |
} |
0 | 1462 |
|
1463 |
if (flags & DC_EXEC) { |
|
5867 | 1464 |
if (*primary_stop == cur_stop) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1465 |
/* removed the first stop in the list */ |
5867 | 1466 |
*primary_stop = cur_stop->next; |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1467 |
/* removed the only stop? */ |
5867 | 1468 |
if (*primary_stop == NULL) { |
1469 |
st->facilities &= (is_truck ? ~FACIL_TRUCK_STOP : ~FACIL_BUS_STOP); |
|
1470 |
} |
|
1471 |
} else { |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1472 |
/* tell the predecessor in the list to skip this stop */ |
5867 | 1473 |
RoadStop *pred = *primary_stop; |
1474 |
while (pred->next != cur_stop) pred = pred->next; |
|
1475 |
pred->next = cur_stop->next; |
|
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
1476 |
} |
0 | 1477 |
|
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1478 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_ROADVEHS); |
5708
4c4c5ec2bed6
(svn r8185) -Codechange: Equipped Roadstops with new/delete operators and gave them proper constructors/destructors (Thanks to KUDr for a nice interactive C++ lesson)
celestar
parents:
5697
diff
changeset
|
1479 |
delete cur_stop; |
4398
9232bcc7422a
(svn r6151) -Codechange: DeleteStation/DeleteRoadStop removes a station/RoadStop from the pool
truelight
parents:
4397
diff
changeset
|
1480 |
DoClearSquare(tile); |
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1481 |
st->rect.AfterRemoveTile(st, tile); |
4398
9232bcc7422a
(svn r6151) -Codechange: DeleteStation/DeleteRoadStop removes a station/RoadStop from the pool
truelight
parents:
4397
diff
changeset
|
1482 |
|
0 | 1483 |
UpdateStationVirtCoordDirty(st); |
1484 |
DeleteStationIfEmpty(st); |
|
1485 |
} |
|
1486 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1487 |
return CommandCost(EXPENSES_CONSTRUCTION, (is_truck) ? _price.remove_truck_station : _price.remove_bus_station); |
0 | 1488 |
} |
1489 |
||
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1490 |
/** Remove a bus or truck stop |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1491 |
* @param tile tile to remove the stop from |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1492 |
* @param flags operation to perform |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1493 |
* @param p1 not used |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1494 |
* @param p2 bit 0: 0 for Bus stops, 1 for truck stops |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1495 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1496 |
CommandCost CmdRemoveRoadStop(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1497 |
{ |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1498 |
/* Make sure the specified tile is a road stop of the correct type */ |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1499 |
if (!IsTileType(tile, MP_STATION) || !IsRoadStop(tile) || (uint32)GetRoadStopType(tile) != p2) return CMD_ERROR; |
6069 | 1500 |
Station *st = GetStationByTile(tile); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1501 |
/* Save the stop info before it is removed */ |
6069 | 1502 |
bool is_drive_through = IsDriveThroughStopTile(tile); |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
1503 |
RoadTypes rts = GetRoadTypes(tile); |
6664
aed6a5b1c992
(svn r9895) -Fix: assertion when removing roadstop.
rubidium
parents:
6662
diff
changeset
|
1504 |
RoadBits road_bits = IsDriveThroughStopTile(tile) ? |
aed6a5b1c992
(svn r9895) -Fix: assertion when removing roadstop.
rubidium
parents:
6662
diff
changeset
|
1505 |
((GetRoadStopDir(tile) == DIAGDIR_NE) ? ROAD_X : ROAD_Y) : |
aed6a5b1c992
(svn r9895) -Fix: assertion when removing roadstop.
rubidium
parents:
6662
diff
changeset
|
1506 |
DiagDirToRoadBits(GetRoadStopDir(tile)); |
6069 | 1507 |
bool is_towns_road = is_drive_through && GetStopBuiltOnTownRoad(tile); |
1508 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1509 |
CommandCost ret = RemoveRoadStop(st, flags, tile); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1510 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1511 |
/* If the stop was a drive-through stop replace the road */ |
6946
a48b23f1cc8a
(svn r10200) -Codechange: add "shortcut" for !CmdFailed (CmdSucceeded).
rubidium
parents:
6943
diff
changeset
|
1512 |
if ((flags & DC_EXEC) && CmdSucceeded(ret) && is_drive_through) { |
6733
733f7bbba1fb
(svn r9965) -Fix: the ownership of drive through road stops on town owned roads wasn't properly reset when the road stop was removed.
rubidium
parents:
6720
diff
changeset
|
1513 |
/* Rebuild the drive throuhg road stop. As a road stop can only be |
733f7bbba1fb
(svn r9965) -Fix: the ownership of drive through road stops on town owned roads wasn't properly reset when the road stop was removed.
rubidium
parents:
6720
diff
changeset
|
1514 |
* removed by the owner of the roadstop, _current_player is the |
733f7bbba1fb
(svn r9965) -Fix: the ownership of drive through road stops on town owned roads wasn't properly reset when the road stop was removed.
rubidium
parents:
6720
diff
changeset
|
1515 |
* owner of the road stop. */ |
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
1516 |
MakeRoadNormal(tile, road_bits, rts, is_towns_road ? ClosestTownFromTile(tile, UINT_MAX)->index : 0, |
6733
733f7bbba1fb
(svn r9965) -Fix: the ownership of drive through road stops on town owned roads wasn't properly reset when the road stop was removed.
rubidium
parents:
6720
diff
changeset
|
1517 |
is_towns_road ? OWNER_TOWN : _current_player, _current_player, _current_player); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1518 |
} |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1519 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1520 |
return ret; |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
1521 |
} |
0 | 1522 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1523 |
/* FIXME -- need to move to its corresponding Airport variable*/ |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1524 |
|
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1525 |
/* Country Airfield (small) */ |
3429
20b7bab277c1
(svn r4257) -Codechange: Renamed the airport_map5_tiles_* variables into airport_sections_*
celestar
parents:
3422
diff
changeset
|
1526 |
static const byte _airport_sections_country[] = { |
0 | 1527 |
54, 53, 52, 65, |
1528 |
58, 57, 56, 55, |
|
1529 |
64, 63, 63, 62 |
|
1530 |
}; |
|
1531 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1532 |
/* City Airport (large) */ |
3429
20b7bab277c1
(svn r4257) -Codechange: Renamed the airport_map5_tiles_* variables into airport_sections_*
celestar
parents:
3422
diff
changeset
|
1533 |
static const byte _airport_sections_town[] = { |
2549 | 1534 |
31, 9, 33, 9, 9, 32, |
1535 |
27, 36, 29, 34, 8, 10, |
|
0 | 1536 |
30, 11, 35, 13, 20, 21, |
1537 |
51, 12, 14, 17, 19, 28, |
|
1538 |
38, 13, 15, 16, 18, 39, |
|
1539 |
26, 22, 23, 24, 25, 26 |
|
1540 |
}; |
|
1541 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1542 |
/* Metropolitain Airport (large) - 2 runways */ |
3429
20b7bab277c1
(svn r4257) -Codechange: Renamed the airport_map5_tiles_* variables into airport_sections_*
celestar
parents:
3422
diff
changeset
|
1543 |
static const byte _airport_sections_metropolitan[] = { |
2549 | 1544 |
31, 9, 33, 9, 9, 32, |
1545 |
27, 36, 29, 34, 8, 10, |
|
1546 |
30, 11, 35, 13, 20, 21, |
|
1547 |
102, 8, 8, 8, 8, 28, |
|
1548 |
83, 84, 84, 84, 84, 83, |
|
1549 |
26, 23, 23, 23, 23, 26 |
|
0 | 1550 |
}; |
1551 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1552 |
/* International Airport (large) - 2 runways */ |
3429
20b7bab277c1
(svn r4257) -Codechange: Renamed the airport_map5_tiles_* variables into airport_sections_*
celestar
parents:
3422
diff
changeset
|
1553 |
static const byte _airport_sections_international[] = { |
3554
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
1554 |
88, 89, 89, 89, 89, 89, 88, |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
1555 |
51, 8, 8, 8, 8, 8, 32, |
2549 | 1556 |
30, 8, 11, 27, 11, 8, 10, |
0 | 1557 |
32, 8, 11, 27, 11, 8, 114, |
1558 |
87, 8, 11, 85, 11, 8, 114, |
|
2549 | 1559 |
87, 8, 8, 8, 8, 8, 90, |
1560 |
26, 23, 23, 23, 23, 23, 26 |
|
0 | 1561 |
}; |
1562 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1563 |
/* Intercontinental Airport (vlarge) - 4 runways */ |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1564 |
static const byte _airport_sections_intercontinental[] = { |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
1565 |
102, 120, 89, 89, 89, 89, 89, 89, 118, |
6267
9e015326c7fb
(svn r9076) -Fix [FS#529]: the intercontinental airport used 'T-junction' runway sprites when there is no exit in the middle of the runway as in the city airport (skidd13).
rubidium
parents:
6261
diff
changeset
|
1566 |
120, 23, 23, 23, 23, 23, 23, 119, 117, |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
1567 |
87, 54, 87, 8, 8, 8, 8, 51, 117, |
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
1568 |
87, 162, 87, 85, 116, 116, 8, 9, 10, |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1569 |
87, 8, 8, 11, 31, 11, 8, 160, 32, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1570 |
32, 160, 8, 11, 27, 11, 8, 8, 10, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1571 |
87, 8, 8, 11, 30, 11, 8, 8, 10, |
4066
2d099b946f10
(svn r5362) - Fix: Updated sprites in New Airports to be allow cleaner replacement by newgrf graphics. All tiles now use SPR_AIRPORT_APRON as the tarmac. Created two new sprites in airports.grf for half-grass half-tarmac tiles on Intercontinental airport.
richk
parents:
4059
diff
changeset
|
1572 |
87, 142, 8, 11, 29, 11, 10, 163, 10, |
2d099b946f10
(svn r5362) - Fix: Updated sprites in New Airports to be allow cleaner replacement by newgrf graphics. All tiles now use SPR_AIRPORT_APRON as the tarmac. Created two new sprites in airports.grf for half-grass half-tarmac tiles on Intercontinental airport.
richk
parents:
4059
diff
changeset
|
1573 |
87, 164, 87, 8, 8, 8, 10, 37, 117, |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
1574 |
87, 120, 89, 89, 89, 89, 89, 89, 119, |
6267
9e015326c7fb
(svn r9076) -Fix [FS#529]: the intercontinental airport used 'T-junction' runway sprites when there is no exit in the middle of the runway as in the city airport (skidd13).
rubidium
parents:
6261
diff
changeset
|
1575 |
121, 23, 23, 23, 23, 23, 23, 119, 37 |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1576 |
}; |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1577 |
|
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1578 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1579 |
/* Commuter Airfield (small) */ |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1580 |
static const byte _airport_sections_commuter[] = { |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1581 |
85, 30, 115, 115, 32, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1582 |
87, 8, 8, 8, 10, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1583 |
87, 11, 11, 11, 10, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1584 |
26, 23, 23, 23, 26 |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1585 |
}; |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1586 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1587 |
/* Heliport */ |
3429
20b7bab277c1
(svn r4257) -Codechange: Renamed the airport_map5_tiles_* variables into airport_sections_*
celestar
parents:
3422
diff
changeset
|
1588 |
static const byte _airport_sections_heliport[] = { |
0 | 1589 |
66, |
1590 |
}; |
|
1591 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1592 |
/* Helidepot */ |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1593 |
static const byte _airport_sections_helidepot[] = { |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1594 |
124, 32, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1595 |
122, 123 |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1596 |
}; |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1597 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
1598 |
/* Helistation */ |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1599 |
static const byte _airport_sections_helistation[] = { |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1600 |
32, 134, 159, 158, |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1601 |
161, 142, 142, 157 |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1602 |
}; |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1603 |
|
3471
e454e2c0c23e
(svn r4316) -Codechange: finished r4257 (forgot one variable there)
celestar
parents:
3435
diff
changeset
|
1604 |
static const byte * const _airport_sections[] = { |
4059
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1605 |
_airport_sections_country, // Country Airfield (small) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1606 |
_airport_sections_town, // City Airport (large) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1607 |
_airport_sections_heliport, // Heliport |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1608 |
_airport_sections_metropolitan, // Metropolitain Airport (large) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1609 |
_airport_sections_international, // International Airport (xlarge) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1610 |
_airport_sections_commuter, // Commuter Airport (small) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1611 |
_airport_sections_helidepot, // Helidepot |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1612 |
_airport_sections_intercontinental, // Intercontinental Airport (xxlarge) |
b1e1c1193f0a
(svn r5346) - Feature: Add 4 new airports. 2 for aircraft, 2 for helicopters.
richk
parents:
4000
diff
changeset
|
1613 |
_airport_sections_helistation // Helistation |
0 | 1614 |
}; |
1615 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1616 |
/** Place an Airport. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
1617 |
* @param tile tile where airport will be built |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1618 |
* @param flags operation to perform |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1619 |
* @param p1 airport type, @see airport.h |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1620 |
* @param p2 (bit 0) - allow airports directly adjacent to other airports. |
0 | 1621 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1622 |
CommandCost CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1623 |
{ |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1624 |
bool airport_upgrade = true; |
0 | 1625 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1626 |
/* Check if a valid, buildable airport was chosen for construction */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1627 |
if (p1 > lengthof(_airport_sections) || !HasBit(GetValidAirports(), p1)) return CMD_ERROR; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1628 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1629 |
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) { |
0 | 1630 |
return CMD_ERROR; |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1631 |
} |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1632 |
|
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1633 |
Town *t = ClosestTownFromTile(tile, UINT_MAX); |
6069 | 1634 |
const AirportFTAClass *afc = GetAirport(p1); |
1635 |
int w = afc->size_x; |
|
1636 |
int h = afc->size_y; |
|
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1637 |
Station *st = NULL; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1638 |
|
5513
1ccea4948917
(svn r7810) -Fix: FS#504 Building airport whose size exceeds max station spread-out caused assert. (Zuu)
KUDr
parents:
5475
diff
changeset
|
1639 |
if (w > _patches.station_spread || h > _patches.station_spread) { |
1ccea4948917
(svn r7810) -Fix: FS#504 Building airport whose size exceeds max station spread-out caused assert. (Zuu)
KUDr
parents:
5475
diff
changeset
|
1640 |
_error_message = STR_306C_STATION_TOO_SPREAD_OUT; |
1ccea4948917
(svn r7810) -Fix: FS#504 Building airport whose size exceeds max station spread-out caused assert. (Zuu)
KUDr
parents:
5475
diff
changeset
|
1641 |
return CMD_ERROR; |
1ccea4948917
(svn r7810) -Fix: FS#504 Building airport whose size exceeds max station spread-out caused assert. (Zuu)
KUDr
parents:
5475
diff
changeset
|
1642 |
} |
1ccea4948917
(svn r7810) -Fix: FS#504 Building airport whose size exceeds max station spread-out caused assert. (Zuu)
KUDr
parents:
5475
diff
changeset
|
1643 |
|
9075
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1644 |
CommandCost cost = CheckFlatLandBelow(tile, w, h, flags, 0, NULL); |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1645 |
if (CmdFailed(cost)) return cost; |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1646 |
|
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1647 |
/* Check if local auth refuses a new airport */ |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1648 |
uint num = 0; |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1649 |
FOR_ALL_STATIONS(st) { |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1650 |
if (st->town == t && st->facilities & FACIL_AIRPORT && st->airport_type != AT_OILRIG) num++; |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1651 |
} |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1652 |
if (num >= 2) { |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1653 |
SetDParam(0, t->index); |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1654 |
return_cmd_error(STR_2035_LOCAL_AUTHORITY_REFUSES); |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1655 |
} |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1656 |
|
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1657 |
if (!_patches.adjacent_stations || !HasBit(p2, 0)) { |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1658 |
st = GetStationAround(tile, w, h, INVALID_STATION); |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1659 |
if (st == CHECK_STATIONS_ERR) return CMD_ERROR; |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1660 |
} else { |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1661 |
st = NULL; |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1662 |
} |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1663 |
|
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1664 |
/* Find a station close to us */ |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1665 |
if (st == NULL) st = GetClosestStationFromTile(tile); |
05ee343edc0d
(svn r12934) -Codechange: Before verification of local authority, just make sure airport can physically be built there. Just moving tests
belugas
parents:
9063
diff
changeset
|
1666 |
|
0 | 1667 |
if (st != NULL) { |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1668 |
if (st->owner != _current_player) { |
0 | 1669 |
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1670 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1671 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1672 |
if (!st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TEST)) return CMD_ERROR; |
0 | 1673 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1674 |
if (st->airport_tile != 0) { |
0 | 1675 |
return_cmd_error(STR_300D_TOO_CLOSE_TO_ANOTHER_AIRPORT); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1676 |
} |
0 | 1677 |
} else { |
1678 |
airport_upgrade = false; |
|
1679 |
||
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1680 |
/* allocate and initialize new station */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1681 |
if (!Station::CanAllocateItem()) return_cmd_error(STR_3008_TOO_MANY_STATIONS_LOADING); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1682 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1683 |
if (flags & DC_EXEC) { |
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
1684 |
st = new Station(tile); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1685 |
|
9048
d2d1c0b4181c
(svn r12874) -Codechange: The closest town is already known. Do not search for it again.
belugas
parents:
9038
diff
changeset
|
1686 |
st->town = t; |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
1687 |
st->string_id = GenerateStationName(st, tile, !(afc->flags & AirportFTAClass::AIRPLANES) ? STATIONNAMING_HELIPORT : STATIONNAMING_AIRPORT); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1688 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1689 |
if (IsValidPlayer(_current_player)) { |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1690 |
SetBit(st->town->have_ratings, _current_player); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1691 |
} |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1692 |
st->sign.width_1 = 0; |
6049 | 1693 |
} |
0 | 1694 |
} |
1695 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
1696 |
cost.AddCost(_price.build_airport * w * h); |
0 | 1697 |
|
1698 |
if (flags & DC_EXEC) { |
|
1699 |
st->airport_tile = tile; |
|
5721
fa4e587f59f5
(svn r8231) -Fix (r8125): MP desync caused by calling Random() from station constructor. This was wrong because station constructor is called also when loading savegame and when player tries to build station when it is not sure that it will succeed (thanks Rubidium)
KUDr
parents:
5718
diff
changeset
|
1700 |
st->AddFacility(FACIL_AIRPORT, tile); |
0 | 1701 |
st->airport_type = (byte)p1; |
1702 |
st->airport_flags = 0; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1703 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1704 |
st->rect.BeforeAddRect(tile, w, h, StationRect::ADD_TRY); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1705 |
|
2639 | 1706 |
/* if airport was demolished while planes were en-route to it, the |
1707 |
* positions can no longer be the same (v->u.air.pos), since different |
|
1708 |
* airports have different indexes. So update all planes en-route to this |
|
1709 |
* airport. Only update if |
|
1710 |
* 1. airport is upgraded |
|
1711 |
* 2. airport is added to existing station (unfortunately unavoideable) |
|
1712 |
*/ |
|
2549 | 1713 |
if (airport_upgrade) UpdateAirplanesOnNewStation(st); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1714 |
|
0 | 1715 |
{ |
3471
e454e2c0c23e
(svn r4316) -Codechange: finished r4257 (forgot one variable there)
celestar
parents:
3435
diff
changeset
|
1716 |
const byte *b = _airport_sections[p1]; |
2549 | 1717 |
|
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1718 |
BEGIN_TILE_LOOP(tile_cur, w, h, tile) { |
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
1719 |
MakeAirport(tile_cur, st->owner, st->index, *b - ((*b < 67) ? 8 : 24)); |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
1720 |
b++; |
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1721 |
} END_TILE_LOOP(tile_cur, w, h, tile) |
0 | 1722 |
} |
1723 |
||
1724 |
UpdateStationVirtCoordDirty(st); |
|
1725 |
UpdateStationAcceptance(st, false); |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
1726 |
RebuildStationLists(); |
0 | 1727 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1728 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_PLANES); |
0 | 1729 |
} |
1730 |
||
1731 |
return cost; |
|
1732 |
} |
|
1733 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1734 |
static CommandCost RemoveAirport(Station *st, uint32 flags) |
0 | 1735 |
{ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1736 |
if (_current_player != OWNER_WATER && !CheckOwnership(st->owner)) { |
0 | 1737 |
return CMD_ERROR; |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1738 |
} |
0 | 1739 |
|
6069 | 1740 |
TileIndex tile = st->airport_tile; |
0 | 1741 |
|
6032 | 1742 |
const AirportFTAClass *afc = st->Airport(); |
6069 | 1743 |
int w = afc->size_x; |
1744 |
int h = afc->size_y; |
|
1745 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1746 |
CommandCost cost(EXPENSES_CONSTRUCTION, w * h * _price.remove_airport); |
0 | 1747 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1748 |
const Vehicle *v; |
6394
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1749 |
FOR_ALL_VEHICLES(v) { |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1750 |
if (!(v->type == VEH_AIRCRAFT && IsNormalAircraft(v))) continue; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1751 |
|
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1752 |
if (v->u.air.targetairport == st->index && v->u.air.state != FLYING) return CMD_ERROR; |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1753 |
} |
dabe045f6f14
(svn r9524) -Fix(FS#640,r8755): Implemented a "dummy" State Machine for stations who got their airport removed while there were still aircraft within the State Machine (and thus caused asserts)
celestar
parents:
6368
diff
changeset
|
1754 |
|
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1755 |
BEGIN_TILE_LOOP(tile_cur, w, h, tile) { |
7652
a2048af4a7f9
(svn r11183) -Fix [FS#1249]: airports do not need to care about overflying aircraf when removing them, because if they were not in the "flying" state it can't be removed anyway.
rubidium
parents:
7645
diff
changeset
|
1756 |
if (!EnsureNoVehicleOnGround(tile_cur)) return CMD_ERROR; |
0 | 1757 |
|
1758 |
if (flags & DC_EXEC) { |
|
1759 |
DeleteAnimatedTile(tile_cur); |
|
1760 |
DoClearSquare(tile_cur); |
|
1761 |
} |
|
6491
00dc414c909d
(svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents:
6488
diff
changeset
|
1762 |
} END_TILE_LOOP(tile_cur, w, h, tile) |
0 | 1763 |
|
1764 |
if (flags & DC_EXEC) { |
|
6069 | 1765 |
for (uint i = 0; i < afc->nof_depots; ++i) { |
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1766 |
DeleteWindowById( |
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1767 |
WC_VEHICLE_DEPOT, tile + ToTileIndexDiff(afc->airport_depots[i]) |
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1768 |
); |
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
1769 |
} |
755
80091de50044
(svn r1211) -Feature: Introduce sticky windows to all vehicle windows...Just make sure you do not sticky more than 23 at a time. Also a lot of places in the code invalidated the 'status bar' of the vehicle, referring to it as widget 4. This is now widget 5 and has been #definitized
darkvater
parents:
709
diff
changeset
|
1770 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1771 |
st->rect.AfterRemoveRect(st, tile, w, h); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1772 |
|
0 | 1773 |
st->airport_tile = 0; |
1774 |
st->facilities &= ~FACIL_AIRPORT; |
|
1775 |
||
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1776 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_PLANES); |
0 | 1777 |
UpdateStationVirtCoordDirty(st); |
1778 |
DeleteStationIfEmpty(st); |
|
1779 |
} |
|
1780 |
||
1781 |
return cost; |
|
1782 |
} |
|
1783 |
||
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1784 |
/** Build a buoy. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
1785 |
* @param tile tile where to place the bouy |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1786 |
* @param flags operation to perform |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1787 |
* @param p1 unused |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1788 |
* @param p2 unused |
0 | 1789 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1790 |
CommandCost CmdBuildBuoy(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1791 |
{ |
7739
0b6f3da5c083
(svn r11276) -Codechange: be more consistent with naming of some accessors.
rubidium
parents:
7730
diff
changeset
|
1792 |
if (!IsWaterTile(tile) || tile == 0) return_cmd_error(STR_304B_SITE_UNSUITABLE); |
6306
2ca4e362eb9b
(svn r9178) -Fix (r7573) [FS#679]: Don't allow building docks or buoys under bridges.
maedhros
parents:
6304
diff
changeset
|
1793 |
if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
0 | 1794 |
|
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1795 |
if (GetTileSlope(tile, NULL) != SLOPE_FLAT) return_cmd_error(STR_304B_SITE_UNSUITABLE); |
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1796 |
|
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1797 |
/* allocate and initialize new station */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1798 |
if (!Station::CanAllocateItem()) return_cmd_error(STR_3008_TOO_MANY_STATIONS_LOADING); |
0 | 1799 |
|
1800 |
if (flags & DC_EXEC) { |
|
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
1801 |
Station *st = new Station(tile); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1802 |
|
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
1803 |
st->town = ClosestTownFromTile(tile, UINT_MAX); |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
1804 |
st->string_id = GenerateStationName(st, tile, STATIONNAMING_BUOY); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1805 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1806 |
if (IsValidPlayer(_current_player)) { |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1807 |
SetBit(st->town->have_ratings, _current_player); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1808 |
} |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1809 |
st->sign.width_1 = 0; |
3055
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3047
diff
changeset
|
1810 |
st->dock_tile = tile; |
0 | 1811 |
st->facilities |= FACIL_DOCK; |
1751
009a240d035a
(svn r2255) - Fix: [ 9680363 ] [NPF] Broken buoy handling for ships
matthijs
parents:
1706
diff
changeset
|
1812 |
/* Buoys are marked in the Station struct by this flag. Yes, it is this |
009a240d035a
(svn r2255) - Fix: [ 9680363 ] [NPF] Broken buoy handling for ships
matthijs
parents:
1706
diff
changeset
|
1813 |
* braindead.. */ |
0 | 1814 |
st->had_vehicle_of_type |= HVOT_BUOY; |
1815 |
st->owner = OWNER_NONE; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1816 |
|
71
1b8e15a10515
(svn r72) -Add: build_date of station (viewable with Query tool)
truelight
parents:
65
diff
changeset
|
1817 |
st->build_date = _date; |
0 | 1818 |
|
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1819 |
MakeBuoy(tile, st->index, GetWaterClass(tile)); |
0 | 1820 |
|
1821 |
UpdateStationVirtCoordDirty(st); |
|
1822 |
UpdateStationAcceptance(st, false); |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
1823 |
RebuildStationLists(); |
0 | 1824 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1825 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_SHIPS); |
0 | 1826 |
} |
1827 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1828 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.build_dock); |
0 | 1829 |
} |
1830 |
||
8109
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1831 |
/** |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1832 |
* Tests whether the player's vehicles have this station in orders |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1833 |
* When player == INVALID_PLAYER, then check all vehicles |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1834 |
* @param station station ID |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1835 |
* @param player player ID, INVALID_PLAYER to disable the check |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1836 |
*/ |
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1837 |
bool HasStationInUse(StationID station, PlayerID player) |
1078
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1838 |
{ |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1839 |
const Vehicle *v; |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1840 |
FOR_ALL_VEHICLES(v) { |
8109
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1841 |
if (player == INVALID_PLAYER || v->owner == player) { |
1078
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1842 |
const Order *order; |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1843 |
FOR_VEHICLE_ORDERS(v, order) { |
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
1844 |
if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == station) { |
1078
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1845 |
return true; |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1846 |
} |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1847 |
} |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1848 |
} |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1849 |
} |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1850 |
return false; |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1851 |
} |
1b9163f2e7eb
(svn r1579) Fix: [ 1105963 ] Buoys can now only be removed if no ship has it in their schedule.
dominik
parents:
1067
diff
changeset
|
1852 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1853 |
static CommandCost RemoveBuoy(Station *st, uint32 flags) |
0 | 1854 |
{ |
4850
93095755db8c
(svn r6776) -Codechange: Use IsValidPlayer() function to determine of a PlayerID is an
Darkvater
parents:
4848
diff
changeset
|
1855 |
/* XXX: strange stuff */ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1856 |
if (!IsValidPlayer(_current_player)) return_cmd_error(INVALID_STRING_ID); |
0 | 1857 |
|
6069 | 1858 |
TileIndex tile = st->dock_tile; |
0 | 1859 |
|
8109
a501ce9046c4
(svn r11670) -Feature [FS#1565]: list neutral stations where the player has service in the station list too
smatz
parents:
8108
diff
changeset
|
1860 |
if (HasStationInUse(st->index, INVALID_PLAYER)) return_cmd_error(STR_BUOY_IS_IN_USE); |
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1861 |
/* remove the buoy if there is a ship on tile when company goes bankrupt... */ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
1862 |
if (!(flags & DC_BANKRUPT) && !EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
0 | 1863 |
|
1864 |
if (flags & DC_EXEC) { |
|
1865 |
st->dock_tile = 0; |
|
1751
009a240d035a
(svn r2255) - Fix: [ 9680363 ] [NPF] Broken buoy handling for ships
matthijs
parents:
1706
diff
changeset
|
1866 |
/* Buoys are marked in the Station struct by this flag. Yes, it is this |
009a240d035a
(svn r2255) - Fix: [ 9680363 ] [NPF] Broken buoy handling for ships
matthijs
parents:
1706
diff
changeset
|
1867 |
* braindead.. */ |
0 | 1868 |
st->facilities &= ~FACIL_DOCK; |
1869 |
st->had_vehicle_of_type &= ~HVOT_BUOY; |
|
1870 |
||
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1871 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_SHIPS); |
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1872 |
|
5953
b40dc8f4dc69
(svn r8619) -Fix: store the ownership of a water tile in the buoy tile and set the ownership of the water tile when the buoy is removed. This solves the issue of removing ownership from canal tiles thus making is possible for other players to remove the canal tile.
rubidium
parents:
5914
diff
changeset
|
1873 |
/* We have to set the water tile's state to the same state as before the |
b40dc8f4dc69
(svn r8619) -Fix: store the ownership of a water tile in the buoy tile and set the ownership of the water tile when the buoy is removed. This solves the issue of removing ownership from canal tiles thus making is possible for other players to remove the canal tile.
rubidium
parents:
5914
diff
changeset
|
1874 |
* buoy was placed. Otherwise one could plant a buoy on a canal edge, |
b40dc8f4dc69
(svn r8619) -Fix: store the ownership of a water tile in the buoy tile and set the ownership of the water tile when the buoy is removed. This solves the issue of removing ownership from canal tiles thus making is possible for other players to remove the canal tile.
rubidium
parents:
5914
diff
changeset
|
1875 |
* remove it and flood the land (if the canal edge is at level 0) */ |
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1876 |
MakeWaterKeepingClass(tile, GetTileOwner(tile)); |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3102
diff
changeset
|
1877 |
MarkTileDirtyByTile(tile); |
0 | 1878 |
|
1879 |
UpdateStationVirtCoordDirty(st); |
|
1880 |
DeleteStationIfEmpty(st); |
|
1881 |
} |
|
1882 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1883 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_truck_station); |
0 | 1884 |
} |
1885 |
||
909
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
1886 |
static const TileIndexDiffC _dock_tileoffs_chkaround[] = { |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
1887 |
{-1, 0}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
1888 |
{ 0, 0}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
1889 |
{ 0, 0}, |
65cdb609b7a6
(svn r1396) Introduce TileIndexDiffC - the compile time version of TileIndexDiff
tron
parents:
900
diff
changeset
|
1890 |
{ 0, -1} |
0 | 1891 |
}; |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
1892 |
static const byte _dock_w_chk[4] = { 2, 1, 2, 1 }; |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
1893 |
static const byte _dock_h_chk[4] = { 1, 2, 1, 2 }; |
0 | 1894 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1895 |
/** Build a dock/haven. |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
1896 |
* @param tile tile where dock will be built |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
1897 |
* @param flags operation to perform |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1898 |
* @param p1 (bit 0) - allow docks directly adjacent to other docks. |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1899 |
* @param p2 unused |
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1900 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1901 |
CommandCost CmdBuildDock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 1902 |
{ |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
1903 |
DiagDirection direction = GetInclinedSlopeDirection(GetTileSlope(tile, NULL)); |
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
1904 |
if (direction == INVALID_DIAGDIR) return_cmd_error(STR_304B_SITE_UNSUITABLE); |
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
1905 |
direction = ReverseDiagDir(direction); |
3055
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3047
diff
changeset
|
1906 |
|
8386
bed99ec71cb0
(svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids.
peter1138
parents:
8377
diff
changeset
|
1907 |
/* Docks cannot be placed on rapids */ |
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1908 |
if (IsWaterTile(tile)) return_cmd_error(STR_304B_SITE_UNSUITABLE); |
8386
bed99ec71cb0
(svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids.
peter1138
parents:
8377
diff
changeset
|
1909 |
|
4619
aa9747946f8e
(svn r6477) - Fix a loop-hole that allowed docks to be built regardless of town authority rating.
peter1138
parents:
4559
diff
changeset
|
1910 |
if (!(flags & DC_NO_TOWN_RATING) && !CheckIfAuthorityAllows(tile)) return CMD_ERROR; |
aa9747946f8e
(svn r6477) - Fix a loop-hole that allowed docks to be built regardless of town authority rating.
peter1138
parents:
4559
diff
changeset
|
1911 |
|
6306
2ca4e362eb9b
(svn r9178) -Fix (r7573) [FS#679]: Don't allow building docks or buoys under bridges.
maedhros
parents:
6304
diff
changeset
|
1912 |
if (MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
2ca4e362eb9b
(svn r9178) -Fix (r7573) [FS#679]: Don't allow building docks or buoys under bridges.
maedhros
parents:
6304
diff
changeset
|
1913 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1914 |
if (CmdFailed(DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR))) return CMD_ERROR; |
0 | 1915 |
|
6069 | 1916 |
TileIndex tile_cur = tile + TileOffsByDiagDir(direction); |
0 | 1917 |
|
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
1918 |
if (!IsTileType(tile_cur, MP_WATER) || GetTileSlope(tile_cur, NULL) != SLOPE_FLAT) { |
3055
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3047
diff
changeset
|
1919 |
return_cmd_error(STR_304B_SITE_UNSUITABLE); |
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3047
diff
changeset
|
1920 |
} |
0 | 1921 |
|
6306
2ca4e362eb9b
(svn r9178) -Fix (r7573) [FS#679]: Don't allow building docks or buoys under bridges.
maedhros
parents:
6304
diff
changeset
|
1922 |
if (MayHaveBridgeAbove(tile_cur) && IsBridgeAbove(tile_cur)) return_cmd_error(STR_5007_MUST_DEMOLISH_BRIDGE_FIRST); |
2ca4e362eb9b
(svn r9178) -Fix (r7573) [FS#679]: Don't allow building docks or buoys under bridges.
maedhros
parents:
6304
diff
changeset
|
1923 |
|
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1924 |
/* Get the water class of the water tile before it is cleared.*/ |
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1925 |
WaterClass wc = GetWaterClass(tile_cur); |
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1926 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1927 |
if (CmdFailed(DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR))) return CMD_ERROR; |
0 | 1928 |
|
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4549
diff
changeset
|
1929 |
tile_cur += TileOffsByDiagDir(direction); |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
1930 |
if (!IsTileType(tile_cur, MP_WATER) || GetTileSlope(tile_cur, NULL) != SLOPE_FLAT) { |
0 | 1931 |
return_cmd_error(STR_304B_SITE_UNSUITABLE); |
3055
ed20cba49858
(svn r3644) Don't use FindLandscapeHeightByTile() when it's overkill - often it was just a complicated way of writing GetTileSlope(tile, NULL)
tron
parents:
3047
diff
changeset
|
1932 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1933 |
|
0 | 1934 |
/* middle */ |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1935 |
Station *st = NULL; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1936 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
1937 |
if (!_patches.adjacent_stations || !HasBit(p1, 0)) { |
6674
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1938 |
st = GetStationAround( |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1939 |
tile + ToTileIndexDiff(_dock_tileoffs_chkaround[direction]), |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1940 |
_dock_w_chk[direction], _dock_h_chk[direction], INVALID_STATION); |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1941 |
if (st == CHECK_STATIONS_ERR) return CMD_ERROR; |
5d77615aeaf2
(svn r9905) -Feature: Allow building new stations adjacent to existing stations by holding down control. Based on a patch by Wolf01.
maedhros
parents:
6664
diff
changeset
|
1942 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1943 |
|
0 | 1944 |
/* Find a station close to us */ |
6052 | 1945 |
if (st == NULL) st = GetClosestStationFromTile(tile); |
0 | 1946 |
|
1947 |
if (st != NULL) { |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1948 |
if (st->owner != _current_player) { |
0 | 1949 |
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION); |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1950 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1951 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1952 |
if (!st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TEST)) return CMD_ERROR; |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1953 |
|
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1782
diff
changeset
|
1954 |
if (st->dock_tile != 0) return_cmd_error(STR_304C_TOO_CLOSE_TO_ANOTHER_DOCK); |
0 | 1955 |
} else { |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1956 |
/* allocate and initialize new station */ |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1957 |
/* allocate and initialize new station */ |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1958 |
if (!Station::CanAllocateItem()) return_cmd_error(STR_3008_TOO_MANY_STATIONS_LOADING); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1959 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1960 |
if (flags & DC_EXEC) { |
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
1961 |
st = new Station(tile); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1962 |
|
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
1963 |
st->town = ClosestTownFromTile(tile, UINT_MAX); |
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
1964 |
st->string_id = GenerateStationName(st, tile, STATIONNAMING_DOCK); |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1965 |
|
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1966 |
if (IsValidPlayer(_current_player)) { |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1967 |
SetBit(st->town->have_ratings, _current_player); |
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9033
diff
changeset
|
1968 |
} |
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
1969 |
} |
0 | 1970 |
} |
1971 |
||
1972 |
if (flags & DC_EXEC) { |
|
1973 |
st->dock_tile = tile; |
|
5721
fa4e587f59f5
(svn r8231) -Fix (r8125): MP desync caused by calling Random() from station constructor. This was wrong because station constructor is called also when loading savegame and when player tries to build station when it is not sure that it will succeed (thanks Rubidium)
KUDr
parents:
5718
diff
changeset
|
1974 |
st->AddFacility(FACIL_DOCK, tile); |
0 | 1975 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
1976 |
st->rect.BeforeAddRect(tile, _dock_w_chk[direction], _dock_h_chk[direction], StationRect::ADD_TRY); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
1977 |
|
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
1978 |
MakeDock(tile, st->owner, st->index, direction, wc); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
1979 |
|
0 | 1980 |
UpdateStationVirtCoordDirty(st); |
1981 |
UpdateStationAcceptance(st, false); |
|
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
1982 |
RebuildStationLists(); |
0 | 1983 |
InvalidateWindow(WC_STATION_LIST, st->owner); |
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
1984 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_SHIPS); |
0 | 1985 |
} |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
1986 |
|
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
1987 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.build_dock); |
0 | 1988 |
} |
1989 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
1990 |
static CommandCost RemoveDock(Station *st, uint32 flags) |
0 | 1991 |
{ |
2639 | 1992 |
if (!CheckOwnership(st->owner)) return CMD_ERROR; |
0 | 1993 |
|
6069 | 1994 |
TileIndex tile1 = st->dock_tile; |
1995 |
TileIndex tile2 = tile1 + TileOffsByDiagDir(GetDockDirection(tile1)); |
|
0 | 1996 |
|
7758
17ad53748c7b
(svn r11303) -Fix: EnsureNoVehicle and EnsureNoVehicleOnGround were both used to check whether there was no vehicle on the ground, except that the former didn't take care of aircraft shadows. So now we only use EnsureNoVehicleOnGround.
rubidium
parents:
7739
diff
changeset
|
1997 |
if (!EnsureNoVehicleOnGround(tile1)) return CMD_ERROR; |
17ad53748c7b
(svn r11303) -Fix: EnsureNoVehicle and EnsureNoVehicleOnGround were both used to check whether there was no vehicle on the ground, except that the former didn't take care of aircraft shadows. So now we only use EnsureNoVehicleOnGround.
rubidium
parents:
7739
diff
changeset
|
1998 |
if (!EnsureNoVehicleOnGround(tile2)) return CMD_ERROR; |
0 | 1999 |
|
2000 |
if (flags & DC_EXEC) { |
|
2001 |
DoClearSquare(tile1); |
|
8471
ba4c15fe147b
(svn r12042) -Fix [FS#1676]: Reimplement how rivers and canals are stored in the map, allowing the sea/river/canal status to also be
peter1138
parents:
8466
diff
changeset
|
2002 |
MakeWaterKeepingClass(tile2, st->owner); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
2003 |
|
5676
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
2004 |
st->rect.AfterRemoveTile(st, tile1); |
7a641ebbc080
(svn r8136) -Codechange: Station spread rectangle manipulators turned into StationRect::methods.
KUDr
parents:
5668
diff
changeset
|
2005 |
st->rect.AfterRemoveTile(st, tile2); |
5395
7727da322d66
(svn r7585) -Codechange: CheckStationSpreadOut() took too much CPU. Station rectangle is now maintained instead of calculating it each time by walking through whole map. Should help with the performance issue related to AIs trying to build road stops too often. (idea by Celestar)
KUDr
parents:
5385
diff
changeset
|
2006 |
|
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3102
diff
changeset
|
2007 |
MarkTileDirtyByTile(tile2); |
0 | 2008 |
|
2009 |
st->dock_tile = 0; |
|
2010 |
st->facilities &= ~FACIL_DOCK; |
|
2011 |
||
8017
2ecf318068bb
(svn r11577) -Fix: invalidate 'list trains/roadvehs/ships/planes' widgets when station part is added/removed
smatz
parents:
8016
diff
changeset
|
2012 |
InvalidateWindowWidget(WC_STATION_VIEW, st->index, SVW_SHIPS); |
0 | 2013 |
UpdateStationVirtCoordDirty(st); |
2014 |
DeleteStationIfEmpty(st); |
|
2015 |
} |
|
2016 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
2017 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_dock); |
0 | 2018 |
} |
2019 |
||
2020 |
#include "table/station_land.h" |
|
2021 |
||
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2022 |
const DrawTileSprites *GetStationTileLayout(StationType st, byte gfx) |
3763
7098c393c172
(svn r4754) - Newstations: expose default station display data via a function so we can use it (rarely) in other places.
peter1138
parents:
3754
diff
changeset
|
2023 |
{ |
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2024 |
return &_station_display_datas[st][gfx]; |
3763
7098c393c172
(svn r4754) - Newstations: expose default station display data via a function so we can use it (rarely) in other places.
peter1138
parents:
3754
diff
changeset
|
2025 |
} |
0 | 2026 |
|
2027 |
static void DrawTile_Station(TileInfo *ti) |
|
2028 |
{ |
|
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2029 |
const DrawTileSprites *t = NULL; |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2030 |
RoadTypes roadtypes; |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2031 |
int32 total_offset; |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2032 |
int32 custom_ground_offset; |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2033 |
|
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2034 |
if (IsRailwayStation(ti->tile)) { |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2035 |
const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2036 |
roadtypes = ROADTYPES_NONE; |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2037 |
total_offset = rti->total_offset; |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2038 |
custom_ground_offset = rti->custom_ground_offset; |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2039 |
} else { |
8466
4e3b01d2f1c5
(svn r12036) -Fix: For station tiles, only get road types for road stops.
peter1138
parents:
8429
diff
changeset
|
2040 |
roadtypes = IsRoadStop(ti->tile) ? GetRoadTypes(ti->tile) : ROADTYPES_NONE; |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2041 |
total_offset = 0; |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2042 |
custom_ground_offset = 0; |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2043 |
} |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2044 |
uint32 relocation = 0; |
3775
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2045 |
const Station *st = NULL; |
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2046 |
const StationSpec *statspec = NULL; |
4227
3ff996bf3f28
(svn r5773) Clarify why the owner is checked before a palette is chosen when drawing a station tile: some stations are not owned by players
tron
parents:
4177
diff
changeset
|
2047 |
PlayerID owner = GetTileOwner(ti->tile); |
6069 | 2048 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5667
diff
changeset
|
2049 |
SpriteID palette; |
4850
93095755db8c
(svn r6776) -Codechange: Use IsValidPlayer() function to determine of a PlayerID is an
Darkvater
parents:
4848
diff
changeset
|
2050 |
if (IsValidPlayer(owner)) { |
4227
3ff996bf3f28
(svn r5773) Clarify why the owner is checked before a palette is chosen when drawing a station tile: some stations are not owned by players
tron
parents:
4177
diff
changeset
|
2051 |
palette = PLAYER_SPRITE_COLOR(owner); |
3ff996bf3f28
(svn r5773) Clarify why the owner is checked before a palette is chosen when drawing a station tile: some stations are not owned by players
tron
parents:
4177
diff
changeset
|
2052 |
} else { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2053 |
/* Some stations are not owner by a player, namely oil rigs */ |
4227
3ff996bf3f28
(svn r5773) Clarify why the owner is checked before a palette is chosen when drawing a station tile: some stations are not owned by players
tron
parents:
4177
diff
changeset
|
2054 |
palette = PALETTE_TO_GREY; |
0 | 2055 |
} |
2056 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2057 |
/* don't show foundation for docks */ |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3630
diff
changeset
|
2058 |
if (ti->tileh != SLOPE_FLAT && !IsDock(ti->tile)) |
7335
141c6b86ec1f
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7333
diff
changeset
|
2059 |
DrawFoundation(ti, FOUNDATION_LEVELED); |
0 | 2060 |
|
3568
c60d7aceed1a
(svn r4450) - NewStations, rename *CustomStationSprite() to *CustomStationSpecIndex() to reflect their use, and alter the test for determining if a station has customised graphics.
peter1138
parents:
3554
diff
changeset
|
2061 |
if (IsCustomStationSpecIndex(ti->tile)) { |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2062 |
/* look for customization */ |
3775
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2063 |
st = GetStationByTile(ti->tile); |
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2064 |
statspec = st->speclist[GetCustomStationSpecIndex(ti->tile)].spec; |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2065 |
|
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2066 |
if (statspec != NULL) { |
3576
18fb92480771
(svn r4462) - Newstations: ensure the chosen tile layout is available from a custom station
peter1138
parents:
3574
diff
changeset
|
2067 |
uint tile = GetStationGfx(ti->tile); |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2068 |
|
3751
ce6408fdb788
(svn r4739) - Newstations: remove cargo type parameter of GetCustomStationRelocation() as we can determine it internally
peter1138
parents:
3742
diff
changeset
|
2069 |
relocation = GetCustomStationRelocation(statspec, st, ti->tile); |
3576
18fb92480771
(svn r4462) - Newstations: ensure the chosen tile layout is available from a custom station
peter1138
parents:
3574
diff
changeset
|
2070 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2071 |
if (HasBit(statspec->callbackmask, CBM_STATION_SPRITE_LAYOUT)) { |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
2072 |
uint16 callback = GetStationCallback(CBID_STATION_SPRITE_LAYOUT, 0, 0, statspec, st, ti->tile); |
4886
19d09a4386ad
(svn r6823) - Codechange: Ignore bit 0 of a NewStation custom tile callback result. This fixes cosmetic problems with some add on stations.
peter1138
parents:
4873
diff
changeset
|
2073 |
if (callback != CALLBACK_FAILED) tile = (callback & ~1) + GetRailStationAxis(ti->tile); |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
2074 |
} |
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
2075 |
|
3576
18fb92480771
(svn r4462) - Newstations: ensure the chosen tile layout is available from a custom station
peter1138
parents:
3574
diff
changeset
|
2076 |
/* Ensure the chosen tile layout is valid for this custom station */ |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
2077 |
if (statspec->renderdata != NULL) { |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
2078 |
t = &statspec->renderdata[tile < statspec->tiles ? tile : (uint)GetRailStationAxis(ti->tile)]; |
3754
4c8cbaaa0bbe
(svn r4742) - Newstations: Add callbacks for building and drawing custom stations.
peter1138
parents:
3751
diff
changeset
|
2079 |
} |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2080 |
} |
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2081 |
} |
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2082 |
|
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2083 |
if (t == NULL || t->seq == NULL) t = &_station_display_datas[GetStationType(ti->tile)][GetStationGfx(ti->tile)]; |
384
809833b4068d
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
354
diff
changeset
|
2084 |
|
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2085 |
|
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2086 |
if (IsBuoy(ti->tile) || IsDock(ti->tile)) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2087 |
if (ti->tileh == SLOPE_FLAT) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2088 |
DrawWaterClassGround(ti); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2089 |
} else { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2090 |
assert(IsDock(ti->tile)); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2091 |
TileIndex water_tile = ti->tile + TileOffsByDiagDir(GetDockDirection(ti->tile)); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2092 |
WaterClass wc = GetWaterClass(water_tile); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2093 |
if (wc == WATER_CLASS_SEA) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2094 |
DrawShoreTile(ti->tileh); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2095 |
} else { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2096 |
DrawClearLandTile(ti, 3); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2097 |
} |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2098 |
} |
3775
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2099 |
} else { |
8571
53c94d717e99
(svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch
parents:
8570
diff
changeset
|
2100 |
SpriteID image = t->ground.sprite; |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2101 |
if (HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2102 |
image += GetCustomStationGroundRelocation(statspec, st, ti->tile); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2103 |
image += custom_ground_offset; |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2104 |
} else { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2105 |
image += total_offset; |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2106 |
} |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8471
diff
changeset
|
2107 |
DrawGroundSprite(image, HasBit(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE); |
3775
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2108 |
} |
449
2856e9ce0754
(svn r659) Support for cutomized TTDPatch-style new stations (no selector GUI yet) (pasky)
tron
parents:
445
diff
changeset
|
2109 |
|
9154
2c042b567165
(svn r13016) -Codechange: unify the detection if rail catenary should be drawn
smatz
parents:
9111
diff
changeset
|
2110 |
if (IsRailwayStation(ti->tile) && HasCatenaryDrawn(GetRailType(ti->tile)) && IsStationTileElectrifiable(ti->tile)) DrawCatenary(ti); |
3355
e414a0b104a6
(svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents:
3344
diff
changeset
|
2111 |
|
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2112 |
if (HasBit(roadtypes, ROADTYPE_TRAM)) { |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2113 |
Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y; |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2114 |
DrawGroundSprite((HasBit(roadtypes, ROADTYPE_ROAD) ? SPR_TRAMWAY_OVERLAY : SPR_TRAMWAY_TRAM) + (axis ^ 1), PAL_NONE); |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2115 |
DrawTramCatenary(ti, axis == AXIS_X ? ROAD_X : ROAD_Y); |
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2116 |
} |
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2117 |
|
8806
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8785
diff
changeset
|
2118 |
/* End now if buildings are invisible */ |
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8785
diff
changeset
|
2119 |
if (IsInvisibilitySet(TO_BUILDINGS)) return; |
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8785
diff
changeset
|
2120 |
|
6069 | 2121 |
const DrawTileSeqStruct *dtss; |
384
809833b4068d
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
354
diff
changeset
|
2122 |
foreach_draw_tile_seq(dtss, t->seq) { |
8570
f50de4804ff1
(svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID
frosch
parents:
8563
diff
changeset
|
2123 |
SpriteID image = dtss->image.sprite; |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2124 |
if (relocation == 0 || HasBit(image, SPRITE_MODIFIER_USE_OFFSET)) { |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2125 |
image += total_offset; |
3775
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2126 |
} else { |
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2127 |
image += relocation; |
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2128 |
} |
0fb5118536c3
(svn r4767) - Newstations: fix loading / use of custom ground sprites
peter1138
parents:
3771
diff
changeset
|
2129 |
|
6069 | 2130 |
SpriteID pal; |
8906
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2131 |
if (HasBit(image, PALETTE_MODIFIER_TRANSPARENT) || HasBit(image, PALETTE_MODIFIER_COLOR)) { |
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2132 |
if (dtss->image.pal > 0) { |
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2133 |
pal = dtss->image.pal; |
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2134 |
} else { |
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2135 |
pal = palette; |
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2136 |
} |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5667
diff
changeset
|
2137 |
} else { |
8906
325b028994e9
(svn r12674) -Fix [FS#1902]: Colour remaps on station sprites only worked for company colours.
peter1138
parents:
8847
diff
changeset
|
2138 |
pal = PAL_NONE; |
384
809833b4068d
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
354
diff
changeset
|
2139 |
} |
809833b4068d
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
354
diff
changeset
|
2140 |
|
0 | 2141 |
if ((byte)dtss->delta_z != 0x80) { |
4230
f4e93251e2f6
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4227
diff
changeset
|
2142 |
AddSortableSpriteToDraw( |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5667
diff
changeset
|
2143 |
image, pal, |
4230
f4e93251e2f6
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4227
diff
changeset
|
2144 |
ti->x + dtss->delta_x, ti->y + dtss->delta_y, |
f4e93251e2f6
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4227
diff
changeset
|
2145 |
dtss->size_x, dtss->size_y, |
7333
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7320
diff
changeset
|
2146 |
dtss->size_z, ti->z + dtss->delta_z, |
8158
2946a316540b
(svn r11720) -Codechange: [NewGRF] Add support for bit 30 of station tile layouts; forcing a sprite to always be opaque.
peter1138
parents:
8144
diff
changeset
|
2147 |
!HasBit(image, SPRITE_MODIFIER_OPAQUE) && IsTransparencySet(TO_BUILDINGS) |
4230
f4e93251e2f6
(svn r5787) Rename width, height and unk of struct DrawTileSeqStruct to size_{x,y,z}
tron
parents:
4227
diff
changeset
|
2148 |
); |
0 | 2149 |
} else { |
7849
0a1c0af2c96c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
7826
diff
changeset
|
2150 |
AddChildSpriteScreen(image, pal, dtss->delta_x, dtss->delta_y, IsTransparencySet(TO_BUILDINGS)); |
0 | 2151 |
} |
2152 |
} |
|
2153 |
} |
|
2154 |
||
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2155 |
void StationPickerDrawSprite(int x, int y, StationType st, RailType railtype, RoadType roadtype, int image) |
0 | 2156 |
{ |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2157 |
int32 total_offset = 0; |
6069 | 2158 |
SpriteID pal = PLAYER_SPRITE_COLOR(_local_player); |
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2159 |
const DrawTileSprites *t = &_station_display_datas[st][image]; |
6069 | 2160 |
|
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2161 |
if (railtype != INVALID_RAILTYPE) { |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2162 |
const RailtypeInfo *rti = GetRailTypeInfo(railtype); |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2163 |
total_offset = rti->total_offset; |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2164 |
} |
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2165 |
|
8571
53c94d717e99
(svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch
parents:
8570
diff
changeset
|
2166 |
SpriteID img = t->ground.sprite; |
8166
85f2a6b30fd1
(svn r11729) -Codechange: Don't rely on the first railtype's sprite offset being zero when drawing road stations.
peter1138
parents:
8158
diff
changeset
|
2167 |
DrawSprite(img + total_offset, HasBit(img, PALETTE_MODIFIER_COLOR) ? pal : PAL_NONE, x, y); |
0 | 2168 |
|
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2169 |
if (roadtype == ROADTYPE_TRAM) { |
8571
53c94d717e99
(svn r12149) -Codechange: Merge 'ground_sprite' and 'ground_pal' of DrawTileSprites into one PalSpriteID
frosch
parents:
8570
diff
changeset
|
2170 |
DrawSprite(SPR_TRAMWAY_TRAM + (t->ground.sprite == SPR_ROAD_PAVED_STRAIGHT_X ? 1 : 0), PAL_NONE, x, y); |
6691
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2171 |
} |
f9adbb0be102
(svn r9923) -Add: support for Action 0 Road vehicles, property 1C, bit 0.
rubidium
parents:
6683
diff
changeset
|
2172 |
|
6069 | 2173 |
const DrawTileSeqStruct *dtss; |
384
809833b4068d
(svn r576) -newgrf: Cleanup horrible table/(station|unmovable)_land.h DrawTileSeqStruct hacks needed for custom station supports (pasky)
darkvater
parents:
354
diff
changeset
|
2174 |
foreach_draw_tile_seq(dtss, t->seq) { |
0 | 2175 |
Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
8570
f50de4804ff1
(svn r12148) -Codechange: Merge 'image' and 'pal' of DrawTileSeqStruct into one PalSpriteID
frosch
parents:
8563
diff
changeset
|
2176 |
DrawSprite(dtss->image.sprite + total_offset, pal, x + pt.x, y + pt.y); |
0 | 2177 |
} |
2178 |
} |
|
2179 |
||
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
2180 |
static uint GetSlopeZ_Station(TileIndex tile, uint x, uint y) |
0 | 2181 |
{ |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4230
diff
changeset
|
2182 |
return GetTileMaxZ(tile); |
0 | 2183 |
} |
2184 |
||
7335
141c6b86ec1f
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7333
diff
changeset
|
2185 |
static Foundation GetFoundation_Station(TileIndex tile, Slope tileh) |
39 | 2186 |
{ |
7335
141c6b86ec1f
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7333
diff
changeset
|
2187 |
return FlatteningFoundation(tileh); |
39 | 2188 |
} |
2189 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2190 |
static void GetAcceptedCargo_Station(TileIndex tile, AcceptedCargo ac) |
0 | 2191 |
{ |
2192 |
/* not used */ |
|
2193 |
} |
|
2194 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2195 |
static void GetTileDesc_Station(TileIndex tile, TileDesc *td) |
0 | 2196 |
{ |
1901
03bf9bf99319
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
2197 |
td->owner = GetTileOwner(tile); |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
2198 |
td->build_date = GetStationByTile(tile)->build_date; |
2049
538e73c53f54
(svn r2558) Change the internal map format from 7 arrays to one array of structs, this doesn't change the saved format for now. It's a stepping stone for further changes.
tron
parents:
2008
diff
changeset
|
2199 |
|
6069 | 2200 |
StringID str; |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2201 |
switch (GetStationType(tile)) { |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2202 |
default: NOT_REACHED(); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2203 |
case STATION_RAIL: str = STR_305E_RAILROAD_STATION; break; |
3882
c2e3e12e71d6
(svn r4938) Remove STATION_HANGAR, because it isn't really a station type of its own
tron
parents:
3876
diff
changeset
|
2204 |
case STATION_AIRPORT: |
c2e3e12e71d6
(svn r4938) Remove STATION_HANGAR, because it isn't really a station type of its own
tron
parents:
3876
diff
changeset
|
2205 |
str = (IsHangar(tile) ? STR_305F_AIRCRAFT_HANGAR : STR_3060_AIRPORT); |
c2e3e12e71d6
(svn r4938) Remove STATION_HANGAR, because it isn't really a station type of its own
tron
parents:
3876
diff
changeset
|
2206 |
break; |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2207 |
case STATION_TRUCK: str = STR_3061_TRUCK_LOADING_AREA; break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2208 |
case STATION_BUS: str = STR_3062_BUS_STATION; break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2209 |
case STATION_OILRIG: str = STR_4807_OIL_RIG; break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2210 |
case STATION_DOCK: str = STR_3063_SHIP_DOCK; break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2211 |
case STATION_BUOY: str = STR_3069_BUOY; break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2212 |
} |
0 | 2213 |
td->str = str; |
2214 |
} |
|
2215 |
||
2216 |
||
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2217 |
static TrackStatus GetTileTrackStatus_Station(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2218 |
{ |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2219 |
TrackBits trackbits = TRACK_BIT_NONE; |
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2220 |
|
1032
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2221 |
switch (mode) { |
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2222 |
case TRANSPORT_RAIL: |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
2223 |
if (IsRailwayStation(tile) && !IsStationTileBlocked(tile)) { |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2224 |
trackbits = TrackToTrackBits(GetRailStationTrack(tile)); |
1032
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2225 |
} |
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2226 |
break; |
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2227 |
|
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2228 |
case TRANSPORT_WATER: |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2229 |
/* buoy is coded as a station, it is always on open water */ |
5914
a038862ff1b9
(svn r8540) -Fix[YAPF]: Assert when buoy is placed on NE or NW map edge (Dan)
KUDr
parents:
5913
diff
changeset
|
2230 |
if (IsBuoy(tile)) { |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2231 |
trackbits = TRACK_BIT_ALL; |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2232 |
/* remove tracks that connect NE map edge */ |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2233 |
if (TileX(tile) == 0) trackbits &= ~(TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT); |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2234 |
/* remove tracks that connect NW map edge */ |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2235 |
if (TileY(tile) == 0) trackbits &= ~(TRACK_BIT_Y | TRACK_BIT_LEFT | TRACK_BIT_UPPER); |
5914
a038862ff1b9
(svn r8540) -Fix[YAPF]: Assert when buoy is placed on NE or NW map edge (Dan)
KUDr
parents:
5913
diff
changeset
|
2236 |
} |
1032
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2237 |
break; |
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2238 |
|
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
2239 |
case TRANSPORT_ROAD: |
8596
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2240 |
if ((GetRoadTypes(tile) & sub_mode) != 0 && IsRoadStop(tile)) { |
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2241 |
DiagDirection dir = GetRoadStopDir(tile); |
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2242 |
Axis axis = DiagDirToAxis(dir); |
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2243 |
|
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2244 |
if (side != INVALID_DIAGDIR) { |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2245 |
if (axis != DiagDirToAxis(side) || (IsStandardRoadStopTile(tile) && dir != side)) break; |
8596
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2246 |
} |
c3404405f3f5
(svn r12177) -Codechange: use 'side' parameter in GetTileTrackStatus so there can be less checks in pathfinders for depots/stations/tunnels/bridges
smatz
parents:
8574
diff
changeset
|
2247 |
|
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2248 |
trackbits = AxisToTrackBits(axis); |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
2249 |
} |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
2250 |
break; |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
2251 |
|
1032
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2252 |
default: |
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2253 |
break; |
0 | 2254 |
} |
1032
b8094fcab4bc
(svn r1533) Turn an if cascade into a switch and move a const array to the only location where it is used
tron
parents:
1024
diff
changeset
|
2255 |
|
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
2256 |
return CombineTrackStatus(TrackBitsToTrackdirBits(trackbits), TRACKDIR_BIT_NONE); |
0 | 2257 |
} |
2258 |
||
2660 | 2259 |
|
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2260 |
static void TileLoop_Station(TileIndex tile) |
0 | 2261 |
{ |
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2262 |
/* FIXME -- GetTileTrackStatus_Station -> animated stationtiles |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2263 |
* hardcoded.....not good */ |
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2264 |
switch (GetStationType(tile)) { |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2265 |
case STATION_AIRPORT: |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2266 |
switch (GetStationGfx(tile)) { |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2267 |
case GFX_RADAR_LARGE_FIRST: |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2268 |
case GFX_WINDSACK_FIRST : // for small airport |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2269 |
case GFX_RADAR_INTERNATIONAL_FIRST: |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2270 |
case GFX_RADAR_METROPOLITAN_FIRST: |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2271 |
case GFX_RADAR_DISTRICTWE_FIRST: // radar district W-E airport |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2272 |
case GFX_WINDSACK_INTERCON_FIRST : // for intercontinental airport |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2273 |
AddAnimatedTile(tile); |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2274 |
break; |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2275 |
} |
2660 | 2276 |
break; |
2277 |
||
8497
b986e12ddabe
(svn r12072) -Fix: Make docks at sea flood neighboured tiles.
frosch
parents:
8496
diff
changeset
|
2278 |
case STATION_DOCK: |
b986e12ddabe
(svn r12072) -Fix: Make docks at sea flood neighboured tiles.
frosch
parents:
8496
diff
changeset
|
2279 |
if (GetTileSlope(tile, NULL) != SLOPE_FLAT) break; // only handle water part |
b986e12ddabe
(svn r12072) -Fix: Make docks at sea flood neighboured tiles.
frosch
parents:
8496
diff
changeset
|
2280 |
/* FALL THROUGH */ |
7272
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2281 |
case STATION_OILRIG: //(station part) |
d47fc9e22d1c
(svn r10601) -Codechange: store (and use) the type of stations instead of hardcoding station types by graphics IDs.
rubidium
parents:
7252
diff
changeset
|
2282 |
case STATION_BUOY: |
2660 | 2283 |
TileLoop_Water(tile); |
2284 |
break; |
|
2285 |
||
2286 |
default: break; |
|
2287 |
} |
|
0 | 2288 |
} |
2289 |
||
2290 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2291 |
static void AnimateTile_Station(TileIndex tile) |
0 | 2292 |
{ |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
2293 |
struct AnimData { |
4467
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2294 |
StationGfx from; // first sprite |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2295 |
StationGfx to; // last sprite |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2296 |
byte delay; |
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6247
diff
changeset
|
2297 |
}; |
4467
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2298 |
|
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2299 |
static const AnimData data[] = { |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2300 |
{ GFX_RADAR_LARGE_FIRST, GFX_RADAR_LARGE_LAST, 3 }, |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2301 |
{ GFX_WINDSACK_FIRST, GFX_WINDSACK_LAST, 1 }, |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2302 |
{ GFX_RADAR_INTERNATIONAL_FIRST, GFX_RADAR_INTERNATIONAL_LAST, 3 }, |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2303 |
{ GFX_RADAR_METROPOLITAN_FIRST, GFX_RADAR_METROPOLITAN_LAST, 3 }, |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2304 |
{ GFX_RADAR_DISTRICTWE_FIRST, GFX_RADAR_DISTRICTWE_LAST, 3 }, |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2305 |
{ GFX_WINDSACK_INTERCON_FIRST, GFX_WINDSACK_INTERCON_LAST, 1 } |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2306 |
}; |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2307 |
|
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2308 |
if (IsRailwayStation(tile)) { |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2309 |
AnimateStationTile(tile); |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2310 |
return; |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2311 |
} |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2312 |
|
3545
b08ce1bbb589
(svn r4411) CodeChange : Define and use some Gfx for both stations and industries. More are still to come
belugas
parents:
3540
diff
changeset
|
2313 |
StationGfx gfx = GetStationGfx(tile); |
6069 | 2314 |
|
2315 |
for (const AnimData *i = data; i != endof(data); i++) { |
|
4467
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2316 |
if (i->from <= gfx && gfx <= i->to) { |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2317 |
if ((_tick_counter & i->delay) == 0) { |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2318 |
SetStationGfx(tile, gfx < i->to ? gfx + 1 : i->from); |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2319 |
MarkTileDirtyByTile(tile); |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2320 |
} |
156585f085d2
(svn r6252) Replace a comglomerate of ifs for animated station tiles by a small table and a loop iterating over it
tron
parents:
4434
diff
changeset
|
2321 |
break; |
3545
b08ce1bbb589
(svn r4411) CodeChange : Define and use some Gfx for both stations and industries. More are still to come
belugas
parents:
3540
diff
changeset
|
2322 |
} |
0 | 2323 |
} |
2324 |
} |
|
2325 |
||
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
2326 |
|
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2327 |
static void ClickTile_Station(TileIndex tile) |
0 | 2328 |
{ |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2329 |
if (IsHangar(tile)) { |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6248
diff
changeset
|
2330 |
ShowDepotWindow(tile, VEH_AIRCRAFT); |
0 | 2331 |
} else { |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
2332 |
ShowStationViewWindow(GetStationIndex(tile)); |
0 | 2333 |
} |
2334 |
} |
|
2335 |
||
2336 |
static const byte _enter_station_speedtable[12] = { |
|
2337 |
215, 195, 175, 155, 135, 115, 95, 75, 55, 35, 15, 0 |
|
2338 |
}; |
|
2339 |
||
8119
52b48108425a
(svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents:
8116
diff
changeset
|
2340 |
static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, int x, int y) |
0 | 2341 |
{ |
8832
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2342 |
StationID station_id = GetStationIndex(tile); |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2343 |
|
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6248
diff
changeset
|
2344 |
if (v->type == VEH_TRAIN) { |
8919
403ddceeb879
(svn r12689) -Feature: non-stop(or rather no non-stop) and via orders for road vehicles.
rubidium
parents:
8906
diff
changeset
|
2345 |
if (!v->current_order.ShouldStopAtStation(v, station_id)) return VETSB_CONTINUE; |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2346 |
if (IsRailwayStation(tile) && IsFrontEngine(v) && |
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4549
diff
changeset
|
2347 |
!IsCompatibleTrainStationTile(tile + TileOffsByDiagDir(DirToDiagDir(v->direction)), tile)) { |
8832
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2348 |
DiagDirection dir = DirToDiagDir(v->direction); |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2349 |
|
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2350 |
x &= 0xF; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2351 |
y &= 0xF; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2352 |
|
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2353 |
if (DiagDirToAxis(dir) != AXIS_X) Swap(x, y); |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2354 |
if (y == TILE_SIZE / 2) { |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2355 |
if (dir != DIAGDIR_SE && dir != DIAGDIR_SW) x = TILE_SIZE - 1 - x; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2356 |
if (x == 12) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); /* enter station */ |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2357 |
if (x < 12) { |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2358 |
uint16 spd; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2359 |
|
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2360 |
v->vehstatus |= VS_TRAIN_SLOWING; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2361 |
spd = _enter_station_speedtable[x]; |
6d8cc04d39a4
(svn r12580) -Codechange: merge some logical related to non-stop orders.
rubidium
parents:
8806
diff
changeset
|
2362 |
if (spd < v->cur_speed) v->cur_speed = spd; |
0 | 2363 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2364 |
} |
0 | 2365 |
} |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6248
diff
changeset
|
2366 |
} else if (v->type == VEH_ROAD) { |
6076
a052ed1779e4
(svn r8809) -Fix (r8715): accidentally removed a part of an expression.
rubidium
parents:
6070
diff
changeset
|
2367 |
if (v->u.road.state < RVSB_IN_ROAD_STOP && !IsReversingRoadTrackdir((Trackdir)v->u.road.state) && v->u.road.frame == 0) { |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6823
diff
changeset
|
2368 |
if (IsRoadStop(tile) && IsRoadVehFront(v)) { |
2671
2c2edd17e9cc
(svn r3213) - Codechange: Clean up handling of road stops, avoiding unnecessary use of pointers and using the *BIT() macros.
peter1138
parents:
2660
diff
changeset
|
2369 |
/* Attempt to allocate a parking bay in a road stop */ |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
2370 |
RoadStop *rs = GetRoadStopByTile(tile, GetRoadStopType(tile)); |
2671
2c2edd17e9cc
(svn r3213) - Codechange: Clean up handling of road stops, avoiding unnecessary use of pointers and using the *BIT() macros.
peter1138
parents:
2660
diff
changeset
|
2371 |
|
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2372 |
if (IsDriveThroughStopTile(tile)) { |
8919
403ddceeb879
(svn r12689) -Feature: non-stop(or rather no non-stop) and via orders for road vehicles.
rubidium
parents:
8906
diff
changeset
|
2373 |
if (!v->current_order.ShouldStopAtStation(v, station_id)) return VETSB_CONTINUE; |
403ddceeb879
(svn r12689) -Feature: non-stop(or rather no non-stop) and via orders for road vehicles.
rubidium
parents:
8906
diff
changeset
|
2374 |
|
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2375 |
/* Vehicles entering a drive-through stop from the 'normal' side use first bay (bay 0). */ |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2376 |
byte side = ((DirToDiagDir(v->direction) == ReverseDiagDir(GetRoadStopDir(tile))) == (v->u.road.overtaking == 0)) ? 0 : 1; |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2377 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2378 |
if (!rs->IsFreeBay(side)) return VETSB_CANNOT_ENTER; |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2379 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2380 |
/* Check if the vehicle is stopping at this road stop */ |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
2381 |
if (GetRoadStopType(tile) == (IsCargoInClass(v->cargo_type, CC_PASSENGERS) ? ROADSTOP_BUS : ROADSTOP_TRUCK) && |
8840
332412c2e9c1
(svn r12588) -Codechange: do not access the destination of an order directly.
rubidium
parents:
8836
diff
changeset
|
2382 |
v->current_order.GetDestination() == GetStationIndex(tile)) { |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
2383 |
SetBit(v->u.road.state, RVS_IS_STOPPING); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2384 |
rs->AllocateDriveThroughBay(side); |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2385 |
} |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2386 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2387 |
/* Indicate if vehicle is using second bay. */ |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
2388 |
if (side == 1) SetBit(v->u.road.state, RVS_USING_SECOND_BAY); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2389 |
/* Indicate a drive-through stop */ |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
2390 |
SetBit(v->u.road.state, RVS_IN_DT_ROAD_STOP); |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2391 |
return VETSB_CONTINUE; |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2392 |
} |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2393 |
|
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2394 |
/* For normal (non drive-through) road stops */ |
7469
2c1dd5ce245d
(svn r10974) -Fix [FS#1144, FS#1155]: road vehicles that could not (properly) use a road stop still tried to go to that road stop.
rubidium
parents:
7379
diff
changeset
|
2395 |
/* Check if station is busy or if there are no free bays or whether it is a articulated vehicle. */ |
2c1dd5ce245d
(svn r10974) -Fix [FS#1144, FS#1155]: road vehicles that could not (properly) use a road stop still tried to go to that road stop.
rubidium
parents:
7379
diff
changeset
|
2396 |
if (rs->IsEntranceBusy() || !rs->HasFreeBay() || RoadVehHasArticPart(v)) return VETSB_CANNOT_ENTER; |
0 | 2397 |
|
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
2398 |
SetBit(v->u.road.state, RVS_IN_ROAD_STOP); |
2671
2c2edd17e9cc
(svn r3213) - Codechange: Clean up handling of road stops, avoiding unnecessary use of pointers and using the *BIT() macros.
peter1138
parents:
2660
diff
changeset
|
2399 |
|
5990
280fbef32d44
(svn r8694) -Codechange: make RoadStop's status accessible via accessor functions.
rubidium
parents:
5963
diff
changeset
|
2400 |
/* Allocate a bay and update the road state */ |
280fbef32d44
(svn r8694) -Codechange: make RoadStop's status accessible via accessor functions.
rubidium
parents:
5963
diff
changeset
|
2401 |
uint bay_nr = rs->AllocateBay(); |
6000
181ad2c1ab14
(svn r8715) -Codechange/cleanup: replace magic numbers related to state of road vehicles with enums. Original patch by mart3p.
rubidium
parents:
5998
diff
changeset
|
2402 |
SB(v->u.road.state, RVS_USING_SECOND_BAY, 1, bay_nr); |
5990
280fbef32d44
(svn r8694) -Codechange: make RoadStop's status accessible via accessor functions.
rubidium
parents:
5963
diff
changeset
|
2403 |
|
280fbef32d44
(svn r8694) -Codechange: make RoadStop's status accessible via accessor functions.
rubidium
parents:
5963
diff
changeset
|
2404 |
/* Mark the station entrace as busy */ |
280fbef32d44
(svn r8694) -Codechange: make RoadStop's status accessible via accessor functions.
rubidium
parents:
5963
diff
changeset
|
2405 |
rs->SetEntranceBusy(true); |
0 | 2406 |
} |
2407 |
} |
|
2408 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2409 |
|
5991
ec2eebfe86de
(svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium
parents:
5990
diff
changeset
|
2410 |
return VETSB_CONTINUE; |
0 | 2411 |
} |
2412 |
||
2413 |
/* this function is called for one station each tick */ |
|
2414 |
static void StationHandleBigTick(Station *st) |
|
2415 |
{ |
|
2416 |
UpdateStationAcceptance(st, true); |
|
2417 |
||
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
2418 |
if (st->facilities == 0 && ++st->delete_ctr >= 8) delete st; |
1239
133586622b78
(svn r1743) -Fix: Multistop: Added some debug output and made sure that orphaned slots are cleared.
celestar
parents:
1231
diff
changeset
|
2419 |
|
0 | 2420 |
} |
2421 |
||
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2422 |
static inline void byte_inc_sat(byte *p) |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2423 |
{ |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2424 |
byte b = *p + 1; |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2425 |
if (b != 0) *p = b; |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2426 |
} |
0 | 2427 |
|
2428 |
static void UpdateStationRating(Station *st) |
|
2429 |
{ |
|
2430 |
bool waiting_changed = false; |
|
2431 |
||
2432 |
byte_inc_sat(&st->time_since_load); |
|
2433 |
byte_inc_sat(&st->time_since_unload); |
|
2434 |
||
6069 | 2435 |
GoodsEntry *ge = st->goods; |
0 | 2436 |
do { |
6261
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2437 |
/* Slowly increase the rating back to his original level in the case we |
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2438 |
* didn't deliver cargo yet to this station. This happens when a bribe |
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2439 |
* failed while you didn't moved that cargo yet to a station. */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2440 |
if (!HasBit(ge->acceptance_pickup, GoodsEntry::PICKUP) && ge->rating < INITIAL_STATION_RATING) { |
6261
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2441 |
ge->rating++; |
7474
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
2442 |
} |
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
2443 |
|
6261
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2444 |
/* Only change the rating if we are moving this cargo */ |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2445 |
if (HasBit(ge->acceptance_pickup, GoodsEntry::PICKUP)) { |
0 | 2446 |
byte_inc_sat(&ge->days_since_pickup); |
2447 |
||
6069 | 2448 |
int rating = 0; |
0 | 2449 |
|
2450 |
{ |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
2451 |
int b = ge->last_speed - 85; |
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
2452 |
if (b >= 0) |
0 | 2453 |
rating += b >> 2; |
2454 |
} |
|
2455 |
||
2456 |
{ |
|
2457 |
byte age = ge->last_age; |
|
2458 |
(age >= 3) || |
|
2459 |
(rating += 10, age >= 2) || |
|
2460 |
(rating += 10, age >= 1) || |
|
2461 |
(rating += 13, true); |
|
2462 |
} |
|
2463 |
||
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
2464 |
if (IsValidPlayer(st->owner) && HasBit(st->town->statues, st->owner)) rating += 26; |
0 | 2465 |
|
2466 |
{ |
|
2467 |
byte days = ge->days_since_pickup; |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2468 |
if (st->last_vehicle_type == VEH_SHIP) days >>= 2; |
0 | 2469 |
(days > 21) || |
2470 |
(rating += 25, days > 12) || |
|
2471 |
(rating += 25, days > 6) || |
|
2472 |
(rating += 45, days > 3) || |
|
2473 |
(rating += 35, true); |
|
2474 |
} |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2475 |
|
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2476 |
uint waiting = ge->cargo.Count(); |
6069 | 2477 |
(rating -= 90, waiting > 1500) || |
2478 |
(rating += 55, waiting > 1000) || |
|
2479 |
(rating += 35, waiting > 600) || |
|
2480 |
(rating += 10, waiting > 300) || |
|
2481 |
(rating += 20, waiting > 100) || |
|
2482 |
(rating += 10, true); |
|
0 | 2483 |
|
2484 |
{ |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
2485 |
int or_ = ge->rating; // old rating |
0 | 2486 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2487 |
/* only modify rating in steps of -2, -1, 0, 1 or 2 */ |
7922
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7891
diff
changeset
|
2488 |
ge->rating = rating = or_ + Clamp(Clamp(rating, 0, 255) - or_, -2, 2); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2489 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2490 |
/* if rating is <= 64 and more than 200 items waiting, |
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2491 |
* remove some random amount of goods from the station */ |
0 | 2492 |
if (rating <= 64 && waiting >= 200) { |
2493 |
int dec = Random() & 0x1F; |
|
2494 |
if (waiting < 400) dec &= 7; |
|
2495 |
waiting -= dec + 1; |
|
2496 |
waiting_changed = true; |
|
2497 |
} |
|
2498 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
2499 |
/* if rating is <= 127 and there are any items waiting, maybe remove some goods. */ |
0 | 2500 |
if (rating <= 127 && waiting != 0) { |
2501 |
uint32 r = Random(); |
|
5660
1425b81374b8
(svn r8120) -Fix (r8055): Station cargo waiting value clamp should be signed not unsigned. This resulted in cargo magically appearing...
peter1138
parents:
5609
diff
changeset
|
2502 |
if (rating <= (int)GB(r, 0, 7)) { |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2503 |
/* Need to have int, otherwise it will just overflow etc. */ |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2504 |
waiting = max((int)waiting - (int)GB(r, 8, 2) - 1, 0); |
0 | 2505 |
waiting_changed = true; |
2506 |
} |
|
2507 |
} |
|
2508 |
||
7252
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2509 |
/* At some point we really must cap the cargo. Previously this |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2510 |
* was a strict 4095, but now we'll have a less strict, but |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2511 |
* increasingly agressive truncation of the amount of cargo. */ |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2512 |
static const uint WAITING_CARGO_THRESHOLD = 1 << 12; |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2513 |
static const uint WAITING_CARGO_CUT_FACTOR = 1 << 6; |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2514 |
static const uint MAX_WAITING_CARGO = 1 << 15; |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2515 |
|
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2516 |
if (waiting > WAITING_CARGO_THRESHOLD) { |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2517 |
uint difference = waiting - WAITING_CARGO_THRESHOLD; |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2518 |
waiting -= (difference / WAITING_CARGO_CUT_FACTOR); |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2519 |
|
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2520 |
waiting = min(waiting, MAX_WAITING_CARGO); |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2521 |
waiting_changed = true; |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2522 |
} |
3440dde39b84
(svn r10555) -Codechange/Fix: add a soft limit of 4096 "entities" in a station's waiting queue and a hard limit of 32768 so (malicious) people cannot cause a "denial of service" attack by filling cargo lists.
rubidium
parents:
7097
diff
changeset
|
2523 |
|
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2524 |
if (waiting_changed) ge->cargo.Truncate(waiting); |
0 | 2525 |
} |
2526 |
} |
|
2527 |
} while (++ge != endof(st->goods)); |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2528 |
|
6069 | 2529 |
StationID index = st->index; |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
2530 |
if (waiting_changed) { |
8016
1c7062ad5f50
(svn r11576) -Codechange: enumerize and comment station GUI
smatz
parents:
8015
diff
changeset
|
2531 |
InvalidateWindow(WC_STATION_VIEW, index); // update whole window |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
2532 |
} else { |
8016
1c7062ad5f50
(svn r11576) -Codechange: enumerize and comment station GUI
smatz
parents:
8015
diff
changeset
|
2533 |
InvalidateWindowWidget(WC_STATION_VIEW, index, SVW_RATINGLIST); // update only ratings list |
4077
d4d440dd8925
(svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents:
4066
diff
changeset
|
2534 |
} |
0 | 2535 |
} |
2536 |
||
2537 |
/* called for every station each tick */ |
|
2538 |
static void StationHandleSmallTick(Station *st) |
|
2539 |
{ |
|
2639 | 2540 |
if (st->facilities == 0) return; |
0 | 2541 |
|
6069 | 2542 |
byte b = st->delete_ctr + 1; |
0 | 2543 |
if (b >= 185) b = 0; |
2544 |
st->delete_ctr = b; |
|
2545 |
||
2639 | 2546 |
if (b == 0) UpdateStationRating(st); |
0 | 2547 |
} |
2548 |
||
6247 | 2549 |
void OnTick_Station() |
0 | 2550 |
{ |
2639 | 2551 |
if (_game_mode == GM_EDITOR) return; |
0 | 2552 |
|
6069 | 2553 |
uint i = _station_tick_ctr; |
5247
1f982de55b88
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5220
diff
changeset
|
2554 |
if (++_station_tick_ctr > GetMaxStationIndex()) _station_tick_ctr = 0; |
0 | 2555 |
|
4352
6703cd8d39e0
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
2556 |
if (IsValidStationID(i)) StationHandleBigTick(GetStation(i)); |
0 | 2557 |
|
6069 | 2558 |
Station *st; |
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2559 |
FOR_ALL_STATIONS(st) { |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2560 |
StationHandleSmallTick(st); |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2561 |
|
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2562 |
/* Run 250 tick interval trigger for station animation. |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2563 |
* Station index is included so that triggers are not all done |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2564 |
* at the same time. */ |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2565 |
if ((_tick_counter + st->index) % 250 == 0) { |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2566 |
StationAnimationTrigger(st, st->xy, STAT_ANIM_250_TICKS); |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2567 |
} |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2568 |
} |
0 | 2569 |
} |
2570 |
||
6247 | 2571 |
void StationMonthlyLoop() |
0 | 2572 |
{ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2573 |
/* not used */ |
0 | 2574 |
} |
2575 |
||
2576 |
||
2498
3ed05caa4449
(svn r3024) -Codechange: Another batch of replacements of int/uint/int16/byte/-1 with proper types and constants
tron
parents:
2493
diff
changeset
|
2577 |
void ModifyStationRatingAround(TileIndex tile, PlayerID owner, int amount, uint radius) |
0 | 2578 |
{ |
2579 |
Station *st; |
|
2580 |
||
2581 |
FOR_ALL_STATIONS(st) { |
|
4346
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
2582 |
if (st->owner == owner && |
1245
3822f77cbc53
(svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents:
1239
diff
changeset
|
2583 |
DistanceManhattan(tile, st->xy) <= radius) { |
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6329
diff
changeset
|
2584 |
for (CargoID i = 0; i < NUM_CARGO; i++) { |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2585 |
GoodsEntry *ge = &st->goods[i]; |
2549 | 2586 |
|
7474
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
2587 |
if (ge->acceptance_pickup != 0) { |
7922
a7e266f966d9
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13
parents:
7891
diff
changeset
|
2588 |
ge->rating = Clamp(ge->rating + amount, 0, 255); |
0 | 2589 |
} |
2590 |
} |
|
2591 |
} |
|
2592 |
} |
|
2593 |
} |
|
2594 |
||
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6329
diff
changeset
|
2595 |
static void UpdateStationWaiting(Station *st, CargoID type, uint amount) |
0 | 2596 |
{ |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2597 |
st->goods[type].cargo.Append(new CargoPacket(st->index, amount)); |
7931
b0a46cd92225
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13
parents:
7929
diff
changeset
|
2598 |
SetBit(st->goods[type].acceptance_pickup, GoodsEntry::PICKUP); |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2599 |
|
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2600 |
StationAnimationTrigger(st, st->xy, STAT_ANIM_NEW_CARGO, type); |
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2601 |
|
0 | 2602 |
InvalidateWindow(WC_STATION_VIEW, st->index); |
6823
1f2075619543
(svn r10062) -Codechange: Don't redraw all station tiles when cargo is added or removed if the station has no custom graphics.
peter1138
parents:
6761
diff
changeset
|
2603 |
st->MarkTilesDirty(true); |
0 | 2604 |
} |
2605 |
||
7097
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2606 |
static bool IsUniqueStationName(const char *name) |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2607 |
{ |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2608 |
const Station *st; |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2609 |
char buf[512]; |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2610 |
|
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2611 |
FOR_ALL_STATIONS(st) { |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2612 |
SetDParam(0, st->index); |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2613 |
GetString(buf, STR_STATION, lastof(buf)); |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2614 |
if (strcmp(buf, name) == 0) return false; |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2615 |
} |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2616 |
|
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2617 |
return true; |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2618 |
} |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2619 |
|
1786
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1784
diff
changeset
|
2620 |
/** Rename a station |
3491
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3482
diff
changeset
|
2621 |
* @param tile unused |
6483
ae78fc3c6b20
(svn r9664) -Documentation: Doxygen corrections,errors and omissions
belugas
parents:
6463
diff
changeset
|
2622 |
* @param flags operation to perform |
1786
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1784
diff
changeset
|
2623 |
* @param p1 station ID that is to be renamed |
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1784
diff
changeset
|
2624 |
* @param p2 unused |
7cfd46c3fcc4
(svn r2290) - CodeChange: protect the next batch of commands. This brings us to a total of 61, which is 53% :)
Darkvater
parents:
1784
diff
changeset
|
2625 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
2626 |
CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 2627 |
{ |
7097
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2628 |
if (!IsValidStationID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR; |
6069 | 2629 |
Station *st = GetStation(p1); |
1774
907db1b7a445
(svn r2278) When renaming a station, check if the station exists and belongs to the correct player
tron
parents:
1751
diff
changeset
|
2630 |
|
4352
6703cd8d39e0
(svn r6053) -Codechange: renamed all IsXXXIndex to IsValidXXXID
truelight
parents:
4351
diff
changeset
|
2631 |
if (!CheckOwnership(st->owner)) return CMD_ERROR; |
1774
907db1b7a445
(svn r2278) When renaming a station, check if the station exists and belongs to the correct player
tron
parents:
1751
diff
changeset
|
2632 |
|
7097
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2633 |
if (!IsUniqueStationName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE); |
bc497a49fb45
(svn r10364) -Fix [FS#706]: checking for duplicate custom names was inconsistent, and tested all 'namespaces'. now only check names of the same type.
peter1138
parents:
7067
diff
changeset
|
2634 |
|
0 | 2635 |
if (flags & DC_EXEC) { |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
2636 |
free(st->name); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
2637 |
st->name = strdup(_cmd_text); |
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
2638 |
|
0 | 2639 |
UpdateStationVirtCoord(st); |
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
2640 |
ResortStationLists(); |
0 | 2641 |
MarkWholeScreenDirty(); |
2642 |
} |
|
2643 |
||
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
2644 |
return CommandCost(); |
0 | 2645 |
} |
2646 |
||
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2647 |
/** |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2648 |
* Find all (non-buoy) stations around an industry tile |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2649 |
* |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2650 |
* @param tile: Center tile to search from |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2651 |
* @param w: Width of the center |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2652 |
* @param h: Height of the center |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2653 |
* |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2654 |
* @return: Set of found stations |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2655 |
*/ |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2656 |
StationSet FindStationsAroundIndustryTile(TileIndex tile, int w, int h) |
0 | 2657 |
{ |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2658 |
StationSet station_set; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2659 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2660 |
int w_prod; // width and height of the "producer" of the cargo |
3000
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2661 |
int h_prod; |
568
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2662 |
int max_rad; |
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2663 |
if (_patches.modified_catchment) { |
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2664 |
w_prod = w; |
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2665 |
h_prod = h; |
7498
16bf3e859669
(svn r11013) -Fix [FS#1171]: MoveGoodsToStation's search area is too small as it assumed a lower maximum catchment area than the real maximum catchment area. Based on a patch by PhilSophus.
rubidium
parents:
7494
diff
changeset
|
2666 |
w += 2 * MAX_CATCHMENT; |
16bf3e859669
(svn r11013) -Fix [FS#1171]: MoveGoodsToStation's search area is too small as it assumed a lower maximum catchment area than the real maximum catchment area. Based on a patch by PhilSophus.
rubidium
parents:
7494
diff
changeset
|
2667 |
h += 2 * MAX_CATCHMENT; |
16bf3e859669
(svn r11013) -Fix [FS#1171]: MoveGoodsToStation's search area is too small as it assumed a lower maximum catchment area than the real maximum catchment area. Based on a patch by PhilSophus.
rubidium
parents:
7494
diff
changeset
|
2668 |
max_rad = MAX_CATCHMENT; |
568
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2669 |
} else { |
3000
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2670 |
w_prod = 0; |
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2671 |
h_prod = 0; |
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2672 |
w += 8; |
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2673 |
h += 8; |
8573 | 2674 |
max_rad = CA_UNMODIFIED; |
568
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2675 |
} |
b0d0df062880
(svn r979) Allow more realistically sized catchment areas
Celestar
parents:
555
diff
changeset
|
2676 |
|
1981 | 2677 |
BEGIN_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad)) |
0 | 2678 |
cur_tile = TILE_MASK(cur_tile); |
3000
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2679 |
if (!IsTileType(cur_tile, MP_STATION)) continue; |
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2680 |
|
6069 | 2681 |
Station *st = GetStationByTile(cur_tile); |
2682 |
||
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2683 |
if (st->IsBuoy()) continue; // bouys don't accept cargo |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2684 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2685 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2686 |
if (_patches.modified_catchment) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2687 |
/* min and max coordinates of the producer relative */ |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2688 |
const int x_min_prod = max_rad + 1; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2689 |
const int x_max_prod = max_rad + w_prod; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2690 |
const int y_min_prod = max_rad + 1; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2691 |
const int y_max_prod = max_rad + h_prod; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2692 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2693 |
int rad = FindCatchmentRadius(st); |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2694 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2695 |
int x_dist = min(w_cur - x_min_prod, x_max_prod - w_cur); |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2696 |
if (w_cur < x_min_prod) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2697 |
x_dist = x_min_prod - w_cur; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2698 |
} else if (w_cur > x_max_prod) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2699 |
x_dist = w_cur - x_max_prod; |
0 | 2700 |
} |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2701 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2702 |
if (x_dist > rad) continue; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2703 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2704 |
int y_dist = min(h_cur - y_min_prod, y_max_prod - h_cur); |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2705 |
if (h_cur < y_min_prod) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2706 |
y_dist = y_min_prod - h_cur; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2707 |
} else if (h_cur > y_max_prod) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2708 |
y_dist = h_cur - y_max_prod; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2709 |
} |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2710 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2711 |
if (y_dist > rad) continue; |
0 | 2712 |
} |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2713 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2714 |
/* Insert the station in the set. This will fail if it has |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2715 |
* already been added. |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2716 |
*/ |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2717 |
station_set.insert(st); |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2718 |
|
1981 | 2719 |
END_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad)) |
0 | 2720 |
|
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2721 |
return station_set; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2722 |
} |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2723 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2724 |
uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount) |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2725 |
{ |
8970
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
2726 |
Station *st1 = NULL; // Station with best rating |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
2727 |
Station *st2 = NULL; // Second best station |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
2728 |
uint best_rating1 = 0; // rating of st1 |
da7261f48b7e
(svn r12762) -Fix: tabs after the first non-tab character are generally not okay (or lines starting with a space and then tabs).
rubidium
parents:
8969
diff
changeset
|
2729 |
uint best_rating2 = 0; // rating of st2 |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2730 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2731 |
StationSet all_stations = FindStationsAroundIndustryTile(tile, w, h); |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2732 |
for (StationSet::iterator st_iter = all_stations.begin(); st_iter != all_stations.end(); ++st_iter) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2733 |
Station *st = *st_iter; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2734 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2735 |
/* Is the station reserved exclusively for somebody else? */ |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2736 |
if (st->town->exclusive_counter > 0 && st->town->exclusivity != st->owner) continue; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2737 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2738 |
if (st->goods[type].rating == 0) continue; // Lowest possible rating, better not to give cargo anymore |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2739 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2740 |
if (_patches.selectgoods && st->goods[type].last_speed == 0) continue; // Selectively servicing stations, and not this one |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2741 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2742 |
if (IsCargoInClass(type, CC_PASSENGERS)) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2743 |
if (st->facilities == FACIL_TRUCK_STOP) continue; // passengers are never served by just a truck stop |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2744 |
} else { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2745 |
if (st->facilities == FACIL_BUS_STOP) continue; // non-passengers are never served by just a bus stop |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2746 |
} |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2747 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2748 |
/* This station can be used, add it to st1/st2 */ |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2749 |
if (st1 == NULL || st->goods[type].rating >= best_rating1) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2750 |
st2 = st1; best_rating2 = best_rating1; st1 = st; best_rating1 = st->goods[type].rating; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2751 |
} else if (st2 == NULL || st->goods[type].rating >= best_rating2) { |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2752 |
st2 = st; best_rating2 = st->goods[type].rating; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2753 |
} |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2754 |
} |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2755 |
|
0 | 2756 |
/* no stations around at all? */ |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2757 |
if (st1 == NULL) return 0; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2758 |
|
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2759 |
if (st2 == NULL) { |
0 | 2760 |
/* only one station around */ |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2761 |
uint moved = amount * best_rating1 / 256 + 1; |
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2762 |
UpdateStationWaiting(st1, type, moved); |
0 | 2763 |
return moved; |
2764 |
} |
|
2765 |
||
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2766 |
/* several stations around, the best two (highest rating) are in st1 and st2 */ |
0 | 2767 |
assert(st1 != NULL); |
2768 |
assert(st2 != NULL); |
|
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2769 |
assert(best_rating1 != 0 || best_rating2 != 0); |
0 | 2770 |
|
2771 |
/* the 2nd highest one gets a penalty */ |
|
2772 |
best_rating2 >>= 1; |
|
2773 |
||
2774 |
/* amount given to station 1 */ |
|
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2775 |
uint t = (best_rating1 * (amount + 1)) / (best_rating1 + best_rating2); |
6069 | 2776 |
|
2777 |
uint moved = 0; |
|
0 | 2778 |
if (t != 0) { |
7891
aef0c16244d7
(svn r11442) -Feature: make news messages related to the industry (production) changes better configurable; you can now disable news messages popping up for industries you are not servicing. Patch by Alberth.
rubidium
parents:
7864
diff
changeset
|
2779 |
moved = t * best_rating1 / 256 + 1; |
0 | 2780 |
amount -= t; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
159
diff
changeset
|
2781 |
UpdateStationWaiting(st1, type, moved); |
0 | 2782 |
} |
2783 |
||
2784 |
if (amount != 0) { |
|
3000
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2785 |
amount = amount * best_rating2 / 256 + 1; |
692dd5ed9fca
(svn r3580) Some small cleanups before the real change, especially reduce the indentation by one by using continue
tron
parents:
2989
diff
changeset
|
2786 |
moved += amount; |
0 | 2787 |
UpdateStationWaiting(st2, type, amount); |
2788 |
} |
|
2789 |
||
2790 |
return moved; |
|
2791 |
} |
|
2792 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2793 |
void BuildOilRig(TileIndex tile) |
0 | 2794 |
{ |
9063
005b0643381c
(svn r12915) -Fix [FS#1960](r12857): don't initialize Station struct with tile=0, buoys will never change that value
smatz
parents:
9055
diff
changeset
|
2795 |
Station *st = new Station(tile); |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2796 |
|
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2797 |
if (st == NULL) { |
5380
8ea58542b6e0
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5362
diff
changeset
|
2798 |
DEBUG(misc, 0, "Can't allocate station for oilrig at 0x%X, reverting to oilrig only", tile); |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2799 |
return; |
0 | 2800 |
} |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2801 |
|
9049
21f20d9bc849
(svn r12875) -Codechange: Use defined const instead of cast magic
belugas
parents:
9048
diff
changeset
|
2802 |
st->town = ClosestTownFromTile(tile, UINT_MAX); |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2803 |
st->sign.width_1 = 0; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2804 |
|
9055
4dc6a0c0ef47
(svn r12897) -Codechange: some coding style in station_cmd.cpp.
rubidium
parents:
9049
diff
changeset
|
2805 |
st->string_id = GenerateStationName(st, tile, STATIONNAMING_OILRIG); |
7826
4283314d07a3
(svn r11376) -Fix: fill the town a oil rig is associated with before creating the name, otherwise every oil rig will become "<TOWN> Oilrig" which effectively means that there can be several oil rigs with exactly the same name.
rubidium
parents:
7814
diff
changeset
|
2806 |
|
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2807 |
MakeOilrig(tile, st->index); |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2808 |
|
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2809 |
st->owner = OWNER_NONE; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2810 |
st->airport_flags = 0; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2811 |
st->airport_type = AT_OILRIG; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2812 |
st->xy = tile; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2813 |
st->bus_stops = NULL; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2814 |
st->truck_stops = NULL; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2815 |
st->airport_tile = tile; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2816 |
st->dock_tile = tile; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2817 |
st->train_tile = 0; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2818 |
st->had_vehicle_of_type = 0; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2819 |
st->time_since_load = 255; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2820 |
st->time_since_unload = 255; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2821 |
st->delete_ctr = 0; |
6259
471b91a4b1d8
(svn r9068) -Codechange: capitalize the VEH_Train etc. enums to match the coding style (and rest of the code).
rubidium
parents:
6248
diff
changeset
|
2822 |
st->last_vehicle_type = VEH_INVALID; |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2823 |
st->facilities = FACIL_AIRPORT | FACIL_DOCK; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2824 |
st->build_date = _date; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2825 |
|
6350
04b19f551aec
(svn r9388) -Codechange: variable scope and type, and standardify all CargoID loops.
peter1138
parents:
6329
diff
changeset
|
2826 |
for (CargoID j = 0; j < NUM_CARGO; j++) { |
7474
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
2827 |
st->goods[j].acceptance_pickup = 0; |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2828 |
st->goods[j].days_since_pickup = 255; |
6261
f294962efd0d
(svn r9070) -Fix [FS#404]: if bribe failed and you didn't pick up cargo yet, you wouldn't ever be able to do so for a given station
truelight
parents:
6259
diff
changeset
|
2829 |
st->goods[j].rating = INITIAL_STATION_RATING; |
2427
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2830 |
st->goods[j].last_speed = 0; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2831 |
st->goods[j].last_age = 255; |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2832 |
} |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2833 |
|
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2834 |
UpdateStationVirtCoordDirty(st); |
5312305eecdd
(svn r2953) - Fix: [ 1257766 ] Cannot make ships go to an oil platform (oilrig has no station). While it is still possible that oilrigs end up without a station, it is only the case where no more stations can be built at all
Darkvater
parents:
2425
diff
changeset
|
2835 |
UpdateStationAcceptance(st, false); |
0 | 2836 |
} |
2837 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2838 |
void DeleteOilRig(TileIndex tile) |
0 | 2839 |
{ |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2840 |
Station *st = GetStationByTile(tile); |
0 | 2841 |
|
5887 | 2842 |
MakeWater(tile); |
0 | 2843 |
|
2844 |
st->dock_tile = 0; |
|
2845 |
st->airport_tile = 0; |
|
2846 |
st->facilities &= ~(FACIL_AIRPORT | FACIL_DOCK); |
|
2847 |
st->airport_flags = 0; |
|
2848 |
UpdateStationVirtCoordDirty(st); |
|
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
2849 |
if (st->facilities == 0) delete st; |
0 | 2850 |
} |
2851 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2427
diff
changeset
|
2852 |
static void ChangeTileOwner_Station(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 2853 |
{ |
1901
03bf9bf99319
(svn r2407) Use {Get,Is}TileOwner to get/check the owner of a tile and fix some bogus reads of _map_owner
tron
parents:
1891
diff
changeset
|
2854 |
if (!IsTileOwner(tile, old_player)) return; |
0 | 2855 |
|
4848
45f848b46222
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4638
diff
changeset
|
2856 |
if (new_player != PLAYER_SPECTATOR) { |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
2857 |
Station *st = GetStationByTile(tile); |
3315
c9d989783c55
(svn r4079) Add GetSation{Index,ByTile}() to get the station index resp. the station from a tile
tron
parents:
3282
diff
changeset
|
2858 |
|
1902 | 2859 |
SetTileOwner(tile, new_player); |
8518
9f64c88bb3e9
(svn r12093) -Fix: do not set station owner for buoys when merging company
smatz
parents:
8497
diff
changeset
|
2860 |
if (!IsBuoy(tile)) st->owner = new_player; // do not set st->owner for buoys |
3812
e6fc916c17ab
(svn r4822) -Feature: Station List View can now be sorted and filtered (by waiting cargo type and facilities)
celestar
parents:
3789
diff
changeset
|
2861 |
RebuildStationLists(); |
65
f9f866bc609c
(svn r66) -Fix Station list updated on station deletion/station rename
darkvater
parents:
59
diff
changeset
|
2862 |
InvalidateWindowClasses(WC_STATION_LIST); |
0 | 2863 |
} else { |
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2864 |
if (IsDriveThroughStopTile(tile)) { |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2865 |
/* Remove the drive-through road stop */ |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
2866 |
DoCommand(tile, 0, (GetStationType(tile) == STATION_TRUCK) ? ROADSTOP_TRUCK : ROADSTOP_BUS, DC_EXEC | DC_BANKRUPT, CMD_REMOVE_ROAD_STOP); |
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2867 |
assert(IsTileType(tile, MP_ROAD)); |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2868 |
/* Change owner of tile and all roadtypes */ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2869 |
ChangeTileOwner(tile, old_player, new_player); |
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2870 |
} else { |
8519
fe61d7aa3053
(svn r12094) -Codechange: use DC_BANKRUPT command flag when removing player property to allow further fixes
smatz
parents:
8518
diff
changeset
|
2871 |
DoCommand(tile, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); |
8520
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2872 |
/* Set tile owner of water under (now removed) buoy and dock to OWNER_NONE. |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2873 |
* Update owner of buoy if it was not removed (was in orders). |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2874 |
* Do not update when owned by OWNER_WATER (sea and rivers). */ |
ac36e31894cc
(svn r12095) -Fix [FS#1703]: when a company bankrupts, remove drive-through road stops, ship depots and buoys too. Update owners of water and road.
smatz
parents:
8519
diff
changeset
|
2875 |
if ((IsTileType(tile, MP_WATER) || IsBuoyTile(tile)) && IsTileOwner(tile, old_player)) SetTileOwner(tile, OWNER_NONE); |
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2876 |
} |
0 | 2877 |
} |
2878 |
} |
|
2879 |
||
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2880 |
/** |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2881 |
* Check if a drive-through road stop tile can be cleared. |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2882 |
* Road stops built on town-owned roads check the conditions |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2883 |
* that would allow clearing of the original road. |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2884 |
* @param tile road stop tile to check |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2885 |
* @return true if the road can be cleared |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2886 |
*/ |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2887 |
static bool CanRemoveRoadWithStop(TileIndex tile) |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2888 |
{ |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2889 |
/* The road can always be cleared if it was not a town-owned road */ |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2890 |
if (!GetStopBuiltOnTownRoad(tile)) return true; |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2891 |
|
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2892 |
bool edge_road; |
6661
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
2893 |
return CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_ROAD), OWNER_TOWN, &edge_road, ROADTYPE_ROAD) && |
1716fce5ad29
(svn r9892) -Codechange: lots of ground work for allowing multiple types of "road" with multiple owners on a single tile.
rubidium
parents:
6596
diff
changeset
|
2894 |
CheckAllowRemoveRoad(tile, GetAnyRoadBits(tile, ROADTYPE_TRAM), OWNER_TOWN, &edge_road, ROADTYPE_TRAM); |
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2895 |
} |
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2896 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6915
diff
changeset
|
2897 |
static CommandCost ClearTile_Station(TileIndex tile, byte flags) |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1942
diff
changeset
|
2898 |
{ |
0 | 2899 |
if (flags & DC_AUTO) { |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2900 |
switch (GetStationType(tile)) { |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2901 |
case STATION_RAIL: return_cmd_error(STR_300B_MUST_DEMOLISH_RAILROAD); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2902 |
case STATION_AIRPORT: return_cmd_error(STR_300E_MUST_DEMOLISH_AIRPORT_FIRST); |
8563
13b1a41e46f1
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
8520
diff
changeset
|
2903 |
case STATION_TRUCK: return_cmd_error(HasTileRoadType(tile, ROADTYPE_TRAM) ? STR_MUST_DEMOLISH_CARGO_TRAM_STATION : STR_3047_MUST_DEMOLISH_TRUCK_STATION); |
13b1a41e46f1
(svn r12141) -Codechange: Introduce IsNormalRoad[Tile](), IsRoadDepot[Tile]() and HasTileRoadType(); and use them.
frosch
parents:
8520
diff
changeset
|
2904 |
case STATION_BUS: return_cmd_error(HasTileRoadType(tile, ROADTYPE_TRAM) ? STR_MUST_DEMOLISH_PASSENGER_TRAM_STATION : STR_3046_MUST_DEMOLISH_BUS_STATION); |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2905 |
case STATION_BUOY: return_cmd_error(STR_306A_BUOY_IN_THE_WAY); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2906 |
case STATION_DOCK: return_cmd_error(STR_304D_MUST_DEMOLISH_DOCK_FIRST); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2907 |
case STATION_OILRIG: |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2908 |
SetDParam(0, STR_4807_OIL_RIG); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2909 |
return_cmd_error(STR_4800_IN_THE_WAY); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2910 |
} |
0 | 2911 |
} |
2912 |
||
6069 | 2913 |
Station *st = GetStationByTile(tile); |
0 | 2914 |
|
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2915 |
switch (GetStationType(tile)) { |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2916 |
case STATION_RAIL: return RemoveRailroadStation(st, tile, flags); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2917 |
case STATION_AIRPORT: return RemoveAirport(st, flags); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2918 |
case STATION_TRUCK: |
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2919 |
if (IsDriveThroughStopTile(tile) && !CanRemoveRoadWithStop(tile)) |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2920 |
return_cmd_error(STR_3047_MUST_DEMOLISH_TRUCK_STATION); |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2921 |
return RemoveRoadStop(st, flags, tile); |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2922 |
case STATION_BUS: |
6116
0a63874accb6
(svn r8852) -Fix (r8735): make the dynamite tool for drive through road stops as if it were removing a normal road tile (consider the local authority and such).
rubidium
parents:
6115
diff
changeset
|
2923 |
if (IsDriveThroughStopTile(tile) && !CanRemoveRoadWithStop(tile)) |
6012
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2924 |
return_cmd_error(STR_3046_MUST_DEMOLISH_BUS_STATION); |
065d7234a7a9
(svn r8735) -Feature: drive-through road stops made possible by the hard work of mart3p.
rubidium
parents:
6000
diff
changeset
|
2925 |
return RemoveRoadStop(st, flags, tile); |
3334
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2926 |
case STATION_BUOY: return RemoveBuoy(st, flags); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2927 |
case STATION_DOCK: return RemoveDock(st, flags); |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2928 |
default: break; |
2999d2ddc0f9
(svn r4113) Moved all relevant map functions for stations to station_map.[ch]
celestar
parents:
3333
diff
changeset
|
2929 |
} |
0 | 2930 |
|
2931 |
return CMD_ERROR; |
|
2932 |
} |
|
2933 |
||
6247 | 2934 |
void InitializeStations() |
0 | 2935 |
{ |
1272
9aa073c64fc7
(svn r1776) -Add: Dynamic stations. You can now have up to 64k of stations
truelight
parents:
1266
diff
changeset
|
2936 |
/* Clean the station pool and create 1 block in it */ |
7379
5afd3c499c4d
(svn r10748) -Codechange: call the pool cleanup functions for stations directly instead of using the wrapper functions.
rubidium
parents:
7377
diff
changeset
|
2937 |
_Station_pool.CleanPool(); |
5afd3c499c4d
(svn r10748) -Codechange: call the pool cleanup functions for stations directly instead of using the wrapper functions.
rubidium
parents:
7377
diff
changeset
|
2938 |
_Station_pool.AddBlockToPool(); |
919
544f374ee392
(svn r1407) -Codechange: changed a lot around _stations, _vehicles, _towns and _industries
truelight
parents:
909
diff
changeset
|
2939 |
|
1284
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
2940 |
/* Clean the roadstop pool and create 1 block in it */ |
7379
5afd3c499c4d
(svn r10748) -Codechange: call the pool cleanup functions for stations directly instead of using the wrapper functions.
rubidium
parents:
7377
diff
changeset
|
2941 |
_RoadStop_pool.CleanPool(); |
5afd3c499c4d
(svn r10748) -Codechange: call the pool cleanup functions for stations directly instead of using the wrapper functions.
rubidium
parents:
7377
diff
changeset
|
2942 |
_RoadStop_pool.AddBlockToPool(); |
243
9a40daa560ae
(svn r244) -Fix: Stations were not sorted for non-player-0 players
darkvater
parents:
222
diff
changeset
|
2943 |
|
0 | 2944 |
_station_tick_ctr = 0; |
2945 |
} |
|
2946 |
||
2947 |
||
6247 | 2948 |
void AfterLoadStations() |
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2949 |
{ |
6069 | 2950 |
/* Update the speclists of all stations to point to the currently loaded custom stations. */ |
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2951 |
Station *st; |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2952 |
FOR_ALL_STATIONS(st) { |
6069 | 2953 |
for (uint i = 0; i < st->num_specs; i++) { |
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2954 |
if (st->speclist[i].grfid == 0) continue; |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2955 |
|
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2956 |
st->speclist[i].spec = GetCustomStationSpecByGrf(st->speclist[i].grfid, st->speclist[i].localidx); |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2957 |
} |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2958 |
|
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
2959 |
for (CargoID c = 0; c < NUM_CARGO; c++) st->goods[c].cargo.InvalidateCache(); |
9003
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2960 |
|
7972fa66d9c9
(svn r12798) -Feature: Add some support for NewGRF station animation. (Thanks to mart3p for samples and fixes)
peter1138
parents:
8970
diff
changeset
|
2961 |
StationUpdateAnimTriggers(st); |
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2962 |
} |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2963 |
} |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
2964 |
|
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
2965 |
static CommandCost TerraformTile_Station(TileIndex tile, uint32 flags, uint z_new, Slope tileh_new) |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
2966 |
{ |
7582
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2967 |
if (_patches.build_on_slopes && AutoslopeEnabled()) { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2968 |
/* TODO: If you implement newgrf callback 149 'land slope check', you have to decide what to do with it here. |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2969 |
* TTDP does not call it. |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2970 |
*/ |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2971 |
if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new))) { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2972 |
switch (GetStationType(tile)) { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2973 |
case STATION_RAIL: { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2974 |
DiagDirection direction = AxisToDiagDir(GetRailStationAxis(tile)); |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2975 |
if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, direction)) break; |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2976 |
if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, ReverseDiagDir(direction))) break; |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
2977 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform); |
7582
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2978 |
} |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2979 |
|
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2980 |
case STATION_AIRPORT: |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
2981 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform); |
7582
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2982 |
|
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2983 |
case STATION_TRUCK: |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2984 |
case STATION_BUS: { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2985 |
DiagDirection direction = GetRoadStopDir(tile); |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2986 |
if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, direction)) break; |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2987 |
if (IsDriveThroughStopTile(tile)) { |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2988 |
if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, ReverseDiagDir(direction))) break; |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2989 |
} |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8225
diff
changeset
|
2990 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform); |
7582
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2991 |
} |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2992 |
|
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2993 |
default: break; |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2994 |
} |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2995 |
} |
80c8517b08d1
(svn r11107) -Feature: some tool so one can still build tunnels under rails (and other structures) when the owner of the structure built it on foundations and if you have enough "empty" space ofcourse. One could use the tool for some other construction needs too. Patch by frosch.
rubidium
parents:
7545
diff
changeset
|
2996 |
} |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
2997 |
return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
2998 |
} |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
2999 |
|
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3000 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
3001 |
extern const TileTypeProcs _tile_type_station_procs = { |
3554
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3002 |
DrawTile_Station, /* draw_tile_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3003 |
GetSlopeZ_Station, /* get_slope_z_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3004 |
ClearTile_Station, /* clear_tile_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3005 |
GetAcceptedCargo_Station, /* get_accepted_cargo_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3006 |
GetTileDesc_Station, /* get_tile_desc_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3007 |
GetTileTrackStatus_Station, /* get_tile_track_status_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3008 |
ClickTile_Station, /* click_tile_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3009 |
AnimateTile_Station, /* animate_tile_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3010 |
TileLoop_Station, /* tile_loop_clear */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3011 |
ChangeTileOwner_Station, /* change_tile_owner_clear */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3012 |
NULL, /* get_produced_cargo_proc */ |
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3013 |
VehicleEnter_Station, /* vehicle_enter_tile_proc */ |
7335
141c6b86ec1f
(svn r10698) -Codechange [FS#1082]: simplify the code related to foundations. Primarily removal of (duplicated|magic) code and introduction of few helper functions to ease foundation determination. Patch by frosch.
rubidium
parents:
7333
diff
changeset
|
3014 |
GetFoundation_Station, /* get_foundation_proc */ |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7491
diff
changeset
|
3015 |
TerraformTile_Station, /* terraform_tile_proc */ |
0 | 3016 |
}; |
3017 |
||
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1876
diff
changeset
|
3018 |
static const SaveLoad _roadstop_desc[] = { |
8969
6d1c74e0e2cd
(svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents:
8964
diff
changeset
|
3019 |
SLE_VAR(RoadStop, xy, SLE_UINT32), |
5718 | 3020 |
SLE_CONDNULL(1, 0, 44), |
8969
6d1c74e0e2cd
(svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents:
8964
diff
changeset
|
3021 |
SLE_VAR(RoadStop, status, SLE_UINT8), |
1285
4bda5c927b45
(svn r1789) -Fix: there is no need to save the index, it is done for us
truelight
parents:
1284
diff
changeset
|
3022 |
/* Index was saved in some versions, but this is not needed */ |
3222
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3183
diff
changeset
|
3023 |
SLE_CONDNULL(4, 0, 8), |
5716 | 3024 |
SLE_CONDNULL(2, 0, 44), |
3479
3655a074a380
(svn r4324) Remove the unused road stop type attribute from struct RoadStop
tron
parents:
3478
diff
changeset
|
3025 |
SLE_CONDNULL(1, 0, 25), |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3026 |
|
8969
6d1c74e0e2cd
(svn r12761) -Codechange: lots of minor whitespace coding style fixes around operators.
rubidium
parents:
8964
diff
changeset
|
3027 |
SLE_REF(RoadStop, next, REF_ROADSTOPS), |
5867 | 3028 |
SLE_CONDNULL(2, 0, 44), |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3029 |
|
3431 | 3030 |
SLE_CONDNULL(4, 0, 24), |
3475
150d89779e96
(svn r4320) -Fix/Codechange: rs->num_vehicles is no longer saved or loaded, but computed on the fly. Partly fixes FS#101
celestar
parents:
3474
diff
changeset
|
3031 |
SLE_CONDNULL(1, 25, 25), |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3032 |
|
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3033 |
SLE_END() |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3034 |
}; |
0 | 3035 |
|
1881
435d39bd6ee0
(svn r2387) - CodeChange: made the saveload code more readable and also removed the 'byte' saveload arrays which means you can save an array of more than 255 elements, or bigger structs than 255 bytes. This doesn't yet solve the problem that a chunk can be a maximum of 16384 big.
Darkvater
parents:
1876
diff
changeset
|
3036 |
static const SaveLoad _station_desc[] = { |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3037 |
SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3038 |
SLE_CONDVAR(Station, xy, SLE_UINT32, 6, SL_MAX_VERSION), |
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3039 |
SLE_CONDNULL(4, 0, 5), ///< bus/lorry tile |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3040 |
SLE_CONDVAR(Station, train_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3041 |
SLE_CONDVAR(Station, train_tile, SLE_UINT32, 6, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3042 |
SLE_CONDVAR(Station, airport_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3043 |
SLE_CONDVAR(Station, airport_tile, SLE_UINT32, 6, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3044 |
SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3045 |
SLE_CONDVAR(Station, dock_tile, SLE_UINT32, 6, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3046 |
SLE_REF(Station, town, REF_TOWN), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3047 |
SLE_VAR(Station, trainst_w, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3048 |
SLE_CONDVAR(Station, trainst_h, SLE_UINT8, 2, SL_MAX_VERSION), |
0 | 3049 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3050 |
SLE_CONDNULL(1, 0, 3), ///< alpha_order |
0 | 3051 |
|
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3052 |
SLE_VAR(Station, string_id, SLE_STRINGID), |
8258
9fa31acb07bc
(svn r11822) -Codechange: Replaced fixed size custom name array. Names are now attached to their object directly and there is
peter1138
parents:
8254
diff
changeset
|
3053 |
SLE_CONDSTR(Station, name, SLE_STR, 0, 84, SL_MAX_VERSION), |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3054 |
SLE_VAR(Station, had_vehicle_of_type, SLE_UINT16), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3055 |
|
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3056 |
SLE_VAR(Station, time_since_load, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3057 |
SLE_VAR(Station, time_since_unload, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3058 |
SLE_VAR(Station, delete_ctr, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3059 |
SLE_VAR(Station, owner, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3060 |
SLE_VAR(Station, facilities, SLE_UINT8), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3061 |
SLE_VAR(Station, airport_type, SLE_UINT8), |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3062 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3063 |
SLE_CONDNULL(2, 0, 5), ///< Truck/bus stop status |
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3064 |
SLE_CONDNULL(1, 0, 4), ///< Blocked months |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3065 |
|
5995
4e57aeeeafcd
(svn r8705) -Codechange: Increased the number of airport blocks to 64. This involves changing the enum of airport blocks to a static const uint64 as SOME platforms do not support 64-bit enums
celestar
parents:
5991
diff
changeset
|
3066 |
SLE_CONDVAR(Station, airport_flags, SLE_VAR_U64 | SLE_FILE_U16, 0, 2), |
4e57aeeeafcd
(svn r8705) -Codechange: Increased the number of airport blocks to 64. This involves changing the enum of airport blocks to a static const uint64 as SOME platforms do not support 64-bit enums
celestar
parents:
5991
diff
changeset
|
3067 |
SLE_CONDVAR(Station, airport_flags, SLE_VAR_U64 | SLE_FILE_U32, 3, 45), |
4e57aeeeafcd
(svn r8705) -Codechange: Increased the number of airport blocks to 64. This involves changing the enum of airport blocks to a static const uint64 as SOME platforms do not support 64-bit enums
celestar
parents:
5991
diff
changeset
|
3068 |
SLE_CONDVAR(Station, airport_flags, SLE_UINT64, 46, SL_MAX_VERSION), |
3554
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3069 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3070 |
SLE_CONDNULL(2, 0, 25), ///< last-vehicle |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3071 |
SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, 26, SL_MAX_VERSION), |
3554
86230061c3e7
(svn r4426) Code Cleaning : replacing tabs with spaces, removing obvious comments, aligning arrays etc...
belugas
parents:
3553
diff
changeset
|
3072 |
|
8964
84f2e443b7be
(svn r12756) -Cleanup: variable scope and coding style in station*
smatz
parents:
8962
diff
changeset
|
3073 |
SLE_CONDNULL(2, 3, 25), ///< custom station class and id |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3074 |
SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3075 |
SLE_CONDVAR(Station, build_date, SLE_INT32, 31, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3076 |
|
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3077 |
SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3078 |
SLE_CONDREF(Station, truck_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION), |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3079 |
|
3687
f421ffcfeb00
(svn r4612) - NewStations: add random bits (for graphic variation) to stations
peter1138
parents:
3682
diff
changeset
|
3080 |
/* Used by newstations for graphic variations */ |
4344
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3081 |
SLE_CONDVAR(Station, random_bits, SLE_UINT16, 27, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3082 |
SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, 27, SL_MAX_VERSION), |
7e123fec5b0b
(svn r6045) -Cleanup: align all table-like structures using spaces, i.e. whitespace fixes only except for a few comments to make them uniform for the whole enum/struct.
rubidium
parents:
4326
diff
changeset
|
3083 |
SLE_CONDVAR(Station, num_specs, SLE_UINT8, 27, SL_MAX_VERSION), |
3687
f421ffcfeb00
(svn r4612) - NewStations: add random bits (for graphic variation) to stations
peter1138
parents:
3682
diff
changeset
|
3084 |
|
6500
f12678890222
(svn r9683) -Fix [FS#423]: improved loading does not use a huge amount of processing power anymore when having a lot of trains.
rubidium
parents:
6491
diff
changeset
|
3085 |
SLE_CONDLST(Station, loading_vehicles, REF_VEHICLE, 57, SL_MAX_VERSION), |
f12678890222
(svn r9683) -Fix [FS#423]: improved loading does not use a huge amount of processing power anymore when having a lot of trains.
rubidium
parents:
6491
diff
changeset
|
3086 |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
3087 |
/* reserve extra space in savegame here. (currently 32 bytes) */ |
3222
6de22e06a1e9
(svn r3895) - Add proper SLE(G)_CONDNULL macros for the empty space reservation in savegames and update where used
Darkvater
parents:
3183
diff
changeset
|
3088 |
SLE_CONDNULL(32, 2, SL_MAX_VERSION), |
0 | 3089 |
|
3090 |
SLE_END() |
|
3091 |
}; |
|
3092 |
||
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3093 |
static uint16 _waiting_acceptance; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3094 |
static uint16 _cargo_source; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3095 |
static uint32 _cargo_source_xy; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3096 |
static uint16 _cargo_days; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3097 |
static Money _cargo_feeder_share; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3098 |
|
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3099 |
static const SaveLoad _station_speclist_desc[] = { |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3100 |
SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, 27, SL_MAX_VERSION), |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3101 |
SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, 27, SL_MAX_VERSION), |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3102 |
|
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3103 |
SLE_END() |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3104 |
}; |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3105 |
|
0 | 3106 |
|
7491
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3107 |
void SaveLoad_STNS(Station *st) |
0 | 3108 |
{ |
7491
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3109 |
static const SaveLoad _goods_desc[] = { |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3110 |
SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3111 |
SLE_CONDVAR(GoodsEntry, acceptance_pickup, SLE_UINT8, 68, SL_MAX_VERSION), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3112 |
SLE_CONDNULL(2, 51, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3113 |
SLE_VAR(GoodsEntry, days_since_pickup, SLE_UINT8), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3114 |
SLE_VAR(GoodsEntry, rating, SLE_UINT8), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3115 |
SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3116 |
SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3117 |
SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3118 |
SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3119 |
SLE_VAR(GoodsEntry, last_speed, SLE_UINT8), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3120 |
SLE_VAR(GoodsEntry, last_age, SLE_UINT8), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3121 |
SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 64), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3122 |
SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3123 |
SLE_CONDLST(GoodsEntry, cargo.packets, REF_CARGO_PACKET, 68, SL_MAX_VERSION), |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3124 |
|
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3125 |
SLE_END() |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3126 |
}; |
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3127 |
|
595b714c8719
(svn r11002) -Codechange: unhackify the cargo packet list saving (a little).
rubidium
parents:
7474
diff
changeset
|
3128 |
|
0 | 3129 |
SlObject(st, _station_desc); |
6463
e986fe39dfe7
(svn r9638) -Feature: Increase cargo types from 12 to 32 and enable newcargo flag in NewGRF loader.
peter1138
parents:
6453
diff
changeset
|
3130 |
|
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3131 |
_waiting_acceptance = 0; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3132 |
|
6463
e986fe39dfe7
(svn r9638) -Feature: Increase cargo types from 12 to 32 and enable newcargo flag in NewGRF loader.
peter1138
parents:
6453
diff
changeset
|
3133 |
uint num_cargo = CheckSavegameVersion(55) ? 12 : NUM_CARGO; |
e986fe39dfe7
(svn r9638) -Feature: Increase cargo types from 12 to 32 and enable newcargo flag in NewGRF loader.
peter1138
parents:
6453
diff
changeset
|
3134 |
for (CargoID i = 0; i < num_cargo; i++) { |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3135 |
GoodsEntry *ge = &st->goods[i]; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3136 |
SlObject(ge, _goods_desc); |
7013
b9643e4f798b
(svn r10269) -Fix [FS#912]: station ratings were shown for all cargos instead of only the cargos that have been transported.
rubidium
parents:
7010
diff
changeset
|
3137 |
if (CheckSavegameVersion(68)) { |
7928
63e18de69e50
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents:
7922
diff
changeset
|
3138 |
SB(ge->acceptance_pickup, GoodsEntry::ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15)); |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3139 |
if (GB(_waiting_acceptance, 0, 12) != 0) { |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3140 |
/* Don't construct the packet with station here, because that'll fail with old savegames */ |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3141 |
CargoPacket *cp = new CargoPacket(); |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3142 |
/* In old versions, enroute_from used 0xFF as INVALID_STATION */ |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3143 |
cp->source = (CheckSavegameVersion(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3144 |
cp->count = GB(_waiting_acceptance, 0, 12); |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3145 |
cp->days_in_transit = _cargo_days; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3146 |
cp->feeder_share = _cargo_feeder_share; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3147 |
cp->source_xy = _cargo_source_xy; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3148 |
cp->days_in_transit = _cargo_days; |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3149 |
cp->feeder_share = _cargo_feeder_share; |
7474
1daa825ba893
(svn r10981) -Fix [FS#1156] (r10970): stations gave ratings for accepted cargo too.
rubidium
parents:
7469
diff
changeset
|
3150 |
SB(ge->acceptance_pickup, GoodsEntry::PICKUP, 1, 1); |
7010
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3151 |
ge->cargo.Append(cp); |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3152 |
} |
6f0d9f03180d
(svn r10266) -Codechange: keep track of the origin, time of travel and accumulated feeder share (transfers) of individual pieces of cargo. This means that cargo isn't thrown on a big pile when it's put in a station or unloaded at a station, however the GUI does not reflect these changes yet so you will not actually see it.
rubidium
parents:
6955
diff
changeset
|
3153 |
} |
1266
eccd576e322f
(svn r1770) -Fix: Hopefully last pieces of code that are containing a station-id
truelight
parents:
1265
diff
changeset
|
3154 |
} |
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3155 |
|
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3156 |
if (st->num_specs != 0) { |
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3157 |
/* Allocate speclist memory when loading a game */ |
5609
dc6a58930ba4
(svn r8066) - Codechange: MallocT(), CallocT(), ReallocT() now return the pointer to allocated memory instead of modifying the pointer given as parameter
KUDr
parents:
5601
diff
changeset
|
3158 |
if (st->speclist == NULL) st->speclist = CallocT<StationSpecList>(st->num_specs); |
6069 | 3159 |
for (uint i = 0; i < st->num_specs; i++) { |
3160 |
SlObject(&st->speclist[i], _station_speclist_desc); |
|
3161 |
} |
|
3765
a4ddbff73f9f
(svn r4757) - Newstations: add saveload support for custom station speclists
peter1138
parents:
3763
diff
changeset
|
3162 |
} |
0 | 3163 |
} |
3164 |
||
6247 | 3165 |
static void Save_STNS() |
0 | 3166 |
{ |
3167 |
Station *st; |
|
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
3168 |
/* Write the stations */ |
0 | 3169 |
FOR_ALL_STATIONS(st) { |
4346
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
3170 |
SlSetArrayIndex(st->index); |
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
3171 |
SlAutolength((AutolengthProc*)SaveLoad_STNS, st); |
0 | 3172 |
} |
3173 |
} |
|
3174 |
||
6247 | 3175 |
static void Load_STNS() |
0 | 3176 |
{ |
3177 |
int index; |
|
3178 |
while ((index = SlIterateArray()) != -1) { |
|
5665
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
3179 |
Station *st = new (index) Station(); |
d6b5c720ad67
(svn r8125) -Codechange: Station is now constructed/destroyed using new/delete operators (don't worry, they still use the same memory pool). Few station related functions turned into Station::methods (just first step). All this new stuff moved from station_cmd.cpp to the new file (station.cpp).
KUDr
parents:
5660
diff
changeset
|
3180 |
|
0 | 3181 |
SaveLoad_STNS(st); |
3182 |
||
7795
8ce3c983c7a3
(svn r11345) -Cleanup: a bit of comment style fixing
belugas
parents:
7758
diff
changeset
|
3183 |
/* this means it's an oldstyle savegame without support for nonuniform stations */ |
2639 | 3184 |
if (st->train_tile != 0 && st->trainst_h == 0) { |
3033
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
3185 |
uint w = GB(st->trainst_w, 4, 4); |
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
3186 |
uint h = GB(st->trainst_w, 0, 4); |
9cba043eb38f
(svn r3613) Some more const, indentation, whitespace and similar stuff
tron
parents:
3032
diff
changeset
|
3187 |
|
6106 | 3188 |
if (GetRailStationAxis(st->train_tile) != AXIS_X) Swap(w, h); |
0 | 3189 |
st->trainst_w = w; |
3190 |
st->trainst_h = h; |
|
3191 |
} |
|
3192 |
} |
|
919
544f374ee392
(svn r1407) -Codechange: changed a lot around _stations, _vehicles, _towns and _industries
truelight
parents:
909
diff
changeset
|
3193 |
|
1472
a2abe3b9d7a7
(svn r1976) Cleanups - mostly indentation and fiddling with loops
tron
parents:
1457
diff
changeset
|
3194 |
/* This is to ensure all pointers are within the limits of _stations_size */ |
5247
1f982de55b88
(svn r7372) - CodeChange: Rename all GetXXXArraySize() functions to GetNumXXX() and add GetMaxXXXIndex() functions. This prepares for the new pool interface.
matthijs
parents:
5220
diff
changeset
|
3195 |
if (_station_tick_ctr > GetMaxStationIndex()) _station_tick_ctr = 0; |
0 | 3196 |
} |
3197 |
||
6247 | 3198 |
static void Save_ROADSTOP() |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3199 |
{ |
1284
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3200 |
RoadStop *rs; |
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3201 |
|
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3202 |
FOR_ALL_ROADSTOPS(rs) { |
4346
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
3203 |
SlSetArrayIndex(rs->index); |
66105d4f6e83
(svn r6047) -Codechange: FOR_ALL now _only_ loops valid items, and skips invalid ones
truelight
parents:
4344
diff
changeset
|
3204 |
SlObject(rs, _roadstop_desc); |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3205 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3206 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3207 |
|
6247 | 3208 |
static void Load_ROADSTOP() |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3209 |
{ |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3210 |
int index; |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3211 |
|
1284
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3212 |
while ((index = SlIterateArray()) != -1) { |
5716 | 3213 |
RoadStop *rs = new (index) RoadStop(INVALID_TILE); |
5708
4c4c5ec2bed6
(svn r8185) -Codechange: Equipped Roadstops with new/delete operators and gave them proper constructors/destructors (Thanks to KUDr for a nice interactive C++ lesson)
celestar
parents:
5697
diff
changeset
|
3214 |
|
1284
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3215 |
SlObject(rs, _roadstop_desc); |
e1969eb0227b
(svn r1788) -Add: Made RoadStops dynamic. You can now create up to 64k roadstops.
truelight
parents:
1272
diff
changeset
|
3216 |
} |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3217 |
} |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3218 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
3219 |
extern const ChunkHandler _station_chunk_handlers[] = { |
1217
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3220 |
{ 'STNS', Save_STNS, Load_STNS, CH_ARRAY }, |
59c024cfaf54
(svn r1721) -Feature: It is now possible to build multiple road stations (up to 8) on
celestar
parents:
1214
diff
changeset
|
3221 |
{ 'ROAD', Save_ROADSTOP, Load_ROADSTOP, CH_ARRAY | CH_LAST}, |
0 | 3222 |
}; |