diff options
author | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2007-01-02 19:19:48 +0000 |
commit | 66bbf336c6af7353ef0aeed58002c46543b30635 (patch) | |
tree | ad4a63860df2626b22f77e7dac712e958bea54cb /src/newgrf_station.h | |
parent | ccc0a3f4dbf58c005b22341ac8874252924690cd (diff) | |
download | openttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz |
(svn r7759) -Merge: makefile rewrite. This merge features:
- A proper ./configure, so everything needs to be configured only once, not for every make.
- Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies.
- A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC.
- Proper support for OSX universal binaries.
- Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files.
- Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files.
Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy.
Diffstat (limited to 'src/newgrf_station.h')
-rw-r--r-- | src/newgrf_station.h | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/newgrf_station.h b/src/newgrf_station.h new file mode 100644 index 000000000..a133fb3d7 --- /dev/null +++ b/src/newgrf_station.h @@ -0,0 +1,128 @@ +/* $Id$ */ + +/** @file newgrf_station.h Header file for NewGRF stations */ + +#ifndef NEWGRF_STATION_H +#define NEWGRF_STATION_H + +#include "engine.h" +#include "newgrf_cargo.h" + +typedef enum { + STAT_CLASS_DFLT, ///< Default station class. + STAT_CLASS_WAYP, ///< Waypoint class. + STAT_CLASS_MAX = 32, ///< Maximum number of classes. +} StationClassID; + +/* Station layout for given dimensions - it is a two-dimensional array + * where index is computed as (x * platforms) + platform. */ +typedef byte *StationLayout; + +typedef struct StationSpec { + uint32 grfid; ///< ID of GRF file station belongs to. + int localidx; ///< Index within GRF file of station. + + bool allocated; ///< Flag whether this station has been added to a station class list + + StationClassID sclass; ///< The class to which this spec belongs. + StringID name; ///< Name of this station. + + /** + * Bitmask of number of platforms available for the station. + * 0..6 correpsond to 1..7, while bit 7 corresponds to >7 platforms. + */ + byte disallowed_platforms; + /** + * Bitmask of platform lengths available for the station. + * 0..6 correpsond to 1..7, while bit 7 corresponds to >7 tiles long. + */ + byte disallowed_lengths; + + /** Number of tile layouts. + * A minimum of 8 is required is required for stations. + * 0-1 = plain platform + * 2-3 = platform with building + * 4-5 = platform with roof, left side + * 6-7 = platform with roof, right side + */ + uint tiles; + DrawTileSprites *renderdata; ///< Array of tile layouts. + bool copied_renderdata; + + /** Cargo threshold for choosing between little and lots of cargo + * @note little/lots are equivalent to the moving/loading states for vehicles + */ + uint16 cargo_threshold; + + uint32 cargo_triggers; ///< Bitmask of cargo types which cause trigger re-randomizing + + byte callbackmask; ///< Bitmask of callbacks to use, @see newgrf_callbacks.h + + byte flags; ///< Bitmask of flags, bit 0: use different sprite set; bit 1: divide cargo about by station size + + byte pylons; ///< Bitmask of base tiles (0 - 7) which should contain elrail pylons + byte wires; ///< Bitmask of base tiles (0 - 7) which should contain elrail wires + byte blocked; ///< Bitmask of base tiles (0 - 7) which are blocked to trains + + byte lengths; + byte *platforms; + StationLayout **layouts; + bool copied_layouts; + + /** + * NUM_GLOBAL_CID sprite groups. + * Used for obtaining the sprite offset of custom sprites, and for + * evaluating callbacks. + */ + const struct SpriteGroup *spritegroup[NUM_GLOBAL_CID]; +} StationSpec; + +/** + * Struct containing information relating to station classes. + */ +typedef struct StationClass { + uint32 id; ///< ID of this class, e.g. 'DFLT', 'WAYP', etc. + StringID name; ///< Name of this class. + uint stations; ///< Number of stations in this class. + StationSpec **spec; ///< Array of station specifications. +} StationClass; + +void ResetStationClasses(void); +StationClassID AllocateStationClass(uint32 cls); +void SetStationClassName(StationClassID sclass, StringID name); +StringID GetStationClassName(StationClassID sclass); +StringID *BuildStationClassDropdown(void); + +uint GetNumStationClasses(void); +uint GetNumCustomStations(StationClassID sclass); + +void SetCustomStationSpec(StationSpec *statspec); +const StationSpec *GetCustomStationSpec(StationClassID sclass, uint station); +const StationSpec *GetCustomStationSpecByGrf(uint32 grfid, byte localidx); + +/* Evaluate a tile's position within a station, and return the result a bitstuffed format. */ +uint32 GetPlatformInfo(Axis axis, byte tile, int platforms, int length, int x, int y, bool centred); + +/* Get sprite offset for a given custom station and station structure (may be + * NULL - that means we are in a build dialog). The station structure is used + * for variational sprite groups. */ +SpriteID GetCustomStationRelocation(const StationSpec *statspec, const Station *st, TileIndex tile); +SpriteID GetCustomStationGroundRelocation(const StationSpec *statspec, const Station *st, TileIndex tile); +uint16 GetStationCallback(uint16 callback, uint32 param1, uint32 param2, const StationSpec *statspec, const Station *st, TileIndex tile); + +/* Check if a rail station tile is traversable. */ +bool IsStationTileBlocked(TileIndex tile); + +/* Check if a rail station tile is electrifiable. */ +bool IsStationTileElectrifiable(TileIndex tile); + +/* Allocate a StationSpec to a Station. This is called once per build operation. */ +int AllocateSpecToStation(const StationSpec *statspec, Station *st, bool exec); + +/* Deallocate a StationSpec from a Station. Called when removing a single station tile. */ +void DeallocateSpecFromStation(Station* st, byte specindex); + +/* Draw representation of a station tile for GUI purposes. */ +bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID sclass, uint station); + +#endif /* NEWGRF_STATION_H */ |