src/rail.h
author convert-repo
Mon, 07 Apr 2008 16:21:55 +0000
changeset 10076 dfd70e42c4ae
parent 9228 e7f3b7bf239a
child 10092 d5418dfd0eb8
permissions -rw-r--r--
update tags
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2049
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2049
diff changeset
     2
2232
0c63dce21e30 (svn r2752) -Doc: Added some doxygen stuff to rail.h. I'm gonna mess around with this file and wanted to get rid of this first
celestar
parents: 2186
diff changeset
     3
/** @file rail.h */
0c63dce21e30 (svn r2752) -Doc: Added some doxygen stuff to rail.h. I'm gonna mess around with this file and wanted to get rid of this first
celestar
parents: 2186
diff changeset
     4
1942
634961366cdc (svn r2448) General cleanup of rail related code, more to follow.
matthijs
parents:
diff changeset
     5
#ifndef RAIL_H
634961366cdc (svn r2448) General cleanup of rail related code, more to follow.
matthijs
parents:
diff changeset
     6
#define RAIL_H
634961366cdc (svn r2448) General cleanup of rail related code, more to follow.
matthijs
parents:
diff changeset
     7
8597
87f03bc9c8e4 (svn r11662) -Codechange: move some rail types/related functions around.
rubidium
parents: 8596
diff changeset
     8
#include "rail_type.h"
87f03bc9c8e4 (svn r11662) -Codechange: move some rail types/related functions around.
rubidium
parents: 8596
diff changeset
     9
#include "track_type.h"
8615
6b91ca653bad (svn r11680) -Codechange: refactor more out of openttd.h and functions.h.
rubidium
parents: 8612
diff changeset
    10
#include "vehicle_type.h"
8619
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8617
diff changeset
    11
#include "gfx_type.h"
8609
8c0c3e9dd6a0 (svn r11674) -Codechange: refactor some functions out of macros.h into more logical locations.
rubidium
parents: 8604
diff changeset
    12
