author | peter1138 |
Sun, 03 Aug 2008 17:35:08 +0000 | |
changeset 9834 | 7474149531c1 |
parent 9811 | 1942cbc26a51 |
child 9948 | 1f1f5558ca20 |
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:
9038
diff
changeset
|
3 |
/** @file water_cmd.cpp Handling of water tiles. */ |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
4 |
|
0 | 5 |
#include "stdafx.h" |
1891
862800791170
(svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents:
1796
diff
changeset
|
6 |
#include "openttd.h" |
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
7 |
#include "bridge_map.h" |
6160
fa42299e967e
(svn r8908) -Codechange: declaration of DrawBridgeMiddle does not belong in a map accessors header.
rubidium
parents:
6134
diff
changeset
|
8 |
#include "bridge.h" |
6134 | 9 |
#include "cmd_helper.h" |
3338
7cff208f0446
(svn r4120) Use the new station functions where appropriate
tron
parents:
3275
diff
changeset
|
10 |
#include "station_map.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:
6432
diff
changeset
|
12 |
#include "landscape.h" |
8224
c5a64d87cc54
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium
parents:
8211
diff
changeset
|
13 |
#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
|
14 |
#include "command_func.h" |
0 | 15 |
#include "town.h" |
8763
81fadd257f67
(svn r12459) -Codechange: split news.h into news_type.h and news_func.h.
rubidium
parents:
8684
diff
changeset
|
16 |
#include "news_func.h" |
8962
1b263c69799d
(svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents:
8806
diff
changeset
|
17 |
#include "depot_base.h" |
1b263c69799d
(svn r12754) -Codechange: split depot.h into depot_map.h, depot_func.h and depot_base.h and remove quite a lot of unneeded (before this) includes of depot.h.
rubidium
parents:
8806
diff
changeset
|
18 |
#include "depot_func.h" |
1752
d65cd19f7117
(svn r2256) - Fix: Trains cannot find a depot when they are in a tunnel. (glx)
matthijs
parents:
1632
diff
changeset
|
19 |
#include "vehicle_gui.h" |
2676
59b65b4fb480
(svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents:
2657
diff
changeset
|
20 |
#include "train.h" |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
21 |
#include "roadveh.h" |
8108
b42a0e5c67ef
(svn r11669) -Codechange: refactor tile.h -> tile_type.h and tile_map.h
rubidium
parents:
8105
diff
changeset
|
22 |
#include "water.h" |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
23 |
#include "water_map.h" |
7507
36bb5300a128
(svn r11022) -Fix: the canal border determination did not take oil rigs into consideration.
rubidium
parents:
7497
diff
changeset
|
24 |
#include "industry_map.h" |
5210
3415ef43c70a
(svn r7325) -Feature: Add support for action 5 type 0x0D, coast sprites.
peter1138
parents:
4848
diff
changeset
|
25 |
#include "newgrf.h" |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
26 |
#include "newgrf_canal.h" |
7849
0a1c0af2c96c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
7797
diff
changeset
|
27 |
#include "transparency.h" |
8114
dd6d21dc99c1
(svn r11675) -Codechange: split the string types from the string functions.
rubidium
parents:
8108
diff
changeset
|
28 |
#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:
8119
diff
changeset
|
29 |
#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:
8119
diff
changeset
|
30 |
#include "window_func.h" |
8144
65cec0877b78
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium
parents:
8139
diff
changeset
|
31 |
#include "vehicle_func.h" |
8157
1505def01945
(svn r11719) -Codechange: split sound.h in a header with types and one with functions.
rubidium
parents:
8144
diff
changeset
|
32 |
#include "sound_func.h" |
8211
29a8510dfd62
(svn r11774) -Change: do not include variables.h in a header when it is not needed.
rubidium
parents:
8164
diff
changeset
|
33 |
#include "variables.h" |
8254
1496654ca5e7
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8237
diff
changeset
|
34 |
#include "player_func.h" |
8270
e7c342f6b14c
(svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents:
8264
diff
changeset
|
35 |
#include "settings_type.h" |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
36 |
#include "clear_map.h" |
8459 | 37 |
#include "tree_map.h" |
8785
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
38 |
#include "station_base.h" |
871586967963
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium
parents:
8763
diff
changeset
|
39 |
#include "airport.h" |
8787
41d9d5adbe87
(svn r12495) -Codechange: reduce the dependency on newgrf_station.h (especially because newgrf_station.h includes a lot of stuff).
rubidium
parents:
8785
diff
changeset
|
40 |
#include "newgrf_cargo.h" |
9009
6684576ef32b
(svn r12804) -Codechange: move the effect vehicle handling out of vehicle.cpp
rubidium
parents:
8962
diff
changeset
|
41 |
#include "effectvehicle_func.h" |
9038
38f0f10f8cca
(svn r12857) -Fix [FS#1948]: remove the last uses of AutoPtr in the station code.
rubidium
parents:
9036
diff
changeset
|
42 |
#include "oldpool_func.h" |
9490
01c07bde5e84
(svn r13464) -Codechange: support NewGRF Action 0x05, type 12.
rubidium
parents:
9413
diff
changeset
|
43 |
#include "tunnelbridge_map.h" |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
44 |
|
8264
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8254
diff
changeset
|
45 |
#include "table/sprites.h" |
b1e85998c7d3
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents:
8254
diff
changeset
|
46 |
#include "table/strings.h" |
2261
d3554e5d3e86
(svn r2781) Fix some of the issues with variables in .h files.
ludde
parents:
2186
diff
changeset
|
47 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
48 |
/** |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
49 |
* Describes the behaviour of a tile during flooding. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
50 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
51 |
enum FloodingBehaviour { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
52 |
FLOOD_NONE, ///< The tile does not flood neighboured tiles. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
53 |
FLOOD_ACTIVE, ///< The tile floods neighboured tiles. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
54 |
FLOOD_PASSIVE, ///< The tile does not actively flood neighboured tiles, but it prevents them from drying up. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
55 |
FLOOD_DRYUP, ///< The tile drys up if it is not constantly flooded from neighboured tiles. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
56 |
}; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
57 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
58 |
/** |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
59 |
* Describes from which directions a specific slope can be flooded (if the tile is floodable at all). |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
60 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
61 |
static const uint8 _flood_from_dirs[] = { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
62 |
(1 << DIR_NW) | (1 << DIR_SW) | (1 << DIR_SE) | (1 << DIR_NE), // SLOPE_FLAT |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
63 |
(1 << DIR_NE) | (1 << DIR_SE), // SLOPE_W |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
64 |
(1 << DIR_NW) | (1 << DIR_NE), // SLOPE_S |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
65 |
(1 << DIR_NE), // SLOPE_SW |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
66 |
(1 << DIR_NW) | (1 << DIR_SW), // SLOPE_E |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
67 |
0, // SLOPE_EW |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
68 |
(1 << DIR_NW), // SLOPE_SE |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
69 |
(1 << DIR_N ) | (1 << DIR_NW) | (1 << DIR_NE), // SLOPE_WSE, SLOPE_STEEP_S |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
70 |
(1 << DIR_SW) | (1 << DIR_SE), // SLOPE_N |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
71 |
(1 << DIR_SE), // SLOPE_NW |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
72 |
0, // SLOPE_NS |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
73 |
(1 << DIR_E ) | (1 << DIR_NE) | (1 << DIR_SE), // SLOPE_NWS, SLOPE_STEEP_W |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
74 |
(1 << DIR_SW), // SLOPE_NE |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
75 |
(1 << DIR_S ) | (1 << DIR_SW) | (1 << DIR_SE), // SLOPE_ENW, SLOPE_STEEP_N |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
76 |
(1 << DIR_W ) | (1 << DIR_SW) | (1 << DIR_NW), // SLOPE_SEN, SLOPE_STEEP_E |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
77 |
}; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
78 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
79 |
/** |
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
80 |
* Marks tile dirty if it is a canal or river tile. |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
81 |
* Called to avoid glitches when flooding tiles next to canal tile. |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
82 |
* |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
83 |
* @param tile tile to check |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
84 |
*/ |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
85 |
static inline void MarkTileDirtyIfCanalOrRiver(TileIndex tile) |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
86 |
{ |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
87 |
if (IsTileType(tile, MP_WATER) && (IsCanal(tile) || IsRiver(tile))) MarkTileDirtyByTile(tile); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
88 |
} |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
89 |
|
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
90 |
/** |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
91 |
* Marks the tiles around a tile as dirty, if they are canals or rivers. |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
92 |
* |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
93 |
* @param tile The center of the tile where all other tiles are marked as dirty |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
94 |
* @ingroup dirty |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
95 |
*/ |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
96 |
static void MarkCanalsAndRiversAroundDirty(TileIndex tile) |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
97 |
{ |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
98 |
for (Direction dir = DIR_BEGIN; dir < DIR_END; dir++) { |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
99 |
MarkTileDirtyIfCanalOrRiver(tile + TileOffsByDir(dir)); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
100 |
} |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
101 |
} |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
102 |
|
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
103 |
/** |
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:
7928
diff
changeset
|
104 |
* Makes a tile canal or water depending on the surroundings. |
8495
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
105 |
* |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
106 |
* Must only be used for converting old savegames. Use WaterClass now. |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
107 |
* |
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:
7928
diff
changeset
|
108 |
* This as for example docks and shipdepots do not store |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
109 |
* whether the tile used to be canal or 'normal' water. |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
110 |
* @param t the tile to change. |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
111 |
* @param o the owner of the new tile. |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
112 |
* @param include_invalid_water_class Also consider WATER_CLASS_INVALID, i.e. industry tiles on land |
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:
7928
diff
changeset
|
113 |
*/ |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
114 |
void SetWaterClassDependingOnSurroundings(TileIndex t, bool include_invalid_water_class) |
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:
7928
diff
changeset
|
115 |
{ |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
116 |
/* If the slope is not flat, we always assume 'land' (if allowed). Also for one-corner-raised-shores. |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
117 |
* Note: Wrt. autosloping under industry tiles this is the most fool-proof behaviour. */ |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
118 |
if (GetTileSlope(t, NULL) != SLOPE_FLAT) { |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
119 |
if (include_invalid_water_class) { |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
120 |
SetWaterClass(t, WATER_CLASS_INVALID); |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
121 |
return; |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
122 |
} else { |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
123 |
NOT_REACHED(); |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
124 |
} |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
125 |
} |
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:
7928
diff
changeset
|
126 |
|
8022
3b4f24a14ace
(svn r11582) -Fix: tiles were not marked dirty in some cases when removing a lock
smatz
parents:
8014
diff
changeset
|
127 |
/* Mark tile dirty in all cases */ |
3b4f24a14ace
(svn r11582) -Fix: tiles were not marked dirty in some cases when removing a lock
smatz
parents:
8014
diff
changeset
|
128 |
MarkTileDirtyByTile(t); |
3b4f24a14ace
(svn r11582) -Fix: tiles were not marked dirty in some cases when removing a lock
smatz
parents:
8014
diff
changeset
|
129 |
|
8526
2c0a12f36f25
(svn r12101) -Fix (r12100): there are void tiles at MapMaxX,Y - have to substract one to be on water border tiles
smatz
parents:
8525
diff
changeset
|
130 |
if (TileX(t) == 0 || TileY(t) == 0 || TileX(t) == MapMaxX() - 1 || TileY(t) == MapMaxY() - 1) { |
8525
2670d1ad818c
(svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders
smatz
parents:
8520
diff
changeset
|
131 |
/* tiles at map borders are always WATER_CLASS_SEA */ |
2670d1ad818c
(svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders
smatz
parents:
8520
diff
changeset
|
132 |
SetWaterClass(t, WATER_CLASS_SEA); |
2670d1ad818c
(svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders
smatz
parents:
8520
diff
changeset
|
133 |
return; |
2670d1ad818c
(svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders
smatz
parents:
8520
diff
changeset
|
134 |
} |
2670d1ad818c
(svn r12100) -Fix (r12042): check for water class of surrounding tiles fails for buoys at map borders
smatz
parents:
8520
diff
changeset
|
135 |
|
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:
7928
diff
changeset
|
136 |
bool has_water = false; |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
137 |
bool has_canal = false; |
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:
8459
diff
changeset
|
138 |
bool has_river = false; |
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:
7928
diff
changeset
|
139 |
|
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
140 |
for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) { |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
141 |
TileIndex neighbour = TileAddByDiagDir(t, dir); |
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
142 |
switch (GetTileType(neighbour)) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
143 |
case MP_WATER: |
8495
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
144 |
/* clear water and shipdepots have already a WaterClass associated */ |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
145 |
if (IsCoast(neighbour)) { |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
146 |
has_water = true; |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
147 |
} else if (!IsLock(neighbour)) { |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
148 |
switch (GetWaterClass(neighbour)) { |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
149 |
case WATER_CLASS_SEA: has_water = true; break; |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
150 |
case WATER_CLASS_CANAL: has_canal = true; break; |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
151 |
case WATER_CLASS_RIVER: has_river = true; break; |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
152 |
default: NOT_REACHED(); |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
153 |
} |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
154 |
} |
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
155 |
break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
156 |
|
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
157 |
case MP_RAILWAY: |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
158 |
/* Shore or flooded halftile */ |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
159 |
has_water |= (GetRailGroundType(neighbour) == RAIL_GROUND_WATER); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
160 |
break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
161 |
|
8459 | 162 |
case MP_TREES: |
163 |
/* trees on shore */ |
|
164 |
has_water |= (GetTreeGround(neighbour) == TREE_GROUND_SHORE); |
|
165 |
break; |
|
166 |
||
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
167 |
default: break; |
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:
7928
diff
changeset
|
168 |
} |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
169 |
} |
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:
8459
diff
changeset
|
170 |
|
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
171 |
if (!has_water && !has_canal && !has_river && include_invalid_water_class) { |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
172 |
SetWaterClass(t, WATER_CLASS_INVALID); |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
173 |
return; |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
174 |
} |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
175 |
|
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:
8459
diff
changeset
|
176 |
if (has_river && !has_canal) { |
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:
8459
diff
changeset
|
177 |
SetWaterClass(t, WATER_CLASS_RIVER); |
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:
8459
diff
changeset
|
178 |
} else if (has_canal || !has_water) { |
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:
8459
diff
changeset
|
179 |
SetWaterClass(t, WATER_CLASS_CANAL); |
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:
7928
diff
changeset
|
180 |
} else { |
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:
8459
diff
changeset
|
181 |
SetWaterClass(t, WATER_CLASS_SEA); |
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:
7928
diff
changeset
|
182 |
} |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
183 |
} |
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
184 |
|
e408508f5727
(svn r11504) -Fix [FS#1467]: removing docks/ship depots could result in non-canal water where canals should have been build.
rubidium
parents:
7928
diff
changeset
|
185 |
|
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
186 |
/** Build a ship depot. |
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:
3439
diff
changeset
|
187 |
* @param tile tile where ship depot is built |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
188 |
* @param flags type of operation |
6134 | 189 |
* @param p1 bit 0 depot orientation (Axis) |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
190 |
* @param p2 unused |
0 | 191 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
192 |
CommandCost CmdBuildShipDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 193 |
{ |
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:
3439
diff
changeset
|
194 |
TileIndex tile2; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
195 |
|
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
196 |
CommandCost ret; |
0 | 197 |
|
6134 | 198 |
Axis axis = Extract<Axis, 0>(p1); |
199 |
||
200 |
tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1)); |
|
0 | 201 |
|
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:
8459
diff
changeset
|
202 |
if (!IsWaterTile(tile) || !IsWaterTile(tile2)) { |
0 | 203 |
return_cmd_error(STR_3801_MUST_BE_BUILT_ON_WATER); |
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:
8459
diff
changeset
|
204 |
} |
0 | 205 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
206 |
if (IsBridgeAbove(tile) || IsBridgeAbove(tile2)) 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:
5210
diff
changeset
|
207 |
|
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:
8459
diff
changeset
|
208 |
if (GetTileSlope(tile, NULL) != SLOPE_FLAT || GetTileSlope(tile2, NULL) != SLOPE_FLAT) { |
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:
8459
diff
changeset
|
209 |
/* Prevent depots on rapids */ |
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:
8459
diff
changeset
|
210 |
return_cmd_error(STR_0239_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:
8459
diff
changeset
|
211 |
} |
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:
8459
diff
changeset
|
212 |
|
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:
8459
diff
changeset
|
213 |
WaterClass wc1 = GetWaterClass(tile); |
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:
8459
diff
changeset
|
214 |
WaterClass wc2 = GetWaterClass(tile2); |
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:
3439
diff
changeset
|
215 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
216 |
if (CmdFailed(ret)) return CMD_ERROR; |
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:
3439
diff
changeset
|
217 |
ret = DoCommand(tile2, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
1784
d0698aac0c2e
(svn r2288) - CodeChange: protected the next batch of commands (41 so far, out of 115).
Darkvater
parents:
1752
diff
changeset
|
218 |
if (CmdFailed(ret)) return CMD_ERROR; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
219 |
|
9036
6368fe55fd6d
(svn r12855) -Codechange: do not use autoptr's for testing whether certain objects can be build, but check it directly in the pool so we do not have to call destructors in the testing phase. Stations still use the autoptr though.
rubidium
parents:
9009
diff
changeset
|
220 |
if (!Depot::CanAllocateItem()) return CMD_ERROR; |
0 | 221 |
|
222 |
if (flags & DC_EXEC) { |
|
9036
6368fe55fd6d
(svn r12855) -Codechange: do not use autoptr's for testing whether certain objects can be build, but check it directly in the pool so we do not have to call destructors in the testing phase. Stations still use the autoptr though.
rubidium
parents:
9009
diff
changeset
|
223 |
Depot *depot = new Depot(tile); |
1313
f1013ec3d318
(svn r1817) -Codechange: Moved depot-functions to depot.c
truelight
parents:
1214
diff
changeset
|
224 |
depot->town_index = ClosestTownFromTile(tile, (uint)-1)->index; |
0 | 225 |
|
8495
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
226 |
MakeShipDepot(tile, _current_player, DEPOT_NORTH, axis, wc1); |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
227 |
MakeShipDepot(tile2, _current_player, DEPOT_SOUTH, axis, wc2); |
3372
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
228 |
MarkTileDirtyByTile(tile); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
229 |
MarkTileDirtyByTile(tile2); |
0 | 230 |
} |
231 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
232 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.build_ship_depot); |
0 | 233 |
} |
234 |
||
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:
8459
diff
changeset
|
235 |
void MakeWaterKeepingClass(TileIndex tile, Owner o) |
8029
6cc607fe1d3d
(svn r11589) -Fix [FS#1514]: when ship depots got destroyed they always returned to water, even when it should've been canals.
rubidium
parents:
8022
diff
changeset
|
236 |
{ |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
237 |
assert(IsTileType(tile, MP_WATER) || (IsTileType(tile, MP_STATION) && (IsBuoy(tile) || IsDock(tile) || IsOilRig(tile))) || IsTileType(tile, MP_INDUSTRY)); |
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:
8459
diff
changeset
|
238 |
|
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
239 |
WaterClass wc = GetWaterClass(tile); |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
240 |
|
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
241 |
/* Autoslope might turn an originally canal or river tile into land */ |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
242 |
uint z; |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
243 |
if (GetTileSlope(tile, &z) != SLOPE_FLAT) wc = WATER_CLASS_INVALID; |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
244 |
|
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
245 |
if (wc == WATER_CLASS_SEA && z > 0) wc = WATER_CLASS_CANAL; |
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
246 |
|
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
247 |
switch (wc) { |
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:
8459
diff
changeset
|
248 |
case WATER_CLASS_SEA: MakeWater(tile); break; |
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:
8459
diff
changeset
|
249 |
case WATER_CLASS_CANAL: MakeCanal(tile, o, Random()); break; |
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:
8459
diff
changeset
|
250 |
case WATER_CLASS_RIVER: MakeRiver(tile, Random()); break; |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
251 |
default: DoClearSquare(tile); break; |
8029
6cc607fe1d3d
(svn r11589) -Fix [FS#1514]: when ship depots got destroyed they always returned to water, even when it should've been canals.
rubidium
parents:
8022
diff
changeset
|
252 |
} |
6cc607fe1d3d
(svn r11589) -Fix [FS#1514]: when ship depots got destroyed they always returned to water, even when it should've been canals.
rubidium
parents:
8022
diff
changeset
|
253 |
} |
6cc607fe1d3d
(svn r11589) -Fix [FS#1514]: when ship depots got destroyed they always returned to water, even when it should've been canals.
rubidium
parents:
8022
diff
changeset
|
254 |
|
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
255 |
static CommandCost RemoveShipDepot(TileIndex tile, uint32 flags) |
0 | 256 |
{ |
3373
2838aadd3a28
(svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents:
3372
diff
changeset
|
257 |
if (!IsShipDepot(tile)) return CMD_ERROR; |
2951 | 258 |
if (!CheckTileOwnership(tile)) return CMD_ERROR; |
0 | 259 |
|
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
|
260 |
TileIndex tile2 = GetOtherShipDepotTile(tile); |
0 | 261 |
|
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
|
262 |
/* do not check for 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
|
263 |
if (!(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
|
264 |
if (!EnsureNoVehicleOnGround(tile) || !EnsureNoVehicleOnGround(tile2)) 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
|
265 |
} |
0 | 266 |
|
267 |
if (flags & DC_EXEC) { |
|
3373
2838aadd3a28
(svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents:
3372
diff
changeset
|
268 |
/* Kill the depot, which is registered at the northernmost tile. Use that one */ |
7389
08d6a6265ced
(svn r10758) -Codechange: make the depot struct use the pool item class as super class.
rubidium
parents:
7335
diff
changeset
|
269 |
delete GetDepotByTile(tile2 < tile ? tile2 : tile); |
0 | 270 |
|
8495
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
271 |
MakeWaterKeepingClass(tile, GetTileOwner(tile)); |
35c77bdca32a
(svn r12070) -Cleanup(r12042): Water-owner of shipdepots is no longer needed. Removed.
frosch
parents:
8471
diff
changeset
|
272 |
MakeWaterKeepingClass(tile2, GetTileOwner(tile2)); |
3111
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
273 |
MarkTileDirtyByTile(tile); |
750f37699a13
(svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
3017
diff
changeset
|
274 |
MarkTileDirtyByTile(tile2); |
0 | 275 |
} |
276 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
277 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_ship_depot); |
0 | 278 |
} |
279 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
280 |
/** build a shiplift */ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
281 |
static CommandCost DoBuildShiplift(TileIndex tile, DiagDirection dir, uint32 flags) |
0 | 282 |
{ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
283 |
CommandCost ret; |
0 | 284 |
int delta; |
285 |
||
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
286 |
/* middle tile */ |
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:
3439
diff
changeset
|
287 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
288 |
if (CmdFailed(ret)) return CMD_ERROR; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
289 |
|
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4434
diff
changeset
|
290 |
delta = TileOffsByDiagDir(dir); |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
291 |
/* lower tile */ |
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:
8459
diff
changeset
|
292 |
WaterClass wc_lower = IsWaterTile(tile - delta) ? GetWaterClass(tile - delta) : WATER_CLASS_CANAL; |
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:
8459
diff
changeset
|
293 |
|
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:
3439
diff
changeset
|
294 |
ret = DoCommand(tile - delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
295 |
if (CmdFailed(ret)) return CMD_ERROR; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
296 |
if (GetTileSlope(tile - delta, NULL) != SLOPE_FLAT) { |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
297 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
298 |
} |
0 | 299 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
300 |
/* upper tile */ |
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:
8459
diff
changeset
|
301 |
WaterClass wc_upper = IsWaterTile(tile + delta) ? GetWaterClass(tile + delta) : WATER_CLASS_CANAL; |
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:
8459
diff
changeset
|
302 |
|
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:
3439
diff
changeset
|
303 |
ret = DoCommand(tile + delta, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
2737
fb1556b8f5e0
(svn r3282) - Codechange: Replace tests against CMD_ERROR with CmdFailed()
peter1138
parents:
2676
diff
changeset
|
304 |
if (CmdFailed(ret)) return CMD_ERROR; |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
305 |
if (GetTileSlope(tile + delta, NULL) != SLOPE_FLAT) { |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
306 |
return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
307 |
} |
0 | 308 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
309 |
if ((MayHaveBridgeAbove(tile) && IsBridgeAbove(tile)) || |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
310 |
(MayHaveBridgeAbove(tile - delta) && IsBridgeAbove(tile - delta)) || |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
311 |
(MayHaveBridgeAbove(tile + delta) && IsBridgeAbove(tile + delta))) { |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
312 |
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:
5210
diff
changeset
|
313 |
} |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
314 |
|
0 | 315 |
if (flags & DC_EXEC) { |
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:
8459
diff
changeset
|
316 |
MakeLock(tile, _current_player, dir, wc_lower, wc_upper); |
3372
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
317 |
MarkTileDirtyByTile(tile); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
318 |
MarkTileDirtyByTile(tile - delta); |
f6afa98d5219
(svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents:
3338
diff
changeset
|
319 |
MarkTileDirtyByTile(tile + delta); |
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
320 |
MarkCanalsAndRiversAroundDirty(tile - delta); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
321 |
MarkCanalsAndRiversAroundDirty(tile + delta); |
0 | 322 |
} |
323 |
||
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
324 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.clear_water * 22 >> 3); |
0 | 325 |
} |
326 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
327 |
static CommandCost RemoveShiplift(TileIndex tile, uint32 flags) |
0 | 328 |
{ |
4559
aa0c13e39840
(svn r6406) -Codechange: Rename TileOffsByDir to TileOffsByDiagDir because it accepts
Darkvater
parents:
4434
diff
changeset
|
329 |
TileIndexDiff delta = TileOffsByDiagDir(GetLockDirection(tile)); |
0 | 330 |
|
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
331 |
if (!CheckTileOwnership(tile) && GetTileOwner(tile) != OWNER_NONE) return CMD_ERROR; |
3940
8965b9bfaabc
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
peter1138
parents:
3939
diff
changeset
|
332 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
333 |
/* make sure no vehicle is on the 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
|
334 |
if (!EnsureNoVehicleOnGround(tile) || !EnsureNoVehicleOnGround(tile + delta) || !EnsureNoVehicleOnGround(tile - delta)) |
0 | 335 |
return CMD_ERROR; |
336 |
||
337 |
if (flags & DC_EXEC) { |
|
338 |
DoClearSquare(tile); |
|
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:
8459
diff
changeset
|
339 |
MakeWaterKeepingClass(tile + delta, GetTileOwner(tile)); |
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:
8459
diff
changeset
|
340 |
MakeWaterKeepingClass(tile - delta, GetTileOwner(tile)); |
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:
8459
diff
changeset
|
341 |
MarkTileDirtyByTile(tile - delta); |
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:
8459
diff
changeset
|
342 |
MarkTileDirtyByTile(tile + delta); |
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
343 |
MarkCanalsAndRiversAroundDirty(tile - delta); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
344 |
MarkCanalsAndRiversAroundDirty(tile + delta); |
0 | 345 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
346 |
|
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
347 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.clear_water * 2); |
0 | 348 |
} |
349 |
||
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
350 |
/** Builds a lock (ship-lift) |
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:
3439
diff
changeset
|
351 |
* @param tile tile where to place the lock |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
352 |
* @param flags type of operation |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
353 |
* @param p1 unused |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
354 |
* @param p2 unused |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
355 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
356 |
CommandCost CmdBuildLock(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 357 |
{ |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
358 |
DiagDirection dir = GetInclinedSlopeDirection(GetTileSlope(tile, NULL)); |
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
359 |
if (dir == INVALID_DIAGDIR) return_cmd_error(STR_1000_LAND_SLOPED_IN_WRONG_DIRECTION); |
8386
bed99ec71cb0
(svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids.
peter1138
parents:
8380
diff
changeset
|
360 |
|
bed99ec71cb0
(svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids.
peter1138
parents:
8380
diff
changeset
|
361 |
/* Disallow building of locks on river 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:
8459
diff
changeset
|
362 |
if (IsWaterTile(tile)) return_cmd_error(STR_0239_SITE_UNSUITABLE); |
8386
bed99ec71cb0
(svn r11956) -Fix [FS#1675]: Disallow building locks and docks on rapids.
peter1138
parents:
8380
diff
changeset
|
363 |
|
3157
3f35e2d9c8e3
(svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents:
3111
diff
changeset
|
364 |
return DoBuildShiplift(tile, dir, flags); |
0 | 365 |
} |
366 |
||
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
367 |
/** Build a piece of canal. |
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:
3439
diff
changeset
|
368 |
* @param tile end tile of stretch-dragging |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
369 |
* @param flags type of operation |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
370 |
* @param p1 start tile of stretch-dragging |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
371 |
* @param p2 specifies canal (0), water (1) or river (2); last two can only be built in scenario editor |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
372 |
*/ |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
373 |
CommandCost CmdBuildCanal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) |
0 | 374 |
{ |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
375 |
CommandCost cost(EXPENSES_CONSTRUCTION); |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
376 |
int size_x, size_y; |
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:
3439
diff
changeset
|
377 |
int x; |
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
378 |
int y; |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
379 |
int sx, sy; |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
380 |
|
2934
3f29a7212713
(svn r3490) -Fix: A bunch (10) of off-by-one errors when checking if a TileIndex points to a tile on the map
tron
parents:
2737
diff
changeset
|
381 |
if (p1 >= MapSize()) return CMD_ERROR; |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
382 |
|
6286
a67f2c376804
(svn r9105) -Fix [FS#629]: disable the ability to make flooding water with the canal build tool. In the scenario editor you can still make both canals and flooding water at height level 0.
rubidium
parents:
6259
diff
changeset
|
383 |
/* Outside of the editor you can only build canals, not oceans */ |
8361
7963f4b11d96
(svn r11927) -Fix (r11926): unable to place canals in game
peter1138
parents:
8360
diff
changeset
|
384 |
if (p2 != 0 && _game_mode != GM_EDITOR) return CMD_ERROR; |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
385 |
|
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:
3439
diff
changeset
|
386 |
x = TileX(tile); |
35d747bb5e82
(svn r4342) Change the first two parameters of commands - virtual pixel coordinates of the tile to operate on - to a TileIndex
tron
parents:
3439
diff
changeset
|
387 |
y = TileY(tile); |
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
388 |
sx = TileX(p1); |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
389 |
sy = TileY(p1); |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
390 |
|
6106 | 391 |
if (x < sx) Swap(x, sx); |
392 |
if (y < sy) Swap(y, sy); |
|
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
393 |
size_x = (x - sx) + 1; |
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
394 |
size_y = (y - sy) + 1; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
395 |
|
1796
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
396 |
/* Outside the editor you can only drag canals, and not areas */ |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
397 |
if (_game_mode != GM_EDITOR && (sx != x && sy != y)) return CMD_ERROR; |
614d996f6be7
(svn r2300) - CodeChange: check the last number of commands, now only the refit ones remain, and some server-only commands.
Darkvater
parents:
1784
diff
changeset
|
398 |
|
1981 | 399 |
BEGIN_TILE_LOOP(tile, size_x, size_y, TileXY(sx, sy)) { |
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
400 |
CommandCost ret; |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
401 |
|
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
402 |
Slope slope = GetTileSlope(tile, NULL); |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
403 |
if (slope != SLOPE_FLAT && (p2 != 2 || !IsInclinedSlope(slope))) { |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
404 |
return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); |
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
405 |
} |
0 | 406 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
407 |
/* can't make water of water! */ |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
408 |
if (IsTileType(tile, MP_WATER) && (!IsTileOwner(tile, OWNER_WATER) || p2 == 1)) continue; |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
409 |
|
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
410 |
ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); |
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
411 |
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
|
412 |
cost.AddCost(ret); |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
413 |
|
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
414 |
if (flags & DC_EXEC) { |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
415 |
if (TileHeight(tile) == 0 && p2 == 1) { |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
416 |
MakeWater(tile); |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
417 |
} else if (p2 == 2) { |
8368
dcee6c9440b5
(svn r11934) -Codechange: add persistent random data for river and canal tiles.
peter1138
parents:
8361
diff
changeset
|
418 |
MakeRiver(tile, Random()); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
419 |
} else { |
8368
dcee6c9440b5
(svn r11934) -Codechange: add persistent random data for river and canal tiles.
peter1138
parents:
8361
diff
changeset
|
420 |
MakeCanal(tile, _current_player, Random()); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
421 |
} |
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
422 |
MarkTileDirtyByTile(tile); |
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
423 |
MarkCanalsAndRiversAroundDirty(tile); |
3189
bf047128dee7
(svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
3183
diff
changeset
|
424 |
} |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
425 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
426 |
cost.AddCost(_price.clear_water); |
1632
10c391e108b7
(svn r2136) - Fix: [ 1174313 ] terrain hotkeys nonfunctional in scenario editor (D,Q,W,E,R,T,Y,U fltr)
Darkvater
parents:
1605
diff
changeset
|
427 |
} END_TILE_LOOP(tile, size_x, size_y, 0); |
0 | 428 |
|
6950
14ecb0acdfb4
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
rubidium
parents:
6946
diff
changeset
|
429 |
if (cost.GetCost() == 0) { |
3183
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
430 |
return_cmd_error(STR_1007_ALREADY_BUILT); |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
431 |
} else { |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
432 |
return cost; |
90c676e6a50d
(svn r3829) Reduce the use of _error_message by directly returning error codes instead of using this global variable
tron
parents:
3177
diff
changeset
|
433 |
} |
0 | 434 |
} |
435 |
||
6943
1914f26aee04
(svn r10197) -Codechange: replace int32 with CommandCost where appropriate.
rubidium
parents:
6906
diff
changeset
|
436 |
static CommandCost ClearTile_Water(TileIndex tile, byte flags) |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
437 |
{ |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
438 |
switch (GetWaterTileType(tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
439 |
case WATER_TILE_CLEAR: |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
440 |
if (flags & DC_NO_WATER) return_cmd_error(STR_3807_CAN_T_BUILD_ON_WATER); |
0 | 441 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
442 |
/* Make sure it's not an edge tile. */ |
7954
57b51c69c072
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7948
diff
changeset
|
443 |
if (!IsInsideMM(TileX(tile), 1, MapMaxX() - 1) || |
57b51c69c072
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7948
diff
changeset
|
444 |
!IsInsideMM(TileY(tile), 1, MapMaxY() - 1)) { |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
445 |
return_cmd_error(STR_0002_TOO_CLOSE_TO_EDGE_OF_MAP); |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
446 |
} |
3017
a75caf4efa2d
(svn r3597) Miscellaneous (I like that word) changes: Fix some indentation, add consts, reduce indentation level by short-circuit logic, convert if cascades to switch, whitespace, bracing, plus some minor stuff
tron
parents:
2989
diff
changeset
|
447 |
|
7509
23372ed624e8
(svn r11024) -Fix [FS#1173]: give a more correct error when building some things on tile 0; "Can't build on water" or "Too close to the edge" instead of "Vehicle in the way". Patch by SmatZ.
rubidium
parents:
7507
diff
changeset
|
448 |
/* Make sure no vehicle is on the 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
|
449 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
7509
23372ed624e8
(svn r11024) -Fix [FS#1173]: give a more correct error when building some things on tile 0; "Can't build on water" or "Too close to the edge" instead of "Vehicle in the way". Patch by SmatZ.
rubidium
parents:
7507
diff
changeset
|
450 |
|
7270
7bbf428c2ead
(svn r10593) -Fix [FS#1038]: one could not remove locks that were build in a (very) old version of OpenTTD.
rubidium
parents:
7266
diff
changeset
|
451 |
if (GetTileOwner(tile) != OWNER_WATER && GetTileOwner(tile) != OWNER_NONE && !CheckTileOwnership(tile)) return CMD_ERROR; |
3940
8965b9bfaabc
(svn r5084) - Add owner attribute to canals and locks. This makes them more useful in multiplayer games, as before, anyone could delete any canal or lock tile. This doesn't affect whose ships can use whose canals or locks.
peter1138
parents:
3939
diff
changeset
|
452 |
|
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
453 |
if (flags & DC_EXEC) { |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
454 |
DoClearSquare(tile); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
455 |
MarkCanalsAndRiversAroundDirty(tile); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
456 |
} |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
457 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.clear_water); |
0 | 458 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
459 |
case WATER_TILE_COAST: { |
3636
a36cc46e754d
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3491
diff
changeset
|
460 |
Slope slope = GetTileSlope(tile, NULL); |
3439 | 461 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
462 |
/* Make sure no vehicle is on the 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
|
463 |
if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR; |
3439 | 464 |
|
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
465 |
if (flags & DC_EXEC) { |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
466 |
DoClearSquare(tile); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
467 |
MarkCanalsAndRiversAroundDirty(tile); |
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
468 |
} |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
469 |
if (IsSlopeWithOneCornerRaised(slope)) { |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
470 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.clear_water); |
3439 | 471 |
} else { |
8230
64f28fe2d5c8
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
rubidium
parents:
8224
diff
changeset
|
472 |
return CommandCost(EXPENSES_CONSTRUCTION, _price.clear_roughland); |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
473 |
} |
3439 | 474 |
} |
475 |
||
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
476 |
case WATER_TILE_LOCK: { |
3439 | 477 |
static const TileIndexDiffC _shiplift_tomiddle_offs[] = { |
478 |
{ 0, 0}, {0, 0}, { 0, 0}, {0, 0}, // middle |
|
479 |
{-1, 0}, {0, 1}, { 1, 0}, {0, -1}, // lower |
|
480 |
{ 1, 0}, {0, -1}, {-1, 0}, {0, 1}, // upper |
|
481 |
}; |
|
482 |
||
483 |
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED); |
|
484 |
if (_current_player == OWNER_WATER) return CMD_ERROR; |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
485 |
/* move to the middle tile.. */ |
3439 | 486 |
return RemoveShiplift(tile + ToTileIndexDiff(_shiplift_tomiddle_offs[GetSection(tile)]), flags); |
487 |
} |
|
488 |
||
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
489 |
case WATER_TILE_DEPOT: |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
490 |
if (flags & DC_AUTO) return_cmd_error(STR_2004_BUILDING_MUST_BE_DEMOLISHED); |
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
491 |
return RemoveShipDepot(tile, flags); |
3439 | 492 |
|
493 |
default: |
|
494 |
NOT_REACHED(); |
|
0 | 495 |
} |
496 |
} |
|
497 |
||
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
498 |
/** |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
499 |
* return true if a tile is a water tile wrt. a certain direction. |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
500 |
* |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
501 |
* @param tile The tile of interest. |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
502 |
* @param from The direction of interest. |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
503 |
* @return true iff the tile is water in the view of 'from'. |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
504 |
* |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
505 |
*/ |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
506 |
static bool IsWateredTile(TileIndex tile, Direction from) |
0 | 507 |
{ |
1214
8262981ac274
(svn r1718) Use the enum TileType as parameter/return type for [GS]etTileType() instead of plain int.
tron
parents:
1209
diff
changeset
|
508 |
switch (GetTileType(tile)) { |
3977
513433ebd092
(svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents:
3940
diff
changeset
|
509 |
case MP_WATER: |
9496
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
510 |
switch (GetWaterTileType(tile)) { |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
511 |
default: NOT_REACHED(); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
512 |
case WATER_TILE_DEPOT: case WATER_TILE_CLEAR: return true; |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
513 |
case WATER_TILE_LOCK: return DiagDirToAxis(GetLockDirection(tile)) == DiagDirToAxis(DirToDiagDir(from)); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
514 |
|
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
515 |
case WATER_TILE_COAST: |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
516 |
switch (GetTileSlope(tile, NULL)) { |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
517 |
case SLOPE_W: return (from == DIR_SE) || (from == DIR_E) || (from == DIR_NE); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
518 |
case SLOPE_S: return (from == DIR_NE) || (from == DIR_N) || (from == DIR_NW); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
519 |
case SLOPE_E: return (from == DIR_NW) || (from == DIR_W) || (from == DIR_SW); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
520 |
case SLOPE_N: return (from == DIR_SW) || (from == DIR_S) || (from == DIR_SE); |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
521 |
default: return false; |
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
522 |
} |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
523 |
} |
3977
513433ebd092
(svn r5155) - Remove the bridge branch merge (revision r5070)
tron
parents:
3940
diff
changeset
|
524 |
|
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
525 |
case MP_RAILWAY: |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
526 |
if (GetRailGroundType(tile) == RAIL_GROUND_WATER) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
527 |
assert(IsPlainRailTile(tile)); |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
528 |
switch (GetTileSlope(tile, NULL)) { |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
529 |
case SLOPE_W: return (from == DIR_SE) || (from == DIR_E) || (from == DIR_NE); |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
530 |
case SLOPE_S: return (from == DIR_NE) || (from == DIR_N) || (from == DIR_NW); |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
531 |
case SLOPE_E: return (from == DIR_NW) || (from == DIR_W) || (from == DIR_SW); |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
532 |
case SLOPE_N: return (from == DIR_SW) || (from == DIR_S) || (from == DIR_SE); |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
533 |
default: return false; |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
534 |
} |
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
535 |
} |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
536 |
return false; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
537 |
|
9721
b6441d53c221
(svn r13845) -Fix (r13838): When adding a WaterClass to oilrig station tiles, also make use of it.
frosch
parents:
9718
diff
changeset
|
538 |
case MP_STATION: |
9722
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
539 |
if (IsOilRig(tile)) { |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
540 |
/* Do not draw waterborders inside of industries. |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
541 |
* Note: There is no easy way to detect the industry of an oilrig tile. */ |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
542 |
TileIndex src_tile = tile + TileOffsByDir(from); |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
543 |
if ((IsTileType(src_tile, MP_STATION) && IsOilRig(src_tile)) || |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
544 |
(IsTileType(src_tile, MP_INDUSTRY))) return true; |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
545 |
|
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
546 |
return GetWaterClass(tile) != WATER_CLASS_INVALID; |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
547 |
} |
9721
b6441d53c221
(svn r13845) -Fix (r13838): When adding a WaterClass to oilrig station tiles, also make use of it.
frosch
parents:
9718
diff
changeset
|
548 |
return (IsDock(tile) && GetTileSlope(tile, NULL) == SLOPE_FLAT) || IsBuoy(tile); |
b6441d53c221
(svn r13845) -Fix (r13838): When adding a WaterClass to oilrig station tiles, also make use of it.
frosch
parents:
9718
diff
changeset
|
549 |
|
9722
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
550 |
case MP_INDUSTRY: { |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
551 |
/* Do not draw waterborders inside of industries. |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
552 |
* Note: There is no easy way to detect the industry of an oilrig tile. */ |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
553 |
TileIndex src_tile = tile + TileOffsByDir(from); |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
554 |
if ((IsTileType(src_tile, MP_STATION) && IsOilRig(src_tile)) || |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
555 |
(IsTileType(src_tile, MP_INDUSTRY) && GetIndustryIndex(src_tile) == GetIndustryIndex(tile))) return true; |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
556 |
|
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
557 |
return IsIndustryTileOnWater(tile); |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
558 |
} |
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
559 |
|
9496
22b9581a7973
(svn r13476) -Fix: draw canal borders for locks and when directly next to a aquaduct entrace but under the aqueduct.
rubidium
parents:
9490
diff
changeset
|
560 |
case MP_TUNNELBRIDGE: return GetTunnelBridgeTransportType(tile) == TRANSPORT_WATER && ReverseDiagDir(GetTunnelBridgeDirection(tile)) == DirToDiagDir(from); |
9722
614d4514d37f
(svn r13846) -Fix (r13838): Do not draw water borders inside of industries.
frosch
parents:
9721
diff
changeset
|
561 |
|
7507
36bb5300a128
(svn r11022) -Fix: the canal border determination did not take oil rigs into consideration.
rubidium
parents:
7497
diff
changeset
|
562 |
default: return false; |
1048 | 563 |
} |
0 | 564 |
} |
565 |
||
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
566 |
static void DrawWaterEdges(SpriteID base, TileIndex tile) |
0 | 567 |
{ |
568 |
uint wa; |
|
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
569 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
570 |
/* determine the edges around with water. */ |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
571 |
wa = IsWateredTile(TILE_ADDXY(tile, -1, 0), DIR_SW) << 0; |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
572 |
wa += IsWateredTile(TILE_ADDXY(tile, 0, 1), DIR_NW) << 1; |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
573 |
wa += IsWateredTile(TILE_ADDXY(tile, 1, 0), DIR_NE) << 2; |
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
574 |
wa += IsWateredTile(TILE_ADDXY(tile, 0, -1), DIR_SE) << 3; |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
575 |
|
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
576 |
if (!(wa & 1)) DrawGroundSprite(base, PAL_NONE); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
577 |
if (!(wa & 2)) DrawGroundSprite(base + 1, PAL_NONE); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
578 |
if (!(wa & 4)) DrawGroundSprite(base + 2, PAL_NONE); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
579 |
if (!(wa & 8)) DrawGroundSprite(base + 3, PAL_NONE); |
0 | 580 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
581 |
/* right corner */ |
2989 | 582 |
switch (wa & 0x03) { |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
583 |
case 0: DrawGroundSprite(base + 4, PAL_NONE); break; |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
584 |
case 3: if (!IsWateredTile(TILE_ADDXY(tile, -1, 1), DIR_W)) DrawGroundSprite(base + 8, PAL_NONE); break; |
2989 | 585 |
} |
0 | 586 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
587 |
/* bottom corner */ |
2989 | 588 |
switch (wa & 0x06) { |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
589 |
case 0: DrawGroundSprite(base + 5, PAL_NONE); break; |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
590 |
case 6: if (!IsWateredTile(TILE_ADDXY(tile, 1, 1), DIR_N)) DrawGroundSprite(base + 9, PAL_NONE); break; |
2989 | 591 |
} |
0 | 592 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
593 |
/* left corner */ |
2989 | 594 |
switch (wa & 0x0C) { |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
595 |
case 0: DrawGroundSprite(base + 6, PAL_NONE); break; |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
596 |
case 12: if (!IsWateredTile(TILE_ADDXY(tile, 1, -1), DIR_E)) DrawGroundSprite(base + 10, PAL_NONE); break; |
2989 | 597 |
} |
0 | 598 |
|
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
599 |
/* upper corner */ |
2989 | 600 |
switch (wa & 0x09) { |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
601 |
case 0: DrawGroundSprite(base + 7, PAL_NONE); break; |
8441
6e5c4deb2b0b
(svn r12011) -Fix [FS#1701]: Do not consider one-corner-raised-shores to be watered tiles from all sides.
frosch
parents:
8430
diff
changeset
|
602 |
case 9: if (!IsWateredTile(TILE_ADDXY(tile, -1, -1), DIR_S)) DrawGroundSprite(base + 11, PAL_NONE); break; |
2989 | 603 |
} |
0 | 604 |
} |
605 |
||
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:
8459
diff
changeset
|
606 |
/** Draw a plain sea water tile with no edges */ |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
607 |
static void DrawSeaWater(TileIndex tile) |
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:
8459
diff
changeset
|
608 |
{ |
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:
8459
diff
changeset
|
609 |
DrawGroundSprite(SPR_FLAT_WATER_TILE, PAL_NONE); |
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:
8459
diff
changeset
|
610 |
} |
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:
8459
diff
changeset
|
611 |
|
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
612 |
/** draw a canal styled water tile with dikes around */ |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
613 |
static void DrawCanalWater(TileIndex tile) |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
614 |
{ |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
615 |
DrawGroundSprite(SPR_FLAT_WATER_TILE, PAL_NONE); |
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:
8459
diff
changeset
|
616 |
|
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
617 |
/* Test for custom graphics, else use the default */ |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
618 |
SpriteID dikes_base = GetCanalSprite(CF_DIKES, tile); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
619 |
if (dikes_base == 0) dikes_base = SPR_CANAL_DIKES_BASE; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
620 |
|
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
621 |
DrawWaterEdges(dikes_base, tile); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
622 |
} |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
623 |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6181
diff
changeset
|
624 |
struct LocksDrawTileStruct { |
0 | 625 |
int8 delta_x, delta_y, delta_z; |
626 |
byte width, height, depth; |
|
627 |
SpriteID image; |
|
6248
e4a2ed7e5613
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents:
6181
diff
changeset
|
628 |
}; |
0 | 629 |
|
630 |
#include "table/water_land.h" |
|
631 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2261
diff
changeset
|
632 |
static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts, |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
633 |
SpriteID palette, uint base, bool draw_ground |
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
634 |
) |
0 | 635 |
{ |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
636 |
SpriteID image; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
637 |
SpriteID water_base = GetCanalSprite(CF_WATERSLOPE, ti->tile); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
638 |
SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile); |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
639 |
|
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
640 |
/* If no custom graphics, use defaults */ |
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7849
diff
changeset
|
641 |
if (water_base == 0) water_base = SPR_CANALS_BASE; |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
642 |
if (locks_base == 0) { |
7882
308cab08d2f3
(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.
rubidium
parents:
7849
diff
changeset
|
643 |
locks_base = SPR_SHIPLIFT_BASE; |
6583
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
644 |
} else { |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
645 |
/* If using custom graphics, ignore the variation on height */ |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
646 |
base = 0; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
647 |
} |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
648 |
|
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
649 |
image = wdts++->image; |
71d62b85d3ad
(svn r9797) -Feature: [NewGRF] Add action 1, 2 and 3 support for canals.
peter1138
parents:
6491
diff
changeset
|
650 |
if (image < 4) image += water_base; |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
651 |
if (draw_ground) DrawGroundSprite(image, PAL_NONE); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
652 |
|
8806
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8801
diff
changeset
|
653 |
/* End now if buildings are invisible */ |
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8801
diff
changeset
|
654 |
if (IsInvisibilitySet(TO_BUILDINGS)) return; |
4fe163e0b52a
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz
parents:
8801
diff
changeset
|
655 |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
656 |
for (; wdts->delta_x != 0x80; wdts++) { |
7333
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7270
diff
changeset
|
657 |
AddSortableSpriteToDraw(wdts->image + base + ((wdts->image < 24) ? locks_base : 0), palette, |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
658 |
ti->x + wdts->delta_x, ti->y + wdts->delta_y, |
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
659 |
wdts->width, wdts->height, |
7333
e48228e44be8
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents:
7270
diff
changeset
|
660 |
wdts->unk, ti->z + wdts->delta_z, |
7849
0a1c0af2c96c
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas
parents:
7797
diff
changeset
|
661 |
IsTransparencySet(TO_BUILDINGS)); |
0 | 662 |
} |
663 |
} |
|
664 |
||
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
665 |
static void DrawRiverWater(const TileInfo *ti) |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
666 |
{ |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
667 |
SpriteID image = SPR_FLAT_WATER_TILE; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
668 |
SpriteID edges_base = GetCanalSprite(CF_RIVER_EDGE, ti->tile); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
669 |
|
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
670 |
if (ti->tileh != SLOPE_FLAT) { |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
671 |
image = GetCanalSprite(CF_RIVER_SLOPE, ti->tile); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
672 |
if (image == 0) { |
8430
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
673 |
switch (ti->tileh) { |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
674 |
case SLOPE_NW: image = SPR_WATER_SLOPE_Y_DOWN; break; |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
675 |
case SLOPE_SW: image = SPR_WATER_SLOPE_X_UP; break; |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
676 |
case SLOPE_SE: image = SPR_WATER_SLOPE_Y_UP; break; |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
677 |
case SLOPE_NE: image = SPR_WATER_SLOPE_X_DOWN; break; |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
678 |
default: image = SPR_FLAT_WATER_TILE; break; |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
679 |
} |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
680 |
} else { |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
681 |
switch (ti->tileh) { |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
682 |
default: NOT_REACHED(); |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
683 |
case SLOPE_SE: edges_base += 12; break; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
684 |
case SLOPE_NE: image += 1; edges_base += 24; break; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
685 |
case SLOPE_SW: image += 2; edges_base += 36; break; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
686 |
case SLOPE_NW: image += 3; edges_base += 48; break; |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
687 |
} |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
688 |
} |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
689 |
} |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
690 |
|
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
691 |
DrawGroundSprite(image, PAL_NONE); |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
692 |
|
8430
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
693 |
/* Draw river edges if available. */ |
ecbc9ff4271d
(svn r12000) -Fix (r11926): If no river NewGRF is loaded, use sloped water from locks.
frosch
parents:
8414
diff
changeset
|
694 |
if (edges_base > 48) DrawWaterEdges(edges_base, ti->tile); |
8360
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
695 |
} |
3021c928de6c
(svn r11926) -Feature: Rivers. Graphics must be provided by NewGRF else rivers are drawn as canals. Rivers can currently only be placed with-in the scenario editor.
peter1138
parents:
8350
diff
changeset
|
696 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
697 |
void DrawShoreTile(Slope tileh) |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
698 |
{ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
699 |
/* Converts the enum Slope into an offset based on SPR_SHORE_BASE. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
700 |
* This allows to calculate the proper sprite to display for this Slope */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
701 |
static const byte tileh_to_shoresprite[32] = { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
702 |
0, 1, 2, 3, 4, 16, 6, 7, 8, 9, 17, 11, 12, 13, 14, 0, |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
703 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 10, 15, 0, |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
704 |
}; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
705 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
706 |
assert(!IsHalftileSlope(tileh)); // Halftile slopes need to get handled earlier. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
707 |
assert(tileh != SLOPE_FLAT); // Shore is never flat |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
708 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
709 |
assert((tileh != SLOPE_EW) && (tileh != SLOPE_NS)); // No suitable sprites for current flooding behaviour |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
710 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
711 |
DrawGroundSprite(SPR_SHORE_BASE + tileh_to_shoresprite[tileh], PAL_NONE); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
712 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
713 |
|
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
714 |
void DrawWaterClassGround(const TileInfo *ti) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
715 |
switch (GetWaterClass(ti->tile)) { |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
716 |
case WATER_CLASS_SEA: DrawSeaWater(ti->tile); break; |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
717 |
case WATER_CLASS_CANAL: DrawCanalWater(ti->tile); break; |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
718 |
case WATER_CLASS_RIVER: DrawRiverWater(ti); break; |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
719 |
default: NOT_REACHED(); |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
720 |
} |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
721 |
} |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
722 |
|
0 | 723 |
static void DrawTile_Water(TileInfo *ti) |
724 |
{ |
|
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
725 |
switch (GetWaterTileType(ti->tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
726 |
case WATER_TILE_CLEAR: |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
727 |
DrawWaterClassGround(ti); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
728 |
DrawBridgeMiddle(ti); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
729 |
break; |
0 | 730 |
|
8164
a448bc7576a5
(svn r11726) -Feature[newGRF]: Extend the Action 5, feature 0D usage. Patch by BigBB
belugas
parents:
8157
diff
changeset
|
731 |
case WATER_TILE_COAST: { |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
732 |
DrawShoreTile(ti->tileh); |
5385
3868f2e6db9b
(svn r7573) -Merged the bridge branch. Allows to build bridges of arbitrary rail/road combinations (including signals)
celestar
parents:
5210
diff
changeset
|
733 |
DrawBridgeMiddle(ti); |
8164
a448bc7576a5
(svn r11726) -Feature[newGRF]: Extend the Action 5, feature 0D usage. Patch by BigBB
belugas
parents:
8157
diff
changeset
|
734 |
} break; |
0 | 735 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
736 |
case WATER_TILE_LOCK: { |
3425
5411e9c8b6c8
(svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents:
3423
diff
changeset
|
737 |
const WaterDrawTileStruct *t = _shiplift_display_seq[GetSection(ti->tile)]; |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
738 |
DrawWaterStuff(ti, t, 0, ti->z > t[3].delta_y ? 24 : 0, true); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
739 |
} break; |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
740 |
|
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
741 |
case WATER_TILE_DEPOT: |
8496
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
742 |
DrawWaterClassGround(ti); |
30978fb53abd
(svn r12071) -Feature(ette): Draw river- and canal-edges under docks and shipdepots.
frosch
parents:
8495
diff
changeset
|
743 |
DrawWaterStuff(ti, _shipdepot_display_seq[GetSection(ti->tile)], PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile)), 0, false); |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
744 |
break; |
0 | 745 |
} |
746 |
} |
|
747 |
||
748 |
void DrawShipDepotSprite(int x, int y, int image) |
|
749 |
{ |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
750 |
const WaterDrawTileStruct *wdts = _shipdepot_display_seq[image]; |
0 | 751 |
|
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
752 |
DrawSprite(wdts++->image, PAL_NONE, x, y); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
753 |
|
1399
61e7c68e9da6
(svn r1903) Replace some casts and macro magic with proper typing, similar to r1902
tron
parents:
1363
diff
changeset
|
754 |
for (; wdts->delta_x != 0x80; wdts++) { |
0 | 755 |
Point pt = RemapCoords(wdts->delta_x, wdts->delta_y, wdts->delta_z); |
5668
36b39f4a9032
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents:
5587
diff
changeset
|
756 |
DrawSprite(wdts->image, PLAYER_SPRITE_COLOR(_local_player), x + pt.x, y + pt.y); |
0 | 757 |
} |
758 |
} |
|
759 |
||
760 |
||
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
761 |
static uint GetSlopeZ_Water(TileIndex tile, uint x, uint y) |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
762 |
{ |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
763 |
uint z; |
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
764 |
Slope tileh = GetTileSlope(tile, &z); |
4231
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
765 |
|
2823b3643862
(svn r5794) Pass the TileIndex plus x and y coordinates into GetSlopeZ_* instead of a TileInfo
tron
parents:
4171
diff
changeset
|
766 |
return z + GetPartialZ(x & 0xF, y & 0xF, tileh); |
0 | 767 |
} |
768 |
||
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
|
769 |
static Foundation GetFoundation_Water(TileIndex tile, Slope tileh) |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
770 |
{ |
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
|
771 |
return FOUNDATION_NONE; |
39 | 772 |
} |
773 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
774 |
static void GetAcceptedCargo_Water(TileIndex tile, AcceptedCargo ac) |
0 | 775 |
{ |
776 |
/* not used */ |
|
777 |
} |
|
778 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
779 |
static void GetTileDesc_Water(TileIndex tile, TileDesc *td) |
0 | 780 |
{ |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
781 |
switch (GetWaterTileType(tile)) { |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
782 |
case WATER_TILE_CLEAR: |
9517
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
783 |
switch (GetWaterClass(tile)) { |
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
784 |
case WATER_CLASS_SEA: td->str = STR_3804_WATER; break; |
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
785 |
case WATER_CLASS_CANAL: td->str = STR_LANDINFO_CANAL; break; |
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
786 |
case WATER_CLASS_RIVER: td->str = STR_LANDINFO_RIVER; break; |
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
787 |
default: assert(0); break; |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
788 |
} |
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
789 |
break; |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
790 |
case WATER_TILE_COAST: td->str = STR_3805_COAST_OR_RIVERBANK; break; |
9517
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
791 |
case WATER_TILE_LOCK : td->str = STR_LANDINFO_LOCK; break; |
8470042a618f
(svn r13513) -Codechange: Give proper message when building a river fails.
belugas
parents:
9496
diff
changeset
|
792 |
case WATER_TILE_DEPOT: td->str = STR_3806_SHIP_DEPOT; break; |
3402
812f9dc4baff
(svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents:
3373
diff
changeset
|
793 |
default: assert(0); break; |
2951 | 794 |
} |
0 | 795 |
|
9322
cf7dc39f9576
(svn r13206) -Feature(ette): Display all owners of a tile in the tile-info-window.
frosch
parents:
9321
diff
changeset
|
796 |
td->owner[0] = GetTileOwner(tile); |
0 | 797 |
} |
798 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
799 |
static void AnimateTile_Water(TileIndex tile) |
0 | 800 |
{ |
801 |
/* not used */ |
|
802 |
} |
|
803 |
||
804 |
||
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
805 |
/** |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
806 |
* Finds a vehicle to flood. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
807 |
* It does not find vehicles that are already crashed on bridges, i.e. flooded. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
808 |
* @param tile the tile where to find a vehicle to flood |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
809 |
* @return a vehicle too flood or NULL when there is no vehicle too flood. |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
810 |
*/ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
811 |
static Vehicle *FindFloodableVehicleOnTile(TileIndex tile) |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
812 |
{ |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
813 |
if (IsTileType(tile, MP_STATION) && IsAirport(tile)) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
814 |
const Station *st = GetStationByTile(tile); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
815 |
const AirportFTAClass *airport = st->Airport(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
816 |
for (uint x = 0; x < airport->size_x; x++) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
817 |
for (uint y = 0; y < airport->size_y; y++) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
818 |
tile = TILE_ADDXY(st->airport_tile, x, y); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
819 |
Vehicle *v = FindVehicleOnTileZ(tile, 1 + airport->delta_z); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
820 |
if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
821 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
822 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
823 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
824 |
/* No vehicle could be flooded on this airport anymore */ |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
825 |
return NULL; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
826 |
} |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
827 |
|
8014
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
828 |
/* if non-uniform stations are disabled, flood some train in this train station (if there is any) */ |
9413
7042a8ec3fa8
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents:
9354
diff
changeset
|
829 |
if (!_settings_game.station.nonuniform_stations && IsTileType(tile, MP_STATION) && GetStationType(tile) == STATION_RAIL) { |
8014
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
830 |
const Station *st = GetStationByTile(tile); |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
831 |
|
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
832 |
BEGIN_TILE_LOOP(t, st->trainst_w, st->trainst_h, st->train_tile) |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
833 |
if (st->TileBelongsToRailStation(t)) { |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
834 |
Vehicle *v = FindVehicleOnTileZ(t, 0); |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
835 |
if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v; |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
836 |
} |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
837 |
END_TILE_LOOP(t, st->trainst_w, st->trainst_h, st->train_tile) |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
838 |
|
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
839 |
return NULL; |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
840 |
} |
4a732fc3aade
(svn r11574) -Fix: flood train stations when there are no trains on border tiles too (when non-uniform stations are OFF)
smatz
parents:
7977
diff
changeset
|
841 |
|
5940
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
842 |
if (!IsBridgeTile(tile)) return FindVehicleOnTileZ(tile, 0); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
843 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
844 |
TileIndex end = GetOtherBridgeEnd(tile); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
845 |
byte z = GetBridgeHeight(tile); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
846 |
Vehicle *v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
847 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
848 |
/* check the start tile first since as this is closest to the water */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
849 |
v = FindVehicleOnTileZ(tile, z); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
850 |
if (v != NULL && (v->vehstatus & VS_CRASHED) == 0) return v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
851 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
852 |
/* check a vehicle in between both bridge heads */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
853 |
v = FindVehicleBetween(tile, end, z, true); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
854 |
if (v != NULL) return v; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
855 |
|
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
856 |
/* check the end tile last to give fleeing vehicles a chance to escape */ |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
857 |
v = FindVehicleOnTileZ(end, z); |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
858 |
return (v != NULL && (v->vehstatus & VS_CRASHED) == 0) ? v : NULL; |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
859 |
} |
3bb99a7ad58f
(svn r8593) -Fix (FS#564): bridges do not get destroyed when the bridge head gets flooded and there is a vehicle on the bridge. Original patch by KeeperofTheSoul.
rubidium
parents:
5905
diff
changeset
|
860 |
|
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
861 |
static void FloodVehicle(Vehicle *v) |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
862 |
{ |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
863 |
if (!(v->vehstatus & VS_CRASHED)) { |
168
79f9ed5b23e6
(svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents:
164
diff
changeset
|
864 |
uint16 pass = 0; |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
865 |
|
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
866 |
if (v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_AIRCRAFT) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
867 |
if (v->type == VEH_AIRCRAFT) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
868 |
/* Crashing aircraft are always at z_pos == 1, never on z_pos == 0, |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
869 |
* because that's always the shadow. Except for the heliport, because |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
870 |
* that station has a big z_offset for the aircraft. */ |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
871 |
if (!IsTileType(v->tile, MP_STATION) || !IsAirport(v->tile) || GetTileMaxZ(v->tile) != 0) return; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
872 |
const Station *st = GetStationByTile(v->tile); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
873 |
const AirportFTAClass *airport = st->Airport(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
874 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
875 |
if (v->z_pos != airport->delta_z + 1) return; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
876 |
} |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
877 |
|
7497
40e457c0a8ac
(svn r11011) -Fix [FS#1129]: GetFirstVehicleInChain did change the game state while being marked const.
rubidium
parents:
7494
diff
changeset
|
878 |
if (v->type != VEH_AIRCRAFT) v = v->First(); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
879 |
|
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
880 |
/* crash all wagons, and count passengers */ |
9321
61fd5b6e27ce
(svn r13205) -Codechange: Remove unnecessary code-style-buggering-up macro.
peter1138
parents:
9297
diff
changeset
|
881 |
for (Vehicle *u = v; u != NULL; u = u->Next()) { |
61fd5b6e27ce
(svn r13205) -Codechange: Remove unnecessary code-style-buggering-up macro.
peter1138
parents:
9297
diff
changeset
|
882 |
if (IsCargoInClass(u->cargo_type, CC_PASSENGERS)) pass += u->cargo.Count(); |
61fd5b6e27ce
(svn r13205) -Codechange: Remove unnecessary code-style-buggering-up macro.
peter1138
parents:
9297
diff
changeset
|
883 |
u->vehstatus |= VS_CRASHED; |
61fd5b6e27ce
(svn r13205) -Codechange: Remove unnecessary code-style-buggering-up macro.
peter1138
parents:
9297
diff
changeset
|
884 |
MarkSingleVehicleDirty(u); |
61fd5b6e27ce
(svn r13205) -Codechange: Remove unnecessary code-style-buggering-up macro.
peter1138
parents:
9297
diff
changeset
|
885 |
} |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
886 |
|
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
887 |
switch (v->type) { |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
888 |
default: NOT_REACHED(); |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
889 |
case VEH_TRAIN: |
9811
1942cbc26a51
(svn r13953) -Add [YAPP]: Free track reservations of crashed trains. (michi_cc)
rubidium
parents:
9722
diff
changeset
|
890 |
if (IsFrontEngine(v)) { |
1942cbc26a51
(svn r13953) -Add [YAPP]: Free track reservations of crashed trains. (michi_cc)
rubidium
parents:
9722
diff
changeset
|
891 |
pass += 4; // driver |
1942cbc26a51
(svn r13953) -Add [YAPP]: Free track reservations of crashed trains. (michi_cc)
rubidium
parents:
9722
diff
changeset
|
892 |
FreeTrainTrackReservation(v); |
1942cbc26a51
(svn r13953) -Add [YAPP]: Free track reservations of crashed trains. (michi_cc)
rubidium
parents:
9722
diff
changeset
|
893 |
} |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
894 |
v->u.rail.crash_anim_pos = 4000; // max 4440, disappear pretty fast |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
895 |
InvalidateWindowClassesData(WC_TRAINS_LIST, 0); |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
896 |
break; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
897 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
898 |
case VEH_ROAD: |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
899 |
if (IsRoadVehFront(v)) pass += 1; // driver |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
900 |
v->u.road.crashed_ctr = 2000; // max 2220, disappear pretty fast |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
901 |
InvalidateWindowClassesData(WC_ROADVEH_LIST, 0); |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
902 |
break; |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
903 |
|
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
904 |
case VEH_AIRCRAFT: |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
905 |
pass += 2; // driver |
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
906 |
v->u.air.crashed_counter = 9000; // max 10000, disappear pretty fast |
9297
1cb8d7bbdc8a
(svn r13165) -Codechange: replace some RebuildXXXList/ResortXXXList+InvalidateWindowXXX with InvalidateWindowXXXData.
rubidium
parents:
9234
diff
changeset
|
907 |
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0); |
6906
80503931fe10
(svn r10155) -Fix [FS#601]: Airports didn't flood when there are aircraft on the airport.
rubidium
parents:
6857
diff
changeset
|
908 |
break; |
6857
60130753e595
(svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents:
6683
diff
changeset
|
909 |
} |
2549 | 910 |
} else { |
168
79f9ed5b23e6
(svn r169) -Fix: move around sort-widgets a bit so it looks more natural
darkvater
parents:
164
diff
changeset
|
911 |
return; |
2549 | 912 |
} |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
913 |
|
8350
8979cccdbed2
(svn r11916) -Codechange: use enums from VehicleViewWindowWidgets instead of constants
smatz
parents:
8332
diff
changeset
|
914 |
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
915 |
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
916 |
|
534
306bc86eb23e
(svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents:
507
diff
changeset
|
917 |
SetDParam(0, pass); |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
918 |
AddNewsItem(STR_B006_FLOOD_VEHICLE_DESTROYED, |
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:
9224
diff
changeset
|
919 |
NS_ACCIDENT_VEHICLE, |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
920 |
v->index, |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
921 |
0); |
2549 | 922 |
CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE); |
923 |
SndPlayVehicleFx(SND_12_EXPLOSION, v); |
|
714
503e96f37d46
(svn r1166) Fix: [ 1040119 ] Flooded wagons in depots don't keep constantly exploding any more
dominik
parents:
679
diff
changeset
|
924 |
} |
149
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
925 |
} |
5f7d4b21df01
(svn r150) -Fix: [1010833] Turning on the magic bulldozer removes oil rigs
darkvater
parents:
43
diff
changeset
|
926 |
|
7731
0ddbab1c56bb
(svn r11266) -Documentation: Add a few comments. Parts of BigBB's work on shores
belugas
parents:
7545
diff
changeset
|
927 |
/** |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
928 |
* Returns the behaviour of a tile during flooding. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
929 |
* |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
930 |
* @return Behaviour of the tile |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
931 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
932 |
static FloodingBehaviour GetFloodingBehaviour(TileIndex tile) |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
933 |
{ |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
934 |
/* FLOOD_ACTIVE: 'single-corner-raised'-coast, sea, sea-shipdepots, sea-buoys, sea-docks (water part), rail with flooded halftile, sea-water-industries, sea-oilrigs |
8459 | 935 |
* FLOOD_DRYUP: coast with more than one corner raised, coast with rail-track, coast with trees |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
936 |
* FLOOD_PASSIVE: (not used) |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
937 |
* FLOOD_NONE: canals, rivers, everything else |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
938 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
939 |
switch (GetTileType(tile)) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
940 |
case MP_WATER: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
941 |
if (IsCoast(tile)) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
942 |
Slope tileh = GetTileSlope(tile, NULL); |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
943 |
return (IsSlopeWithOneCornerRaised(tileh) ? FLOOD_ACTIVE : FLOOD_DRYUP); |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
944 |
} else { |
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:
8459
diff
changeset
|
945 |
return (GetWaterClass(tile) == WATER_CLASS_SEA) ? FLOOD_ACTIVE : FLOOD_NONE; |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
946 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
947 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
948 |
case MP_RAILWAY: |
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
949 |
if (GetRailGroundType(tile) == RAIL_GROUND_WATER) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
950 |
return (IsSlopeWithOneCornerRaised(GetTileSlope(tile, NULL)) ? FLOOD_ACTIVE : FLOOD_DRYUP); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
951 |
} |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
952 |
return FLOOD_NONE; |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
953 |
|
8459 | 954 |
case MP_TREES: |
955 |
return (GetTreeGround(tile) == TREE_GROUND_SHORE ? FLOOD_DRYUP : FLOOD_NONE); |
|
956 |
||
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
957 |
case MP_STATION: |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
958 |
if (IsBuoy(tile) || (IsDock(tile) && GetTileSlope(tile, NULL) == SLOPE_FLAT) || IsOilRig(tile)) { |
8497
b986e12ddabe
(svn r12072) -Fix: Make docks at sea flood neighboured tiles.
frosch
parents:
8496
diff
changeset
|
959 |
return (GetWaterClass(tile) == WATER_CLASS_SEA ? FLOOD_ACTIVE : FLOOD_NONE); |
b986e12ddabe
(svn r12072) -Fix: Make docks at sea flood neighboured tiles.
frosch
parents:
8496
diff
changeset
|
960 |
} |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
961 |
return FLOOD_NONE; |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
962 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
963 |
case MP_INDUSTRY: |
9718
4b7468076d31
(svn r13838) -Codechange: Make industry tiles aware of WaterClasses.
frosch
parents:
9517
diff
changeset
|
964 |
return ((IsIndustryTileOnWater(tile) && GetWaterClass(tile) == WATER_CLASS_SEA) ? FLOOD_ACTIVE : FLOOD_NONE); |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
965 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
966 |
default: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
967 |
return FLOOD_NONE; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
968 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
969 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
970 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
971 |
/** |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
972 |
* Floods a tile. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
973 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
974 |
static void DoFloodTile(TileIndex target) |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
975 |
{ |
8684
80dc71578def
(svn r12350) -Fix [FS#1836](r11947): do not try ti flood water tile (performance increase)
glx
parents:
8616
diff
changeset
|
976 |
assert(!IsTileType(target, MP_WATER)); |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
977 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
978 |
bool flooded = false; // Will be set to true if something is changed. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
979 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
980 |
_current_player = OWNER_WATER; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
981 |
|
8459 | 982 |
Slope tileh = GetTileSlope(target, NULL); |
983 |
if (tileh != SLOPE_FLAT) { |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
984 |
/* make coast.. */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
985 |
switch (GetTileType(target)) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
986 |
case MP_RAILWAY: { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
987 |
if (!IsPlainRailTile(target)) break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
988 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
989 |
flooded = FloodHalftile(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
990 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
991 |
Vehicle *v = FindFloodableVehicleOnTile(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
992 |
if (v != NULL) FloodVehicle(v); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
993 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
994 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
995 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
996 |
|
8459 | 997 |
case MP_TREES: |
998 |
if (!IsSlopeWithOneCornerRaised(tileh)) { |
|
999 |
SetTreeGroundDensity(target, TREE_GROUND_SHORE, 3); |
|
1000 |
MarkTileDirtyByTile(target); |
|
1001 |
flooded = true; |
|
1002 |
break; |
|
1003 |
} |
|
1004 |
/* FALL THROUGH */ |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1005 |
case MP_CLEAR: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1006 |
if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1007 |
MakeShore(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1008 |
MarkTileDirtyByTile(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1009 |
flooded = true; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1010 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1011 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1012 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1013 |
default: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1014 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1015 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1016 |
} else { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1017 |
/* Flood vehicles */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1018 |
Vehicle *v = FindFloodableVehicleOnTile(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1019 |
if (v != NULL) FloodVehicle(v); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1020 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1021 |
/* flood flat tile */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1022 |
if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1023 |
MakeWater(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1024 |
MarkTileDirtyByTile(target); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1025 |
flooded = true; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1026 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1027 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1028 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1029 |
if (flooded) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1030 |
/* Mark surrounding canal tiles dirty too to avoid glitches */ |
8443
acae72eb6e52
(svn r12013) -Fix: When modifying watered tiles, mark neighboured canals and rivers dirty in more cases.
frosch
parents:
8441
diff
changeset
|
1031 |
MarkCanalsAndRiversAroundDirty(target); |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1032 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1033 |
/* update signals if needed */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1034 |
UpdateSignalsInBuffer(); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1035 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1036 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1037 |
_current_player = OWNER_NONE; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1038 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1039 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1040 |
/** |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1041 |
* Drys a tile up. |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1042 |
*/ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1043 |
static void DoDryUp(TileIndex tile) |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1044 |
{ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1045 |
_current_player = OWNER_WATER; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1046 |
|
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1047 |
switch (GetTileType(tile)) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1048 |
case MP_RAILWAY: |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1049 |
assert(IsPlainRailTile(tile)); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1050 |
assert(GetRailGroundType(tile) == RAIL_GROUND_WATER); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1051 |
|
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1052 |
RailGroundType new_ground; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1053 |
switch (GetTrackBits(tile)) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1054 |
case TRACK_BIT_UPPER: new_ground = RAIL_GROUND_FENCE_HORIZ1; break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1055 |
case TRACK_BIT_LOWER: new_ground = RAIL_GROUND_FENCE_HORIZ2; break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1056 |
case TRACK_BIT_LEFT: new_ground = RAIL_GROUND_FENCE_VERT1; break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1057 |
case TRACK_BIT_RIGHT: new_ground = RAIL_GROUND_FENCE_VERT2; break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1058 |
default: NOT_REACHED(); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1059 |
} |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1060 |
SetRailGroundType(tile, new_ground); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1061 |
MarkTileDirtyByTile(tile); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1062 |
break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1063 |
|
8459 | 1064 |
case MP_TREES: |
1065 |
SetTreeGroundDensity(tile, TREE_GROUND_GRASS, 3); |
|
1066 |
MarkTileDirtyByTile(tile); |
|
1067 |
break; |
|
1068 |
||
8414
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1069 |
case MP_WATER: |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1070 |
assert(IsCoast(tile)); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1071 |
|
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1072 |
if (CmdSucceeded(DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1073 |
MakeClear(tile, CLEAR_GRASS, 3); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1074 |
MarkTileDirtyByTile(tile); |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1075 |
} |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1076 |
break; |
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1077 |
|
488721240c47
(svn r11984) -Fix: Also draw corner shores under rail tracks.
frosch
parents:
8413
diff
changeset
|
1078 |
default: NOT_REACHED(); |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1079 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1080 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1081 |
_current_player = OWNER_NONE; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1082 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1083 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1084 |
/** |
7731
0ddbab1c56bb
(svn r11266) -Documentation: Add a few comments. Parts of BigBB's work on shores
belugas
parents:
7545
diff
changeset
|
1085 |
* Let a water tile floods its diagonal adjoining tiles |
7771
a900b80b48f2
(svn r11320) -Codechange: make lower halftiles at coast floodable. Patch by frosch.
rubidium
parents:
7758
diff
changeset
|
1086 |
* called from tunnelbridge_cmd, and by TileLoop_Industry() and TileLoop_Track() |
7731
0ddbab1c56bb
(svn r11266) -Documentation: Add a few comments. Parts of BigBB's work on shores
belugas
parents:
7545
diff
changeset
|
1087 |
* |
0ddbab1c56bb
(svn r11266) -Documentation: Add a few comments. Parts of BigBB's work on shores
belugas
parents:
7545
diff
changeset
|
1088 |
* @param tile the water/shore tile that floods |
0ddbab1c56bb
(svn r11266) -Documentation: Add a few comments. Parts of BigBB's work on shores
belugas
parents:
7545
diff
changeset
|
1089 |
*/ |
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
1090 |
void TileLoop_Water(TileIndex tile) |
0 | 1091 |
{ |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1092 |
switch (GetFloodingBehaviour(tile)) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1093 |
case FLOOD_ACTIVE: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1094 |
for (Direction dir = DIR_BEGIN; dir < DIR_END; dir++) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1095 |
TileIndex dest = AddTileIndexDiffCWrap(tile, TileIndexDiffCByDir(dir)); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1096 |
if (dest == INVALID_TILE) continue; |
8684
80dc71578def
(svn r12350) -Fix [FS#1836](r11947): do not try ti flood water tile (performance increase)
glx
parents:
8616
diff
changeset
|
1097 |
/* do not try to flood water tiles - increases performance a lot */ |
80dc71578def
(svn r12350) -Fix [FS#1836](r11947): do not try ti flood water tile (performance increase)
glx
parents:
8616
diff
changeset
|
1098 |
if (IsTileType(dest, MP_WATER)) continue; |
2989 | 1099 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1100 |
uint z_dest; |
8801
8c4b104b39ac
(svn r12541) -Codechange: Declare Slope enum as bit set, and remove some (then) unneeded casts.
frosch
parents:
8787
diff
changeset
|
1101 |
Slope slope_dest = GetFoundationSlope(dest, &z_dest) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1102 |
if (z_dest > 0) continue; |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
1103 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1104 |
if (!HasBit(_flood_from_dirs[slope_dest], ReverseDir(dir))) continue; |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
1105 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1106 |
DoFloodTile(dest); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1107 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1108 |
break; |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
1109 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1110 |
case FLOOD_DRYUP: { |
8801
8c4b104b39ac
(svn r12541) -Codechange: Declare Slope enum as bit set, and remove some (then) unneeded casts.
frosch
parents:
8787
diff
changeset
|
1111 |
Slope slope_here = GetFoundationSlope(tile, NULL) & ~SLOPE_HALFTILE_MASK & ~SLOPE_STEEP; |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1112 |
uint check_dirs = _flood_from_dirs[slope_here]; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1113 |
uint dir; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1114 |
FOR_EACH_SET_BIT(dir, check_dirs) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1115 |
TileIndex dest = AddTileIndexDiffCWrap(tile, TileIndexDiffCByDir((Direction)dir)); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1116 |
if (dest == INVALID_TILE) continue; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1117 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1118 |
FloodingBehaviour dest_behaviour = GetFloodingBehaviour(dest); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1119 |
if ((dest_behaviour == FLOOD_ACTIVE) || (dest_behaviour == FLOOD_PASSIVE)) return; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1120 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1121 |
DoDryUp(tile); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1122 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1123 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1124 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1125 |
default: return; |
2639 | 1126 |
} |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1127 |
} |
43
3b93861c5478
(svn r44) Fix: Coast line near edge of map and near oilrigs (Dribbel)
dominik
parents:
39
diff
changeset
|
1128 |
|
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1129 |
void ConvertGroundTilesIntoWaterTiles() |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1130 |
{ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1131 |
TileIndex tile; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1132 |
uint z; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1133 |
Slope slope; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1134 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1135 |
for (tile = 0; tile < MapSize(); ++tile) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1136 |
slope = GetTileSlope(tile, &z); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1137 |
if (IsTileType(tile, MP_CLEAR) && z == 0) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1138 |
/* Make both water for tiles at level 0 |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1139 |
* and make shore, as that looks much better |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1140 |
* during the generation. */ |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1141 |
switch (slope) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1142 |
case SLOPE_FLAT: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1143 |
MakeWater(tile); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1144 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1145 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1146 |
case SLOPE_N: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1147 |
case SLOPE_E: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1148 |
case SLOPE_S: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1149 |
case SLOPE_W: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1150 |
MakeShore(tile); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1151 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1152 |
|
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1153 |
default: |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1154 |
uint check_dirs = _flood_from_dirs[slope & ~SLOPE_STEEP]; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1155 |
uint dir; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1156 |
FOR_EACH_SET_BIT(dir, check_dirs) { |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1157 |
TileIndex dest = TILE_ADD(tile, TileOffsByDir((Direction)dir)); |
8801
8c4b104b39ac
(svn r12541) -Codechange: Declare Slope enum as bit set, and remove some (then) unneeded casts.
frosch
parents:
8787
diff
changeset
|
1158 |
Slope slope_dest = GetTileSlope(dest, NULL) & ~SLOPE_STEEP; |
8413
c7f3384330a3
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch
parents:
8386
diff
changeset
|
1159 |
if (slope_dest == SLOPE_FLAT || IsSlopeWithOneCornerRaised(slope_dest)) { |
8380
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1160 |
MakeShore(tile); |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1161 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1162 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1163 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1164 |
break; |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1165 |
} |
174326093caa
(svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents:
8368
diff
changeset
|
1166 |
} |
2639 | 1167 |
} |
0 | 1168 |
} |
1169 |
||
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
1170 |
static TrackStatus GetTileTrackStatus_Water(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) |
0 | 1171 |
{ |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
1172 |
static const byte coast_tracks[] = {0, 32, 4, 0, 16, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0}; |
4169
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
1173 |
|
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
1174 |
TrackBits ts; |
0d77cd42f6e6
(svn r5606) Replace some magic numbers by proper TrackBits enums and macros
tron
parents:
4101
diff
changeset
|
1175 |
|
2951 | 1176 |
if (mode != TRANSPORT_WATER) return 0; |
0 | 1177 |
|
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
1178 |
switch (GetWaterTileType(tile)) { |
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:
8459
diff
changeset
|
1179 |
case WATER_TILE_CLEAR: ts = (GetTileSlope(tile, NULL) == SLOPE_FLAT) ? TRACK_BIT_ALL : TRACK_BIT_NONE; break; |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
1180 |
case WATER_TILE_COAST: ts = (TrackBits)coast_tracks[GetTileSlope(tile, NULL) & 0xF]; break; |
9224
93528d9cb96d
(svn r13090) -Codechange: add functions for direct conversion from DiagDirection to Track and Trackbits
smatz
parents:
9111
diff
changeset
|
1181 |
case WATER_TILE_LOCK: ts = DiagDirToDiagTrackBits(GetLockDirection(tile)); break; |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
1182 |
case WATER_TILE_DEPOT: ts = AxisToTrackBits(GetShipDepotAxis(tile)); break; |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
1183 |
default: return 0; |
0 | 1184 |
} |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1185 |
if (TileX(tile) == 0) { |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
1186 |
/* NE border: remove tracks that connects NE tile edge */ |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1187 |
ts &= ~(TRACK_BIT_X | TRACK_BIT_UPPER | TRACK_BIT_RIGHT); |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1188 |
} |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1189 |
if (TileY(tile) == 0) { |
6432
226650eb2ef3
(svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents:
6427
diff
changeset
|
1190 |
/* NW border: remove tracks that connects NW tile edge */ |
3900
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1191 |
ts &= ~(TRACK_BIT_Y | TRACK_BIT_LEFT | TRACK_BIT_UPPER); |
2c84ed52709d
(svn r4987) Feature: Merged YAPF into trunk. Thanks to devs for continuous support and users for testing.
KUDr
parents:
3884
diff
changeset
|
1192 |
} |
8616
fd862a55c47f
(svn r12199) -Codechange: Remove magic around the results of GetTileTrackStatus().
frosch
parents:
8596
diff
changeset
|
1193 |
return CombineTrackStatus(TrackBitsToTrackdirBits(ts), TRACKDIR_BIT_NONE); |
0 | 1194 |
} |
1195 |
||
1977
37bbebf94434
(svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents:
1902
diff
changeset
|
1196 |
static void ClickTile_Water(TileIndex tile) |
0 | 1197 |
{ |
6181
2d0ac0598453
(svn r8953) -Codechange: make the names of enums of WaterTileType consistent with respect to RailTileType and RoadTileType.
rubidium
parents:
6160
diff
changeset
|
1198 |
if (GetWaterTileType(tile) == WATER_TILE_DEPOT) { |
3423
dab85d82708b
(svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents:
3422
diff
changeset
|
1199 |
TileIndex tile2 = GetOtherShipDepotTile(tile); |
193
0a7025304867
(svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents:
168
diff
changeset
|
1200 |
|
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
|
1201 |
ShowDepotWindow(tile < tile2 ? tile : tile2, VEH_SHIP); |
0 | 1202 |
} |
1203 |
} |
|
1204 |
||
2436
7d5df545bd5d
(svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents:
2261
diff
changeset
|
1205 |
static void ChangeTileOwner_Water(TileIndex tile, PlayerID old_player, PlayerID new_player) |
0 | 1206 |
{ |
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
|
1207 |
if (!IsTileOwner(tile, old_player)) return; |
0 | 1208 |
|
4848
45f848b46222
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4638
diff
changeset
|
1209 |
if (new_player != PLAYER_SPECTATOR) { |
1902 | 1210 |
SetTileOwner(tile, new_player); |
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
|
1211 |
return; |
0 | 1212 |
} |
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
|
1213 |
|
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
|
1214 |
/* Remove depot */ |
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
|
1215 |
if (IsShipDepot(tile)) DoCommand(tile, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); |
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
|
1216 |
|
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
|
1217 |
/* Set owner of canals and locks ... and also canal under dock there was before. |
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
|
1218 |
* Check if the new owner after removing depot isn't OWNER_WATER. */ |
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
|
1219 |
if (IsTileOwner(tile, old_player)) SetTileOwner(tile, OWNER_NONE); |
0 | 1220 |
} |
1221 |
||
8119
52b48108425a
(svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents:
8116
diff
changeset
|
1222 |
static VehicleEnterTileStatus VehicleEnter_Water(Vehicle *v, TileIndex tile, int x, int y) |
0 | 1223 |
{ |
5991
ec2eebfe86de
(svn r8698) -Codechange: enumify the returns of VehicleEnterTile
rubidium
parents:
5954
diff
changeset
|
1224 |
return VETSB_CONTINUE; |
0 | 1225 |
} |
1226 |
||
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1227 |
static CommandCost TerraformTile_Water(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:
7443
diff
changeset
|
1228 |
{ |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1229 |
/* Canals can't be terraformed */ |
7739
0b6f3da5c083
(svn r11276) -Codechange: be more consistent with naming of some accessors.
rubidium
parents:
7731
diff
changeset
|
1230 |
if (IsWaterTile(tile) && IsCanal(tile)) return_cmd_error(STR_MUST_DEMOLISH_CANAL_FIRST); |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1231 |
|
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1232 |
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:
7443
diff
changeset
|
1233 |
} |
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1234 |
|
0 | 1235 |
|
5587
167d9a91ef02
(svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents:
5584
diff
changeset
|
1236 |
extern const TileTypeProcs _tile_type_water_procs = { |
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:
4231
diff
changeset
|
1237 |
DrawTile_Water, /* draw_tile_proc */ |
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:
4231
diff
changeset
|
1238 |
GetSlopeZ_Water, /* get_slope_z_proc */ |
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:
4231
diff
changeset
|
1239 |
ClearTile_Water, /* clear_tile_proc */ |
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:
4231
diff
changeset
|
1240 |
GetAcceptedCargo_Water, /* get_accepted_cargo_proc */ |
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:
4231
diff
changeset
|
1241 |
GetTileDesc_Water, /* get_tile_desc_proc */ |
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:
4231
diff
changeset
|
1242 |
GetTileTrackStatus_Water, /* get_tile_track_status_proc */ |
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:
4231
diff
changeset
|
1243 |
ClickTile_Water, /* click_tile_proc */ |
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:
4231
diff
changeset
|
1244 |
AnimateTile_Water, /* animate_tile_proc */ |
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:
4231
diff
changeset
|
1245 |
TileLoop_Water, /* tile_loop_clear */ |
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:
4231
diff
changeset
|
1246 |
ChangeTileOwner_Water, /* change_tile_owner_clear */ |
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:
4231
diff
changeset
|
1247 |
NULL, /* get_produced_cargo_proc */ |
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:
4231
diff
changeset
|
1248 |
VehicleEnter_Water, /* 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
|
1249 |
GetFoundation_Water, /* get_foundation_proc */ |
7494
ab05bad37410
(svn r11005) -Codechange: move the tiletype specific terraforming checks to the functions for those tile types.
rubidium
parents:
7443
diff
changeset
|
1250 |
TerraformTile_Water, /* terraform_tile_proc */ |
0 | 1251 |
}; |