summaryrefslogtreecommitdiff
path: root/src/newgrf_station.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
committerrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
commit66bbf336c6af7353ef0aeed58002c46543b30635 (patch)
treead4a63860df2626b22f77e7dac712e958bea54cb /src/newgrf_station.h
parentccc0a3f4dbf58c005b22341ac8874252924690cd (diff)
downloadopenttd-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.h128
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 */