#include "core/bitmath_func.hpp"
8619
c2434269c3eb (svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents: 8617
diff changeset
    13
#include "economy_func.h"
8634
5ffca02f9115 (svn r11700) -Codechange: reduce the amount of unnecessary includes.
rubidium
parents: 8619
diff changeset
    14
#include "tile_cmd.h"
1942
634961366cdc (svn r2448) General cleanup of rail related code, more to follow.
matthijs
parents:
diff changeset
    15
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    16
/** This struct contains all the info that is needed to draw and construct tracks.
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    17
 */
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6488
diff changeset
    18
struct RailtypeInfo {
2274
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    19
	/** Struct containing the main sprites. @note not all sprites are listed, but only
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    20
	 *  the ones used directly in the code */
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    21
	struct {
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    22
		SpriteID track_y;      ///< single piece of rail in Y direction, with ground
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    23
		SpriteID track_ns;     ///< two pieces of rail in North and South corner (East-West direction)
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    24
		SpriteID ground;       ///< ground sprite for a 3-way switch
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    25
		SpriteID single_y;     ///< single piece of rail in Y direction, without ground
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    26
		SpriteID single_x;     ///< single piece of rail in X direction
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    27
		SpriteID single_n;     ///< single piece of rail in the northern corner
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    28
		SpriteID single_s;     ///< single piece of rail in the southern corner
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    29
		SpriteID single_e;     ///< single piece of rail in the eastern corner
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    30
		SpriteID single_w;     ///< single piece of rail in the western corner
2511
0a81d9ca79bc (svn r3037) Don't deduce the sprites for tunnels and level crossings from magic numbers, but fetch them from the central rail info array. This is a preparation step for electrified rails
tron
parents: 2472
diff changeset
    31
		SpriteID crossing;     ///< level crossing, rail in X direction
0a81d9ca79bc (svn r3037) Don't deduce the sprites for tunnels and level crossings from magic numbers, but fetch them from the central rail info array. This is a preparation step for electrified rails
tron
parents: 2472
diff changeset
    32
		SpriteID tunnel;       ///< tunnel sprites base
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    33
	} base_sprites;
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    34
2274
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    35
	/** struct containing the sprites for the rail GUI. @note only sprites referred to
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    36
	 * directly in the code are listed */
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    37
	struct {
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    38
		SpriteID build_ns_rail;      ///< button for building single rail in N-S direction
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    39
		SpriteID build_x_rail;       ///< button for building single rail in X direction
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    40
		SpriteID build_ew_rail;      ///< button for building single rail in E-W direction
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    41
		SpriteID build_y_rail;       ///< button for building single rail in Y direction
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    42
		SpriteID auto_rail;          ///< button for the autorail construction
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    43
		SpriteID build_depot;        ///< button for building depots
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    44
		SpriteID build_tunnel;       ///< button for building a tunnel
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    45
		SpriteID convert_rail;       ///< button for converting rail
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    46
	} gui_sprites;
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    47
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    48
	struct {
7892
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    49
		CursorID rail_ns;    ///< Cursor for building rail in N-S direction
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    50
		CursorID rail_swne;  ///< Cursor for building rail in X direction
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    51
		CursorID rail_ew;    ///< Cursor for building rail in E-W direction
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    52
		CursorID rail_nwse;  ///< Cursor for building rail in Y direction
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    53
		CursorID autorail;   ///< Cursor for autorail tool
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    54
		CursorID depot;      ///< Cursor for building a depot
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    55
		CursorID tunnel;     ///< Cursor for building a tunnel
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
    56
		CursorID convert;    ///< Cursor for converting track
2514
8887b1f005c7 (svn r3040) Don't deduce the cursor sprites when building rails from magic numbers, but fetch them from the central rail info array.
tron
parents: 2511
diff changeset
    57
	} cursor;
8887b1f005c7 (svn r3040) Don't deduce the cursor sprites when building rails from magic numbers, but fetch them from the central rail info array.
tron
parents: 2511
diff changeset
    58
8887b1f005c7 (svn r3040) Don't deduce the cursor sprites when building rails from magic numbers, but fetch them from the central rail info array.
tron
parents: 2511
diff changeset
    59
	struct {
2274
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    60
		StringID toolbar_caption;
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    61
	} strings;
d94004c14b6c (svn r2798) -Codechange: Unified the rail toolbars into one that is modified by
celestar
parents: 2254
diff changeset
    62
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    63
	/** sprite number difference between a piece of track on a snowy ground and the corresponding one on normal ground */
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    64
	SpriteID snow_offset;
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    65
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
    66
	/** bitmask to the OTHER railtypes on which an engine of THIS railtype generates power */
8732
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
    67
	RailTypes powered_railtypes;
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
    68
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
    69
	/** bitmask to the OTHER railtypes on which an engine of THIS railtype can physically travel */
8732
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
    70
	RailTypes compatible_railtypes;
2254
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    71
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    72
	/**
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    73
	 * Offset between the current railtype and normal rail. This means that:<p>
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    74
	 * 1) All the sprites in a railset MUST be in the same order. This order
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    75
	 *    is determined by normal rail. Check sprites 1005 and following for this order<p>
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    76
	 * 2) The position where the railtype is loaded must always be the same, otherwise
6916
e87d54a598ea (svn r9556) -Documentation: doxygen and comment-style changes. 'R', 'S'.. The end of the preliminary work is near
belugas
parents: 6574
diff changeset
    77
	 *    the offset will fail.
2254
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    78
	 * @note: Something more flexible might be desirable in the future.
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    79
	 */
72f8883ff3ac (svn r2774) -Codechange: Removed TRACKTYPE_SPRITE_PITCH globally and replaced it by a member of RailtypeInfo
celestar
parents: 2236
diff changeset
    80
	SpriteID total_offset;
2536
8c4e298f4886 (svn r3065) -Codechange/Add: Modified the bridge drawing code so that the basic offset is read from the RailTypeInfo struct. This is (hopefully) the last DrawTile change on the way to electrified railways. While being at it, de-mystified the function a bit and added some asserts.
celestar
parents: 2520
diff changeset
    81
8c4e298f4886 (svn r3065) -Codechange/Add: Modified the bridge drawing code so that the basic offset is read from the RailTypeInfo struct. This is (hopefully) the last DrawTile change on the way to electrified railways. While being at it, de-mystified the function a bit and added some asserts.
celestar
parents: 2520
diff changeset
    82
	/**
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4041
diff changeset
    83
	 * Bridge offset
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4041
diff changeset
    84
	 */
2536
8c4e298f4886 (svn r3065) -Codechange/Add: Modified the bridge drawing code so that the basic offset is read from the RailTypeInfo struct. This is (hopefully) the last DrawTile change on the way to electrified railways. While being at it, de-mystified the function a bit and added some asserts.
celestar
parents: 2520
diff changeset
    85
	SpriteID bridge_offset;
3503
425903b204fa (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset.
peter1138
parents: 3500
diff changeset
    86
425903b204fa (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset.
peter1138
parents: 3500
diff changeset
    87
	/**
425903b204fa (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset.
peter1138
parents: 3500
diff changeset
    88
	 * Offset to add to ground sprite when drawing custom waypoints / stations
425903b204fa (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset.
peter1138
parents: 3500
diff changeset
    89
	 */
425903b204fa (svn r4354) [Elrail][NewGRF] Codechange: Drawing of custom waypoints with custom ground sprites used the index of the rail type as an offset. With the introduction of elrails this offset is incorrect, so instead there is now a lookup table within the RailTypeInfo struct to explicitly list the offset.
peter1138
parents: 3500
diff changeset
    90
	byte custom_ground_offset;
8665
758b79eb2bdc (svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
peter1138
parents: 8634
diff changeset
    91
758b79eb2bdc (svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
peter1138
parents: 8634
diff changeset
    92
	/**
758b79eb2bdc (svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
peter1138
parents: 8634
diff changeset
    93
	 * Multiplier for curve maximum speed advantage
758b79eb2bdc (svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
peter1138
parents: 8634
diff changeset
    94
	 */
758b79eb2bdc (svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
peter1138
parents: 8634
diff changeset
    95
	byte curve_speed;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6488
diff changeset
    96
};
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    97
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
    98
1967
c57192f4c121 (svn r2473) - Add: VehicleMayEnterTile(), which checks if the tile owner of a tile is correct for a vehicle to enter it. Based upon glx's code.
matthijs
parents: 1950
diff changeset
    99
/**
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   100
 * Returns a pointer to the Railtype information for a given railtype
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   101
 * @param railtype the rail type which the information is requested for
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   102
 * @return The pointer to the RailtypeInfo
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   103
 */
2236
55f4d7353f52 (svn r2756) Renamed railtypes into _railtypes
ludde
parents: 2233
diff changeset
   104
static inline const RailtypeInfo *GetRailTypeInfo(RailType railtype)
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   105
{
6488
07bbbafd4f70 (svn r8912) -Codechange: coding style cleanup and moving of two global externs into the functions that use them.
rubidium
parents: 6482
diff changeset
   106
	extern RailtypeInfo _railtypes[RAILTYPE_END];
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   107
	assert(railtype < RAILTYPE_END);
2236
55f4d7353f52 (svn r2756) Renamed railtypes into _railtypes
ludde
parents: 2233
diff changeset
   108
	return &_railtypes[railtype];
2233
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   109
}
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   110
146e2e405ec1 (svn r2753) -Codechange: Introduced a new struct "RailtypeInfo" to store rail type specific information. Begun populating it with a bunch of sprites, more to come later. This should result in cleaner, more compact code which allows easy introduction of new railtypes.
celestar
parents: 2232
diff changeset
   111
/**
2006
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   112
 * Checks if an engine of the given RailType can drive on a tile with a given
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   113
 * RailType. This would normally just be an equality check, but for electric
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   114
 * rails (which also support non-electric engines).
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   115
 * @return Whether the engine can drive on this tile.
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   116
 * @param  enginetype The RailType of the engine we are considering.
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   117
 * @param  tiletype   The RailType of the tile we are considering.
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   118
 */
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   119
static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype)
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   120
{
8424
4a488a90ccab (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 8329
diff changeset
   121
	return HasBit(GetRailTypeInfo(enginetype)->compatible_railtypes, tiletype);
2006
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   122
}
324916f22a8a (svn r2514) - Codechange: [NPF] Move the checking of railtype into a funciton IsCompatibleRail().
matthijs
parents: 2001
diff changeset
   123
7892
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   124
/**
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   125
 * Checks if an engine of the given RailType got power on a tile with a given
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   126
 * RailType. This would normally just be an equality check, but for electric
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   127
 * rails (which also support non-electric engines).
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   128
 * @return Whether the engine got power on this tile.
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   129
 * @param  enginetype The RailType of the engine we are considering.
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   130
 * @param  tiletype   The RailType of the tile we are considering.
af0701f35fdf (svn r10765) -Documentation [FS#1100]: of rail.h. Based on a patch by Progman.
rubidium
parents: 7831
diff changeset
   131
 */
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   132
static inline bool HasPowerOnRail(RailType enginetype, RailType tiletype)
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   133
{
8424
4a488a90ccab (svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13
parents: 8329
diff changeset
   134
	return HasBit(GetRailTypeInfo(enginetype)->powered_railtypes, tiletype);
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   135
}
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   136
8226
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   137
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   138
extern int _railtype_cost_multiplier[RAILTYPE_END];
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   139
extern const int _default_railtype_cost_multiplier[RAILTYPE_END];
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   140
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   141
/**
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   142
 * Returns the cost of building the specified railtype.
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   143
 * @param railtype The railtype being built.
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   144
 * @return The cost multiplier.
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   145
 */
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   146
static inline Money RailBuildCost(RailType railtype)
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   147
{
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   148
	assert(railtype < RAILTYPE_END);
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   149
	return (_price.build_rail * _railtype_cost_multiplier[railtype]) >> 3;
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   150
}
c66a40c8e9bf (svn r11265) -Feature: Make more advanced rail types more expensive to build.
maedhros
parents: 8199
diff changeset
   151
8539
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   152
/**
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   153
 * Calculates the cost of rail conversion
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   154
 * @param from The railtype we are converting from
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   155
 * @param to   The railtype we are converting to
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   156
 * @return Cost per TrackBit
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   157
 */
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   158
static inline Money RailConvertCost(RailType from, RailType to)
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   159
{
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   160
	/* rail -> el. rail
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   161
	 * calculate the price as 5 / 4 of (cost build el. rail) - (cost build rail)
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   162
	 * (the price of workers to get to place is that 1/4)
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   163
	 */
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   164
	if (HasPowerOnRail(from, to)) {
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   165
		return ((RailBuildCost(to) - RailBuildCost(from)) * 5) >> 2;
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   166
	}
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   167
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   168
	/* el. rail -> rail
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   169
	 * calculate the price as 1 / 4 of (cost build el. rail) - (cost build rail)
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   170
	 * (the price of workers is 1 / 4 + price of copper sold to a recycle center)
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   171
	 */
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   172
	if (HasPowerOnRail(to, from)) {
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   173
		return (RailBuildCost(from) - RailBuildCost(to)) >> 2;
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   174
	}
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   175
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   176
	/* make the price the same as remove + build new type */
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   177
	return RailBuildCost(to) + _price.remove_rail;
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   178
}
0ba5701ab630 (svn r11603) -Fix [FS#1481]: make price for railtype conversion more realistic
smatz
parents: 8425
diff changeset
   179
8035
a0200ced6d9f (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
parents: 7892
diff changeset
   180
void *UpdateTrainPowerProc(Vehicle *v, void *data);
2520
75eb66d6e371 (svn r3049) Replace byte/int/uint by RailType where appropriate
tron
parents: 2514
diff changeset
   181
void DrawTrainDepotSprite(int x, int y, int image, RailType railtype);
75eb66d6e371 (svn r3049) Replace byte/int/uint by RailType where appropriate
tron
parents: 2514
diff changeset
   182
void DrawDefaultWaypointSprite(int x, int y, RailType railtype);
8734
b7fc8c6fd379 (svn r11802) -Fix [FS#716]: do not crash trains when leaving depot to a very long track
smatz
parents: 8732
diff changeset
   183
void *EnsureNoTrainOnTrackProc(Vehicle *v, void *data);
9208
f376b12acb1b (svn r12386) -Fix [FS#1841](r2428): train could break apart when reversed while partially in a depot
smatz
parents: 8734
diff changeset
   184
int TicksToLeaveDepot(const Vehicle *v);
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   185
9228
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   186
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   187
/**
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   188
 * Test if a rail type has catenary
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   189
 * @param rt Rail type to test
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   190
 */
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   191
static inline bool HasCatenary(RailType rt)
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   192
{
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   193
	return rt == RAILTYPE_ELECTRIC;
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   194
}
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   195
e7f3b7bf239a (svn r12410) -Codechange: abstract out the test for catenary on electric rails
peter1138
parents: 9208
diff changeset
   196
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   197
/**
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   198
 * Draws overhead wires and pylons for electric railways.
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   199
 * @param ti The TileInfo struct of the tile being drawn
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   200
 * @see DrawCatenaryRailway
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   201
 */
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   202
void DrawCatenary(const TileInfo *ti);
8097
68eefbb4ff46 (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
parents: 8035
diff changeset
   203
void DrawCatenaryOnTunnel(const TileInfo *ti);
3355
a653b8e47f27 (svn r4150) -Feature: Merged elrails into trunk. Thanks to Tron for lots of code and proofreading, thanks to peter1138 for another lot of code and ideas.
celestar
parents: 3267
diff changeset
   204
7831
5dded9b03500 (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: 7651
diff changeset
   205
Foundation GetRailFoundation(Slope tileh, TrackBits bits);
5116
2a33a74925c5 (svn r7195) -Feature: [FS#297, optional elrails] New patches/vehicles option 'disable electrified railways'.
KUDr
parents: 4549
diff changeset
   206
2a33a74925c5 (svn r7195) -Feature: [FS#297, optional elrails] New patches/vehicles option 'disable electrified railways'.
KUDr
parents: 4549
diff changeset
   207
int32 SettingsDisableElrail(int32 p1); ///< _patches.disable_elrail callback
2a33a74925c5 (svn r7195) -Feature: [FS#297, optional elrails] New patches/vehicles option 'disable electrified railways'.
KUDr
parents: 4549
diff changeset
   208
8732
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   209
/**
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   210
 * Finds out if a Player has a certain railtype available
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   211
 * @param p Player in question
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   212
 * @param railtype requested RailType
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   213
 * @return true if player has requested RailType available
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   214
 */
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   215
bool HasRailtypeAvail(const PlayerID p, const RailType railtype);
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   216
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   217
/**
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   218
 * Validate functions for rail building.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   219
 * @param rail the railtype to check.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   220
 * @return true if the current player may build the rail.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   221
 */
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   222
bool ValParamRailtype(const RailType rail);
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   223
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   224
/**
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   225
 * Returns the "best" railtype a player can build.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   226
 * As the AI doesn't know what the BEST one is, we have our own priority list
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   227
 * here. When adding new railtypes, modify this function
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   228
 * @param p the player "in action"
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   229
 * @return The "best" railtype a player has available
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   230
 */
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   231
RailType GetBestRailtype(const PlayerID p);
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   232
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   233
/**
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   234
 * Get the rail types the given player can build.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   235
 * @param p the player to get the rail types for.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   236
 * @return the rail types.
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   237
 */
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   238
RailTypes GetPlayerRailtypes(const PlayerID p);
b18f578f7c16 (svn r11800) -Codechange: move some functions to a more logical location + some type safety.
rubidium
parents: 8707
diff changeset
   239
2536
8c4e298f4886 (svn r3065) -Codechange/Add: Modified the bridge drawing code so that the basic offset is read from the RailTypeInfo struct. This is (hopefully) the last DrawTile change on the way to electrified railways. While being at it, de-mystified the function a bit and added some asserts.
celestar
parents: 2520
diff changeset
   240
#endif /* RAIL_H */