annotate src/rail.h @ 8123:c26c28875749 draft

(svn r11684) -Codechange: split gfx.h in a type and functional header.
author rubidium <rubidium@openttd.org>
date Sun, 23 Dec 2007 10:56:02 +0000
parents 89722abcfd91
children 60ea0f95de91
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
1 /* $Id$ */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
2
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
3 /** @file rail.h */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
4
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
5 #ifndef RAIL_H
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
6 #define RAIL_H
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
7
8101
b222582555cb (svn r11662) -Codechange: move some rail types/related functions around.
rubidium <rubidium@openttd.org>
parents: 8100
diff changeset
8 #include "rail_type.h"
b222582555cb (svn r11662) -Codechange: move some rail types/related functions around.
rubidium <rubidium@openttd.org>
parents: 8100
diff changeset
9 #include "track_type.h"
8119
b6ec923e9fa8 (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium <rubidium@openttd.org>
parents: 8116
diff changeset
10 #include "vehicle_type.h"
8123
c26c28875749 (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium <rubidium@openttd.org>
parents: 8121
diff changeset
11 #include "gfx_type.h"
8113
c35412099303 (svn r11674) -Codechange: refactor some functions out of macros.h into more logical locations.
rubidium <rubidium@openttd.org>
parents: 8108
diff changeset
12 #include "core/bitmath_func.hpp"
8123
c26c28875749 (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium <rubidium@openttd.org>
parents: 8121
diff changeset
13 #include "economy_func.h"
7730
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
14 #include "variables.h"
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
15
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
16 /** This struct contains all the info that is needed to draw and construct tracks.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
17 */
6248
0789677a15a0 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents: 6162
diff changeset
18 struct RailtypeInfo {
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
19 /** Struct containing the main sprites. @note not all sprites are listed, but only
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
20 * the ones used directly in the code */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
21 struct {
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
22 SpriteID track_y; ///< single piece of rail in Y direction, with ground
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
23 SpriteID track_ns; ///< two pieces of rail in North and South corner (East-West direction)
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
24 SpriteID ground; ///< ground sprite for a 3-way switch
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
25 SpriteID single_y; ///< single piece of rail in Y direction, without ground
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
26 SpriteID single_x; ///< single piece of rail in X direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
27 SpriteID single_n; ///< single piece of rail in the northern corner
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
28 SpriteID single_s; ///< single piece of rail in the southern corner
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
29 SpriteID single_e; ///< single piece of rail in the eastern corner
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
30 SpriteID single_w; ///< single piece of rail in the western corner
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
31 SpriteID crossing; ///< level crossing, rail in X direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
32 SpriteID tunnel; ///< tunnel sprites base
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
33 } base_sprites;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
34
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
35 /** struct containing the sprites for the rail GUI. @note only sprites referred to
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
36 * directly in the code are listed */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
37 struct {
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
38 SpriteID build_ns_rail; ///< button for building single rail in N-S direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
39 SpriteID build_x_rail; ///< button for building single rail in X direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
40 SpriteID build_ew_rail; ///< button for building single rail in E-W direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
41 SpriteID build_y_rail; ///< button for building single rail in Y direction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
42 SpriteID auto_rail; ///< button for the autorail construction
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
43 SpriteID build_depot; ///< button for building depots
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
44 SpriteID build_tunnel; ///< button for building a tunnel
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
45 SpriteID convert_rail; ///< button for converting rail
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
46 } gui_sprites;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
47
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
48 struct {
7396
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
49 CursorID rail_ns; ///< Cursor for building rail in N-S direction
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
50 CursorID rail_swne; ///< Cursor for building rail in X direction
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
51 CursorID rail_ew; ///< Cursor for building rail in E-W direction
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
52 CursorID rail_nwse; ///< Cursor for building rail in Y direction
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
53 CursorID autorail; ///< Cursor for autorail tool
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
54 CursorID depot; ///< Cursor for building a depot
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
55 CursorID tunnel; ///< Cursor for building a tunnel
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
56 CursorID convert; ///< Cursor for converting track
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
57 } cursor;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
58
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
59 struct {
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
60 StringID toolbar_caption;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
61 } strings;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
62
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
63 /** sprite number difference between a piece of track on a snowy ground and the corresponding one on normal ground */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
64 SpriteID snow_offset;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
65
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
66 /** bitmask to the OTHER railtypes on which an engine of THIS railtype generates power */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
67 RailTypeMask powered_railtypes;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
68
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
69 /** bitmask to the OTHER railtypes on which an engine of THIS railtype can physically travel */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
70 RailTypeMask compatible_railtypes;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
71
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
72 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
73 * Offset between the current railtype and normal rail. This means that:<p>
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
74 * 1) All the sprites in a railset MUST be in the same order. This order
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
75 * is determined by normal rail. Check sprites 1005 and following for this order<p>
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
76 * 2) The position where the railtype is loaded must always be the same, otherwise
6420
080aae477331 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents: 6248
diff changeset
77 * the offset will fail.
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
78 * @note: Something more flexible might be desirable in the future.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
79 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
80 SpriteID total_offset;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
81
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
82 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
83 * Bridge offset
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
84 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
85 SpriteID bridge_offset;
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
86
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
87 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
88 * Offset to add to ground sprite when drawing custom waypoints / stations
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
89 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
90 byte custom_ground_offset;
6248
0789677a15a0 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents: 6162
diff changeset
91 };
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
92
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
93
6420
080aae477331 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents: 6248
diff changeset
94 /** these are the maximums used for updating signal blocks, and checking if a depot is in a pbs block */
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
95 enum {
6420
080aae477331 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents: 6248
diff changeset
96 NUM_SSD_ENTRY = 256, ///< max amount of blocks
080aae477331 (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas <belugas@openttd.org>
parents: 6248
diff changeset
97 NUM_SSD_STACK = 32, ///< max amount of blocks to check recursively
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
98 };
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
99
7396
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
100 /*
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
101 * Functions to map tracks to the corresponding bits in the signal
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
102 * presence/status bytes in the map. You should not use these directly, but
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
103 * wrapper functions below instead. XXX: Which are these?
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
104 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
105
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
106 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
107 * Maps a trackdir to the bit that stores its status in the map arrays, in the
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
108 * direction along with the trackdir.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
109 */
6162
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
110 static inline byte SignalAlongTrackdir(Trackdir trackdir)
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
111 {
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
112 extern const byte _signal_along_trackdir[TRACKDIR_END];
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
113 return _signal_along_trackdir[trackdir];
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
114 }
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
115
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
116 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
117 * Maps a trackdir to the bit that stores its status in the map arrays, in the
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
118 * direction against the trackdir.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
119 */
6162
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
120 static inline byte SignalAgainstTrackdir(Trackdir trackdir)
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
121 {
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
122 extern const byte _signal_against_trackdir[TRACKDIR_END];
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
123 return _signal_against_trackdir[trackdir];
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
124 }
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
125
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
126 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
127 * Maps a Track to the bits that store the status of the two signals that can
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
128 * be present on the given track.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
129 */
6162
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
130 static inline byte SignalOnTrack(Track track)
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
131 {
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
132 extern const byte _signal_on_track[TRACK_END];
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
133 return _signal_on_track[track];
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
134 }
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
135
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
136
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
137
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
138 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
139 * Returns a pointer to the Railtype information for a given railtype
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
140 * @param railtype the rail type which the information is requested for
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
141 * @return The pointer to the RailtypeInfo
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
142 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
143 static inline const RailtypeInfo *GetRailTypeInfo(RailType railtype)
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
144 {
6162
d7bcc0708818 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium <rubidium@openttd.org>
parents: 6156
diff changeset
145 extern RailtypeInfo _railtypes[RAILTYPE_END];
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
146 assert(railtype < RAILTYPE_END);
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
147 return &_railtypes[railtype];
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
148 }
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
149
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
150 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
151 * Checks if an engine of the given RailType can drive on a tile with a given
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
152 * RailType. This would normally just be an equality check, but for electric
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
153 * rails (which also support non-electric engines).
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
154 * @return Whether the engine can drive on this tile.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
155 * @param enginetype The RailType of the engine we are considering.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
156 * @param tiletype The RailType of the tile we are considering.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
157 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
158 static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype)
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
159 {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7833
diff changeset
160 return HasBit(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype);
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
161 }
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
162
7396
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
163 /**
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
164 * Checks if an engine of the given RailType got power on a tile with a given
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
165 * RailType. This would normally just be an equality check, but for electric
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
166 * rails (which also support non-electric engines).
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
167 * @return Whether the engine got power on this tile.
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
168 * @param enginetype The RailType of the engine we are considering.
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
169 * @param tiletype The RailType of the tile we are considering.
57ff3c1c55de (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium <rubidium@openttd.org>
parents: 7335
diff changeset
170 */
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
171 static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype)
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
172 {
7928
4e8dfd103163 (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents: 7833
diff changeset
173 return HasBit(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype);
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
174 }
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
175
7730
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
176
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
177 extern int _railtype_cost_multiplier[RAILTYPE_END];
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
178 extern const int _default_railtype_cost_multiplier[RAILTYPE_END];
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
179
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
180 /**
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
181 * Returns the cost of building the specified railtype.
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
182 * @param railtype The railtype being built.
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
183 * @return The cost multiplier.
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
184 */
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
185 static inline Money RailBuildCost(RailType railtype)
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
186 {
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
187 assert(railtype < RAILTYPE_END);
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
188 return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3;
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
189 }
b2ca338938ed (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros <maedhros@openttd.org>
parents: 7703
diff changeset
190
8043
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
191 /**
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
192 * Calculates the cost of rail conversion
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
193 * @param from The railtype we are converting from
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
194 * @param to The railtype we are converting to
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
195 * @return Cost per TrackBit
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
196 */
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
197 static inline Money RailConvertCost(RailType from, RailType to)
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
198 {
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
199 /* rail -> el. rail
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
200 * calculate the price as 5 / 4 of (cost build el. rail) - (cost build rail)
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
201 * (the price of workers to get to place is that 1/4)
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
202 */
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
203 if (HasPowerOnRail(from, to)) {
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
204 return ((RailBuildCost(to) - RailBuildCost(from)) * 5) >> 2;
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
205 }
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
206
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
207 /* el. rail -> rail
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
208 * calculate the price as 1 / 4 of (cost build el. rail) - (cost build rail)
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
209 * (the price of workers is 1 / 4 + price of copper sold to a recycle center)
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
210 */
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
211 if (HasPowerOnRail(to, from)) {
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
212 return (RailBuildCost(from) - RailBuildCost(to)) >> 2;
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
213 }
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
214
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
215 /* make the price the same as remove + build new type */
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
216 return RailBuildCost(to) + _price.remove_rail;
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
217 }
ec0309fb003a (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz <smatz@openttd.org>
parents: 7929
diff changeset
218
7539
2695ac2e8baa (svn r11059) -Fix [FS#1182]: inconsistency between Rail<->ElRail conversions of different kinds of rail containing tiles (normal rail, stations, depots, etc). Patch by SmatZ.
rubidium <rubidium@openttd.org>
parents: 7396
diff changeset
219 void *UpdateTrainPowerProc(Vehicle *v, void *data);
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
220 void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
221 void DrawDefaultWaypointSprite(int x, int y, RailType railtype);
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
222
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
223 /**
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
224 * Draws overhead wires and pylons for electric railways.
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
225 * @param ti The TileInfo struct of the tile being drawn
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
226 * @see DrawCatenaryRailway
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
227 */
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
228 void DrawCatenary(const TileInfo *ti);
7601
b5ee57f72673 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium <rubidium@openttd.org>
parents: 7539
diff changeset
229 void DrawCatenaryOnTunnel(const TileInfo *ti);
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
230
7335
0090d1c6b978 (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 <rubidium@openttd.org>
parents: 7155
diff changeset
231 Foundation GetRailFoundation(Slope tileh, TrackBits bits);
5475
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
232
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
233 int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
234
eabf4b86aed6 (svn r7759) -Merge: makefile rewrite. This merge features:
rubidium <rubidium@openttd.org>
parents:
diff changeset
235 #endif /* RAIL_H */