Mercurial > hg > openttd
changeset 8139:db99ba38abc0 draft
(svn r11701) -Codechange: removal unnecessary inclusions of map.h (and split map.h).
line wrap: on
line diff
--- a/src/ai/default/default.cpp +++ b/src/ai/default/default.cpp @@ -6,7 +6,6 @@ #include "../../bridge_map.h" #include "../../tile_cmd.h" #include "../../landscape.h" -#include "../../map.h" #include "../../rail_map.h" #include "../../road_map.h" #include "../../roadveh.h"
--- a/src/ai/trolly/build.cpp +++ b/src/ai/trolly/build.cpp @@ -3,7 +3,6 @@ #include "../../stdafx.h" #include "../../openttd.h" #include "../../debug.h" -#include "../../map.h" #include "../../road_map.h" #include "../../vehicle.h" #include "../../command_func.h"
--- a/src/ai/trolly/pathfinder.cpp +++ b/src/ai/trolly/pathfinder.cpp @@ -4,7 +4,6 @@ #include "../../openttd.h" #include "../../bridge_map.h" #include "../../debug.h" -#include "../../map.h" #include "../../command_func.h" #include "trolly.h" #include "../../depot.h"
--- a/src/ai/trolly/shared.cpp +++ b/src/ai/trolly/shared.cpp @@ -3,7 +3,7 @@ #include "../../stdafx.h" #include "../../openttd.h" #include "../../debug.h" -#include "../../map.h" +#include "../../map_func.h" #include "trolly.h" #include "../../vehicle.h"
--- a/src/ai/trolly/trolly.cpp +++ b/src/ai/trolly/trolly.cpp @@ -23,7 +23,6 @@ #include "../../road_map.h" #include "../../station_map.h" #include "table/strings.h" -#include "../../map.h" #include "../../command_func.h" #include "trolly.h" #include "../../town.h"
--- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -10,7 +10,6 @@ #include "landscape.h" #include "station_map.h" #include "table/strings.h" -#include "map.h" #include "vehicle.h" #include "timetable.h" #include "depot.h"
--- a/src/aircraft_gui.cpp +++ b/src/aircraft_gui.cpp @@ -8,7 +8,6 @@ #include "debug.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "gui.h" #include "vehicle.h" #include "engine.h"
--- a/src/airport.cpp +++ b/src/airport.cpp @@ -5,7 +5,6 @@ #include "stdafx.h" #include "openttd.h" #include "debug.h" -#include "map.h" #include "airport.h" #include "variables.h" #include "airport_movement.h"
--- a/src/airport.h +++ b/src/airport.h @@ -6,7 +6,7 @@ #define AIRPORT_H #include "direction_type.h" -#include "map.h" +#include "map_type.h" enum {MAX_TERMINALS = 10}; enum {MAX_HELIPADS = 4};
--- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -6,7 +6,6 @@ #include "openttd.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "window_gui.h" #include "gui.h" #include "station_gui.h"
--- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -5,7 +5,6 @@ #include "stdafx.h" #include "openttd.h" #include "table/strings.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "viewport.h" @@ -16,6 +15,7 @@ #include "bridge.h" #include "strings_func.h" #include "window_func.h" +#include "map_func.h" static struct BridgeData { uint8 last_size;
--- a/src/bridge_map.h +++ b/src/bridge_map.h @@ -6,7 +6,6 @@ #define BRIDGE_MAP_H #include "direction_func.h" -#include "map.h" #include "rail_type.h" #include "road_map.h"
--- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -7,7 +7,6 @@ #include "clear_map.h" #include "rail_map.h" #include "table/strings.h" -#include "map.h" #include "player.h" #include "viewport.h" #include "command_func.h"
--- a/src/command.cpp +++ b/src/command.cpp @@ -6,7 +6,6 @@ #include "openttd.h" #include "table/strings.h" #include "landscape.h" -#include "map.h" #include "tile_map.h" #include "gui.h" #include "command_func.h"
--- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -29,6 +29,7 @@ #include "viewport.h" #include "window_func.h" #include "functions.h" +#include "map_func.h" // ** scriptfile handling ** // static FILE *_script_file;
--- a/src/depot.cpp +++ b/src/depot.cpp @@ -7,7 +7,6 @@ #include "vehicle.h" #include "depot.h" #include "landscape.h" -#include "map.h" #include "table/strings.h" #include "saveload.h" #include "order.h"
--- a/src/disaster_cmd.cpp +++ b/src/disaster_cmd.cpp @@ -23,7 +23,6 @@ #include "industry_map.h" #include "station_map.h" #include "table/strings.h" -#include "map.h" #include "vehicle.h" #include "command_func.h" #include "tile_cmd.h"
--- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -6,7 +6,6 @@ #include "openttd.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "tile_map.h" #include "station.h" #include "gui.h" @@ -18,6 +17,7 @@ #include "variables.h" #include "water.h" #include "window_func.h" +#include "vehicle.h" static void ShowBuildDockStationPicker(); static void ShowBuildDocksDepotPicker();
--- a/src/economy.cpp +++ b/src/economy.cpp @@ -8,7 +8,6 @@ #include "landscape.h" #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "news.h" #include "player.h" #include "station.h"
--- a/src/engine.h +++ b/src/engine.h @@ -123,7 +123,7 @@ PlayerByte preview_player; byte preview_wait; byte player_avail; - VehicleType type; ///< type, ie VEH_ROAD, VEH_TRAIN, etc. Same as in vehicle.h + VehicleType type; ///< type, ie VEH_ROAD, VEH_TRAIN, etc. }; /**
--- a/src/functions.h +++ b/src/functions.h @@ -9,7 +9,6 @@ #include "command_type.h" #include "openttd.h" #include "tile_cmd.h" -#include "map.h" /* clear_land.cpp */ void DrawHillyLandTile(const TileInfo *ti); @@ -24,10 +23,6 @@ bool CheckOwnership(Owner owner); bool CheckTileOwnership(TileIndex tile); -/* openttd.cpp */ -static inline TileIndex RandomTileSeed(uint32 r) { return TILE_MASK(r); } -static inline TileIndex RandomTile() { return TILE_MASK(Random()); } - /* texteff.cpp */ void AddAnimatedTile(TileIndex tile); void DeleteAnimatedTile(TileIndex tile);
--- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -19,7 +19,7 @@ #include "heightmap.h" #include "date.h" #include "viewport.h" -#include "map.h" +#include "map_func.h" void GenerateClearTile(); void GenerateIndustries();
--- a/src/industry.h +++ b/src/industry.h @@ -10,7 +10,7 @@ #include "newgrf_storage.h" #include "cargo_type.h" #include "economy_type.h" -#include "map.h" +#include "map_type.h" #include "slope_type.h" typedef uint16 IndustryGfx;
--- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -9,7 +9,6 @@ #include "station_map.h" #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "train.h" #include "landscape.h" #include "viewport.h"
--- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -7,7 +7,6 @@ #include "debug.h" #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "textbuf_gui.h" @@ -23,6 +22,7 @@ #include "newgrf_text.h" #include "date.h" #include "strings_func.h" +#include "map_func.h" bool _ignore_restrictions;
--- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -6,7 +6,6 @@ #include "heightmap.h" #include "clear_map.h" #include "date.h" -#include "map.h" #include "player.h" #include "spritecache.h" #include "table/sprites.h"
--- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -10,7 +10,6 @@ #include "station.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "window_func.h"
--- a/src/map.cpp +++ b/src/map.cpp @@ -3,13 +3,12 @@ /** @file map.cpp */ #include "stdafx.h" -#include "openttd.h" #include "debug.h" -#include "map.h" #include "direction_func.h" #include "core/bitmath_func.hpp" #include "core/alloc_func.hpp" #include "core/math_func.hpp" +#include "map_func.h" #if defined(_MSC_VER) && _MSC_VER >= 1400 /* VStudio 2005 is stupid! */ /* Why the hell is that not in all MSVC headers?? */
deleted file mode 100644 --- a/src/map.h +++ /dev/null @@ -1,413 +0,0 @@ -/* $Id$ */ - -/** @file map.h */ - -#ifndef MAP_H -#define MAP_H - -#include "stdafx.h" -#include "direction_func.h" -#include "tile_type.h" - -extern uint _map_tile_mask; - -/** - * 'Wraps' the given tile to it is within the map. It does - * this by masking the 'high' bits of. - * @param x the tile to 'wrap' - */ - -#define TILE_MASK(x) ((x) & _map_tile_mask) -/** - * Asserts when the tile is outside of the map. - * @param x the tile to check - */ -#define TILE_ASSERT(x) assert(TILE_MASK(x) == (x)); - -/** - * Data that is stored per tile. Also used TileExtended for this. - * Look at docs/landscape.html for the exact meaning of the members. - */ -struct Tile { - byte type_height; ///< The type (bits 4..7) and height of the northern corner - byte m1; ///< Primarily used for ownership information - uint16 m2; ///< Primarily used for indices to towns, industries and stations - byte m3; ///< General purpose - byte m4; ///< General purpose - byte m5; ///< General purpose - byte m6; ///< Primarily used for bridges and rainforest/desert -}; - -/** - * Data that is stored per tile. Also used Tile for this. - * Look at docs/landscape.html for the exact meaning of the members. - */ -struct TileExtended { - byte m7; ///< Primarily used for newgrf support -}; - -/** - * Pointer to the tile-array. - * - * This variable points to the tile-array which contains the tiles of - * the map. - */ -extern Tile *_m; - -/** - * Pointer to the extended tile-array. - * - * This variable points to the extended tile-array which contains the tiles - * of the map. - */ -extern TileExtended *_me; - -/** - * Allocate a new map with the given size. - */ -void AllocateMap(uint size_x, uint size_y); - -/** - * Logarithm of the map size along the X side. - * @note try to avoid using this one - * @return 2^"return value" == MapSizeX() - */ -static inline uint MapLogX() -{ - extern uint _map_log_x; - return _map_log_x; -} - -/** - * Get the size of the map along the X - * @return the number of tiles along the X of the map - */ -static inline uint MapSizeX() -{ - extern uint _map_size_x; - return _map_size_x; -} - -/** - * Get the size of the map along the Y - * @return the number of tiles along the Y of the map - */ -static inline uint MapSizeY() -{ - extern uint _map_size_y; - return _map_size_y; -} - -/** - * Get the size of the map - * @return the number of tiles of the map - */ -static inline uint MapSize() -{ - extern uint _map_size; - return _map_size; -} - -/** - * Gets the maximum X coordinate within the map, including MP_VOID - * @return the maximum X coordinate - */ -static inline uint MapMaxX() -{ - return MapSizeX() - 1; -} - -/** - * Gets the maximum X coordinate within the map, including MP_VOID - * @return the maximum X coordinate - */ -static inline uint MapMaxY() -{ - return MapSizeY() - 1; -} - -/** - * Scales relative to the number of tiles. - */ -uint ScaleByMapSize(uint); - -/** - * Scale relative to the circumference of the map. - */ -uint ScaleByMapSize1D(uint); - -/** - * An offset value between to tiles. - * - * This value is used fro the difference between - * to tiles. It can be added to a tileindex to get - * the resulting tileindex of the start tile applied - * with this saved difference. - * - * @see TileDiffXY(int, int) - */ -typedef int32 TileIndexDiff; - -/** - * Returns the TileIndex of a coordinate. - * - * @param x The x coordinate of the tile - * @param y The y coordinate of the tile - * @return The TileIndex calculated by the coordinate - */ -static inline TileIndex TileXY(uint x, uint y) -{ - return (y * MapSizeX()) + x; -} - -/** - * Calculates an offset for the given coordinate(-offset). - * - * This function calculate an offset value which can be added to an - * #TileIndex. The coordinates can be negative. - * - * @param x The offset in x direction - * @param y The offset in y direction - * @return The resulting offset value of the given coordinate - * @see ToTileIndexDiff(TileIndexDiffC) - */ -static inline TileIndexDiff TileDiffXY(int x, int y) -{ - /* Multiplication gives much better optimization on MSVC than shifting. - * 0 << shift isn't optimized to 0 properly. - * Typically x and y are constants, and then this doesn't result - * in any actual multiplication in the assembly code.. */ - return (y * MapSizeX()) + x; -} - -static inline TileIndex TileVirtXY(uint x, uint y) -{ - return (y >> 4 << MapLogX()) + (x >> 4); -} - - -/** - * Get the X component of a tile - * @param tile the tile to get the X component of - * @return the X component - */ -static inline uint TileX(TileIndex tile) -{ - return tile & MapMaxX(); -} - -/** - * Get the Y component of a tile - * @param tile the tile to get the Y component of - * @return the Y component - */ -static inline uint TileY(TileIndex tile) -{ - return tile >> MapLogX(); -} - -/** - * A pair-construct of a TileIndexDiff. - * - * This can be used to save the difference between to - * tiles as a pair of x and y value. - */ -struct TileIndexDiffC { - int16 x; ///< The x value of the coordinate - int16 y; ///< The y value of the coordinate -}; - -/** - * Return the offset between to tiles from a TileIndexDiffC struct. - * - * This function works like #TileDiffXY(int, int) and returns the - * difference between two tiles. - * - * @param tidc The coordinate of the offset as TileIndexDiffC - * @return The difference between two tiles. - * @see TileDiffXY(int, int) - */ -static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) -{ - return (tidc.y << MapLogX()) + tidc.x; -} - - -#ifndef _DEBUG - /** - * Adds to tiles together. - * - * @param x One tile - * @param y An other tile to add - * @return The resulting tile(index) - */ - #define TILE_ADD(x,y) ((x) + (y)) -#else - extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add, - const char *exp, const char *file, int line); - #define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__)) -#endif - -/** - * Adds a given offset to a tile. - * - * @param tile The tile to add an offset on it - * @param x The x offset to add to the tile - * @param y The y offset to add to the tile - */ -#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TileDiffXY(x, y)) - -/** - * Adds an offset to a tile and check if we are still on the map. - */ -uint TileAddWrap(TileIndex tile, int addx, int addy); - -/** - * Returns the TileIndexDiffC offset from a DiagDirection. - * - * @param dir The given direction - * @return The offset as TileIndexDiffC value - */ -static inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir) -{ - extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; - - assert(IsValidDiagDirection(dir)); - return _tileoffs_by_diagdir[dir]; -} -/** - * Add a TileIndexDiffC to a TileIndex and returns the new one. - * - * Returns tile + the diff given in diff. If the result tile would end up - * outside of the map, INVALID_TILE is returned instead. - * - * @param tile The base tile to add the offset on - * @param diff The offset to add on the tile - * @return The resulting TileIndex - */ -static inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC diff) -{ - int x = TileX(tile) + diff.x; - int y = TileY(tile) + diff.y; - if (x < 0 || y < 0 || x > (int)MapMaxX() || y > (int)MapMaxY()) - return INVALID_TILE; - else - return TileXY(x, y); -} - -/** - * Returns the diff between two tiles - * - * @param tile_a from tile - * @param tile_b to tile - * @return the difference between tila_a and tile_b - */ -static inline TileIndexDiffC TileIndexToTileIndexDiffC(TileIndex tile_a, TileIndex tile_b) -{ - TileIndexDiffC difference; - - difference.x = TileX(tile_a) - TileX(tile_b); - difference.y = TileY(tile_a) - TileY(tile_b); - - return difference; -} - -/* Functions to calculate distances */ -uint DistanceManhattan(TileIndex, TileIndex); ///< also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads) -uint DistanceSquare(TileIndex, TileIndex); ///< euclidian- or L2-Norm squared -uint DistanceMax(TileIndex, TileIndex); ///< also known as L-Infinity-Norm -uint DistanceMaxPlusManhattan(TileIndex, TileIndex); ///< Max + Manhattan -uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map - -/** - * Starts a loop which iterates to a square of tiles - * - * This macro starts 2 nested loops which iterates over a square of tiles. - * - * @param var The name of the variable which contains the current tile - * @param w The width (x-width) of the square - * @param h The heigth (y-width) of the square - * @param tile The start tile of the square - */ -#define BEGIN_TILE_LOOP(var, w, h, tile) \ - { \ - int h_cur = h; \ - uint var = tile; \ - do { \ - int w_cur = w; \ - do { -/** - * Ends the square-loop used before - * - * @see BEGIN_TILE_LOOP - */ -#define END_TILE_LOOP(var, w, h, tile) \ - } while (++var, --w_cur != 0); \ - } while (var += TileDiffXY(0, 1) - (w), --h_cur != 0); \ - } -/** - * Convert a DiagDirection to a TileIndexDiff - * - * @param dir The DiagDirection - * @return The resulting TileIndexDiff - * @see TileIndexDiffCByDiagDir - */ -static inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir) -{ - extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; - - assert(IsValidDiagDirection(dir)); - return ToTileIndexDiff(_tileoffs_by_diagdir[dir]); -} - -/** - * Convert a Direction to a TileIndexDiff. - * - * @param dir The direction to convert from - * @return The resulting TileIndexDiff - */ -static inline TileIndexDiff TileOffsByDir(Direction dir) -{ - extern const TileIndexDiffC _tileoffs_by_dir[DIR_END]; - - assert(IsValidDirection(dir)); - return ToTileIndexDiff(_tileoffs_by_dir[dir]); -} - -/** - * Adds a DiagDir to a tile. - * - * @param tile The current tile - * @param dir The direction in which we want to step - * @return the moved tile - */ -static inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) -{ - return TILE_ADD(tile, TileOffsByDiagDir(dir)); -} - -/** - * A callback function type for searching tiles. - * - * @param tile The tile to test - * @param data additional data for the callback function to use - * @return A boolean value, depend on the definition of the function. - */ -typedef bool TestTileOnSearchProc(TileIndex tile, uint32 data); - -/** - * Searches for some cirumstances of a tile around a given tile with a helper function. - */ -bool CircularTileSearch(TileIndex tile, uint size, TestTileOnSearchProc proc, uint32 data); - -/** Approximation of the length of a straight track, relative to a diagonal - * track (ie the size of a tile side). - * - * #defined instead of const so it can - * stay integer. (no runtime float operations) Is this needed? - * Watch out! There are _no_ brackets around here, to prevent intermediate - * rounding! Be careful when using this! - * This value should be sqrt(2)/2 ~ 0.7071 */ -#define STRAIGHT_TRACK_LENGTH 7071/10000 - -#endif /* MAP_H */
new file mode 100644 --- /dev/null +++ b/src/map_func.h @@ -0,0 +1,389 @@ +/* $Id$ */ + +/** @file map.h */ + +#ifndef MAP_FUNC_H +#define MAP_FUNC_H + +#include "tile_type.h" +#include "map_type.h" +#include "direction_func.h" + +extern uint _map_tile_mask; + +/** + * 'Wraps' the given tile to it is within the map. It does + * this by masking the 'high' bits of. + * @param x the tile to 'wrap' + */ + +#define TILE_MASK(x) ((x) & _map_tile_mask) +/** + * Asserts when the tile is outside of the map. + * @param x the tile to check + */ +#define TILE_ASSERT(x) assert(TILE_MASK(x) == (x)); + +/** + * Pointer to the tile-array. + * + * This variable points to the tile-array which contains the tiles of + * the map. + */ +extern Tile *_m; + +/** + * Pointer to the extended tile-array. + * + * This variable points to the extended tile-array which contains the tiles + * of the map. + */ +extern TileExtended *_me; + +/** + * Allocate a new map with the given size. + */ +void AllocateMap(uint size_x, uint size_y); + +/** + * Logarithm of the map size along the X side. + * @note try to avoid using this one + * @return 2^"return value" == MapSizeX() + */ +static inline uint MapLogX() +{ + extern uint _map_log_x; + return _map_log_x; +} + +/** + * Get the size of the map along the X + * @return the number of tiles along the X of the map + */ +static inline uint MapSizeX() +{ + extern uint _map_size_x; + return _map_size_x; +} + +/** + * Get the size of the map along the Y + * @return the number of tiles along the Y of the map + */ +static inline uint MapSizeY() +{ + extern uint _map_size_y; + return _map_size_y; +} + +/** + * Get the size of the map + * @return the number of tiles of the map + */ +static inline uint MapSize() +{ + extern uint _map_size; + return _map_size; +} + +/** + * Gets the maximum X coordinate within the map, including MP_VOID + * @return the maximum X coordinate + */ +static inline uint MapMaxX() +{ + return MapSizeX() - 1; +} + +/** + * Gets the maximum X coordinate within the map, including MP_VOID + * @return the maximum X coordinate + */ +static inline uint MapMaxY() +{ + return MapSizeY() - 1; +} + +/** + * Scales relative to the number of tiles. + */ +uint ScaleByMapSize(uint); + +/** + * Scale relative to the circumference of the map. + */ +uint ScaleByMapSize1D(uint); + +/** + * An offset value between to tiles. + * + * This value is used fro the difference between + * to tiles. It can be added to a tileindex to get + * the resulting tileindex of the start tile applied + * with this saved difference. + * + * @see TileDiffXY(int, int) + */ +typedef int32 TileIndexDiff; + +/** + * Returns the TileIndex of a coordinate. + * + * @param x The x coordinate of the tile + * @param y The y coordinate of the tile + * @return The TileIndex calculated by the coordinate + */ +static inline TileIndex TileXY(uint x, uint y) +{ + return (y * MapSizeX()) + x; +} + +/** + * Calculates an offset for the given coordinate(-offset). + * + * This function calculate an offset value which can be added to an + * #TileIndex. The coordinates can be negative. + * + * @param x The offset in x direction + * @param y The offset in y direction + * @return The resulting offset value of the given coordinate + * @see ToTileIndexDiff(TileIndexDiffC) + */ +static inline TileIndexDiff TileDiffXY(int x, int y) +{ + /* Multiplication gives much better optimization on MSVC than shifting. + * 0 << shift isn't optimized to 0 properly. + * Typically x and y are constants, and then this doesn't result + * in any actual multiplication in the assembly code.. */ + return (y * MapSizeX()) + x; +} + +static inline TileIndex TileVirtXY(uint x, uint y) +{ + return (y >> 4 << MapLogX()) + (x >> 4); +} + + +/** + * Get the X component of a tile + * @param tile the tile to get the X component of + * @return the X component + */ +static inline uint TileX(TileIndex tile) +{ + return tile & MapMaxX(); +} + +/** + * Get the Y component of a tile + * @param tile the tile to get the Y component of + * @return the Y component + */ +static inline uint TileY(TileIndex tile) +{ + return tile >> MapLogX(); +} + +/** + * Return the offset between to tiles from a TileIndexDiffC struct. + * + * This function works like #TileDiffXY(int, int) and returns the + * difference between two tiles. + * + * @param tidc The coordinate of the offset as TileIndexDiffC + * @return The difference between two tiles. + * @see TileDiffXY(int, int) + */ +static inline TileIndexDiff ToTileIndexDiff(TileIndexDiffC tidc) +{ + return (tidc.y << MapLogX()) + tidc.x; +} + + +#ifndef _DEBUG + /** + * Adds to tiles together. + * + * @param x One tile + * @param y An other tile to add + * @return The resulting tile(index) + */ + #define TILE_ADD(x,y) ((x) + (y)) +#else + extern TileIndex TileAdd(TileIndex tile, TileIndexDiff add, + const char *exp, const char *file, int line); + #define TILE_ADD(x, y) (TileAdd((x), (y), #x " + " #y, __FILE__, __LINE__)) +#endif + +/** + * Adds a given offset to a tile. + * + * @param tile The tile to add an offset on it + * @param x The x offset to add to the tile + * @param y The y offset to add to the tile + */ +#define TILE_ADDXY(tile, x, y) TILE_ADD(tile, TileDiffXY(x, y)) + +/** + * Adds an offset to a tile and check if we are still on the map. + */ +uint TileAddWrap(TileIndex tile, int addx, int addy); + +/** + * Returns the TileIndexDiffC offset from a DiagDirection. + * + * @param dir The given direction + * @return The offset as TileIndexDiffC value + */ +static inline TileIndexDiffC TileIndexDiffCByDiagDir(DiagDirection dir) +{ + extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; + + assert(IsValidDiagDirection(dir)); + return _tileoffs_by_diagdir[dir]; +} + +/** + * Add a TileIndexDiffC to a TileIndex and returns the new one. + * + * Returns tile + the diff given in diff. If the result tile would end up + * outside of the map, INVALID_TILE is returned instead. + * + * @param tile The base tile to add the offset on + * @param diff The offset to add on the tile + * @return The resulting TileIndex + */ +static inline TileIndex AddTileIndexDiffCWrap(TileIndex tile, TileIndexDiffC diff) +{ + int x = TileX(tile) + diff.x; + int y = TileY(tile) + diff.y; + if (x < 0 || y < 0 || x > (int)MapMaxX() || y > (int)MapMaxY()) + return INVALID_TILE; + else + return TileXY(x, y); +} + +/** + * Returns the diff between two tiles + * + * @param tile_a from tile + * @param tile_b to tile + * @return the difference between tila_a and tile_b + */ +static inline TileIndexDiffC TileIndexToTileIndexDiffC(TileIndex tile_a, TileIndex tile_b) +{ + TileIndexDiffC difference; + + difference.x = TileX(tile_a) - TileX(tile_b); + difference.y = TileY(tile_a) - TileY(tile_b); + + return difference; +} + +/* Functions to calculate distances */ +uint DistanceManhattan(TileIndex, TileIndex); ///< also known as L1-Norm. Is the shortest distance one could go over diagonal tracks (or roads) +uint DistanceSquare(TileIndex, TileIndex); ///< euclidian- or L2-Norm squared +uint DistanceMax(TileIndex, TileIndex); ///< also known as L-Infinity-Norm +uint DistanceMaxPlusManhattan(TileIndex, TileIndex); ///< Max + Manhattan +uint DistanceFromEdge(TileIndex); ///< shortest distance from any edge of the map + +/** + * Starts a loop which iterates to a square of tiles + * + * This macro starts 2 nested loops which iterates over a square of tiles. + * + * @param var The name of the variable which contains the current tile + * @param w The width (x-width) of the square + * @param h The heigth (y-width) of the square + * @param tile The start tile of the square + */ +#define BEGIN_TILE_LOOP(var, w, h, tile) \ + { \ + int h_cur = h; \ + uint var = tile; \ + do { \ + int w_cur = w; \ + do { +/** + * Ends the square-loop used before + * + * @see BEGIN_TILE_LOOP + */ +#define END_TILE_LOOP(var, w, h, tile) \ + } while (++var, --w_cur != 0); \ + } while (var += TileDiffXY(0, 1) - (w), --h_cur != 0); \ + } +/** + * Convert a DiagDirection to a TileIndexDiff + * + * @param dir The DiagDirection + * @return The resulting TileIndexDiff + * @see TileIndexDiffCByDiagDir + */ +static inline TileIndexDiff TileOffsByDiagDir(DiagDirection dir) +{ + extern const TileIndexDiffC _tileoffs_by_diagdir[DIAGDIR_END]; + + assert(IsValidDiagDirection(dir)); + return ToTileIndexDiff(_tileoffs_by_diagdir[dir]); +} + +/** + * Convert a Direction to a TileIndexDiff. + * + * @param dir The direction to convert from + * @return The resulting TileIndexDiff + */ +static inline TileIndexDiff TileOffsByDir(Direction dir) +{ + extern const TileIndexDiffC _tileoffs_by_dir[DIR_END]; + + assert(IsValidDirection(dir)); + return ToTileIndexDiff(_tileoffs_by_dir[dir]); +} + +/** + * Adds a DiagDir to a tile. + * + * @param tile The current tile + * @param dir The direction in which we want to step + * @return the moved tile + */ +static inline TileIndex TileAddByDiagDir(TileIndex tile, DiagDirection dir) +{ + return TILE_ADD(tile, TileOffsByDiagDir(dir)); +} + +/** + * A callback function type for searching tiles. + * + * @param tile The tile to test + * @param data additional data for the callback function to use + * @return A boolean value, depend on the definition of the function. + */ +typedef bool TestTileOnSearchProc(TileIndex tile, uint32 data); + +/** + * Searches for some cirumstances of a tile around a given tile with a helper function. + */ +bool CircularTileSearch(TileIndex tile, uint size, TestTileOnSearchProc proc, uint32 data); + +/** + * Get a random tile out of a given seed. + * @param r the random 'seed' + * @return a valid tile + */ +static inline TileIndex RandomTileSeed(uint32 r) +{ + return TILE_MASK(r); +} + +/** + * Get a valid random tile. + * @note a define so 'random' gets inserted in the place where it is actually + * called, thus making the random traces more explicit. + * @return a valid tile + */ +#define RandomTile() RandomTileSeed(Random()) + +#endif /* MAP_FUNC_H */
new file mode 100644 --- /dev/null +++ b/src/map_type.h @@ -0,0 +1,65 @@ +/* $Id$ */ + +/** @file map_type.h Types related to maps. */ + +#ifndef MAP_TYPE_H +#define MAP_TYPE_H + +/** + * Data that is stored per tile. Also used TileExtended for this. + * Look at docs/landscape.html for the exact meaning of the members. + */ +struct Tile { + byte type_height; ///< The type (bits 4..7) and height of the northern corner + byte m1; ///< Primarily used for ownership information + uint16 m2; ///< Primarily used for indices to towns, industries and stations + byte m3; ///< General purpose + byte m4; ///< General purpose + byte m5; ///< General purpose + byte m6; ///< Primarily used for bridges and rainforest/desert +}; + +/** + * Data that is stored per tile. Also used Tile for this. + * Look at docs/landscape.html for the exact meaning of the members. + */ +struct TileExtended { + byte m7; ///< Primarily used for newgrf support +}; + +/** + * An offset value between to tiles. + * + * This value is used fro the difference between + * to tiles. It can be added to a tileindex to get + * the resulting tileindex of the start tile applied + * with this saved difference. + * + * @see TileDiffXY(int, int) + */ +typedef int32 TileIndexDiff; + +/** + * A pair-construct of a TileIndexDiff. + * + * This can be used to save the difference between to + * tiles as a pair of x and y value. + */ +struct TileIndexDiffC { + int16 x; ///< The x value of the coordinate + int16 y; ///< The y value of the coordinate +}; + +/** + * Approximation of the length of a straight track, relative to a diagonal + * track (ie the size of a tile side). + * + * #defined instead of const so it can + * stay integer. (no runtime float operations) Is this needed? + * Watch out! There are _no_ brackets around here, to prevent intermediate + * rounding! Be careful when using this! + * This value should be sqrt(2)/2 ~ 0.7071 + */ +#define STRAIGHT_TRACK_LENGTH 7071/10000 + +#endif /* MAP_TYPE_H */
--- a/src/misc.cpp +++ b/src/misc.cpp @@ -11,7 +11,6 @@ #include "string.h" #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "vehicle.h" #include "saveload.h" #include "engine.h" @@ -26,6 +25,7 @@ #include "economy_func.h" #include "zoom_func.h" #include "functions.h" +#include "map_func.h" char _name_array[512][32];
--- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -13,7 +13,6 @@ #include "table/sprites.h" #include "table/strings.h" #include "table/tree_land.h" -#include "map.h" #include "tile_map.h" #include "gui.h" #include "window_gui.h"
--- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -11,7 +11,7 @@ #include "../debug.h" #include "../string.h" #include "../strings_func.h" -#include "../map.h" +#include "../map_func.h" #include "../command_func.h" #include "../variables.h" #include "../date.h"
--- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -14,7 +14,7 @@ #include "../string.h" #include "network_data.h" #include "../date.h" -#include "../map.h" +#include "../map_func.h" #include "network_gamelist.h" #include "network_udp.h" #include "../variables.h"
--- a/src/npf.cpp +++ b/src/npf.cpp @@ -4,12 +4,13 @@ #include "stdafx.h" #include "openttd.h" +#include "npf.h" +#include "vehicle.h" #include "bridge_map.h" #include "debug.h" #include "tile_cmd.h" #include "bridge.h" #include "landscape.h" -#include "npf.h" #include "aystar.h" #include "pathfind.h" #include "station.h"
--- a/src/npf.h +++ b/src/npf.h @@ -8,8 +8,9 @@ #include "openttd.h" #include "aystar.h" #include "station.h" -#include "vehicle.h" +#include "vehicle_type.h" #include "tile_type.h" +#include "track_type.h" /* mowing grass */ enum {
--- a/src/oldloader.cpp +++ b/src/oldloader.cpp @@ -6,7 +6,6 @@ #include "openttd.h" #include "station_map.h" #include "table/strings.h" -#include "map.h" #include "town.h" #include "industry.h" #include "station.h"
--- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -8,7 +8,6 @@ #include "debug.h" #include "driver.h" #include "saveload.h" -#include "map.h" #include "openttd.h" #include "table/strings.h"
--- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -8,7 +8,6 @@ #include "station_map.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "vehicle.h"
--- a/src/pathfind.cpp +++ b/src/pathfind.cpp @@ -9,7 +9,6 @@ #include "depot.h" #include "tile_cmd.h" #include "landscape.h" -#include "map.h" #include "pathfind.h" #include "rail_type.h" #include "debug.h"
--- a/src/players.cpp +++ b/src/players.cpp @@ -8,7 +8,6 @@ #include "string.h" #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "player.h" #include "town.h" #include "vehicle.h"
--- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -13,7 +13,6 @@ #include "road_map.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "landscape.h" #include "town_map.h" #include "tunnel_map.h"
--- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -9,7 +9,6 @@ #include "tile_cmd.h" #include "landscape.h" #include "date.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "station_gui.h"
--- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -14,7 +14,6 @@ #include "table/sprites.h" #include "table/strings.h" #include "tile_cmd.h" -#include "map.h" #include "landscape.h" #include "town_map.h" #include "vehicle.h"
--- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -6,7 +6,6 @@ #include "openttd.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "station_gui.h" @@ -17,6 +16,7 @@ #include "road_cmd.h" #include "road_map.h" #include "station_map.h" +#include "vehicle.h" //needed for catchments #include "station.h" #include "functions.h"
--- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -11,7 +11,6 @@ #include "roadveh.h" #include "station_map.h" #include "table/strings.h" -#include "map.h" #include "vehicle.h" #include "timetable.h" #include "engine.h"
--- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -17,7 +17,7 @@ #include "zoom_func.h" #include "core/alloc_func.hpp" #include "core/endian_func.hpp" -#include "map.h" +#include "map_func.h" char _screenshot_format_name[8]; uint _num_screenshot_formats;
--- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -8,7 +8,6 @@ #include "table/strings.h" #include "tile_cmd.h" #include "landscape.h" -#include "map.h" #include "vehicle.h" #include "timetable.h" #include "command_func.h"
--- a/src/signs.cpp +++ b/src/signs.cpp @@ -18,6 +18,7 @@ #include "zoom_func.h" #include "functions.h" #include "window_func.h" +#include "map_func.h" SignID _new_sign_id; uint _total_signs;
--- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -17,6 +17,7 @@ #include "strings_func.h" #include "core/alloc_func.hpp" #include "window_func.h" +#include "map_func.h" static const Sign **_sign_sort; static uint _num_sign_sort;
--- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -12,7 +12,6 @@ #include "table/strings.h" #include "table/sprites.h" #include "landscape.h" -#include "map.h" #include "gui.h" #include "window_gui.h" #include "tree_map.h"
--- a/src/sound.cpp +++ b/src/sound.cpp @@ -5,7 +5,6 @@ #include "stdafx.h" #include "openttd.h" #include "landscape.h" -#include "map.h" #include "mixer.h" #include "sound.h" #include "vehicle.h" @@ -15,6 +14,7 @@ #include "fios.h" #include "window_gui.h" #include "core/alloc_func.hpp" +#include "map_func.h" static uint _file_count; static FileEntry *_files;
--- a/src/station.cpp +++ b/src/station.cpp @@ -9,7 +9,6 @@ #include "station_map.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "station.h" #include "viewport.h" #include "town.h"
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -14,7 +14,6 @@ #include "station_map.h" #include "table/sprites.h" #include "table/strings.h" -#include "map.h" #include "station.h" #include "viewport.h" #include "command_func.h"
--- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -6,7 +6,6 @@ #include <math.h> #include "openttd.h" #include "clear_map.h" -#include "map.h" #include "table/strings.h" #include "clear_map.h" #include "variables.h"
--- a/src/tile_map.h +++ b/src/tile_map.h @@ -7,7 +7,7 @@ #include "tile_type.h" #include "slope_type.h" -#include "map.h" +#include "map_func.h" #include "core/bitmath_func.hpp" /**
--- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -10,7 +10,6 @@ #include "road_internal.h" /* Cleaning up road bits */ #include "table/strings.h" #include "table/sprites.h" -#include "map.h" #include "landscape.h" #include "town_map.h" #include "tunnel_map.h"
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -11,7 +11,6 @@ #include "gui.h" #include "station_map.h" #include "table/strings.h" -#include "map.h" #include "tunnel_map.h" #include "vehicle.h" #include "timetable.h"
--- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -10,7 +10,6 @@ #include "table/sprites.h" #include "table/tree_land.h" #include "tile_cmd.h" -#include "map.h" #include "landscape.h" #include "tree_map.h" #include "viewport.h"
--- a/src/tunnel_map.h +++ b/src/tunnel_map.h @@ -6,7 +6,6 @@ #define TUNNEL_MAP_H #include "direction_func.h" -#include "map.h" #include "rail_type.h" #include "road_type.h" #include "tile_map.h"
--- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -13,7 +13,6 @@ #include "table/sprites.h" #include "table/strings.h" #include "tile_cmd.h" -#include "map.h" #include "landscape.h" #include "tunnel_map.h" #include "unmovable_map.h"
--- a/src/tunnelbridge_map.h +++ b/src/tunnelbridge_map.h @@ -6,10 +6,9 @@ #define TUNNELBRIDGE_MAP_H #include "direction_func.h" -#include "core/bitmath_func.hpp" /* GB, HasBit, SB */ -#include "map.h" /* Tile, TileIndex */ -#include "tile_map.h" /* TileType, IsTileType */ -#include "openttd.h" /* TransportType */ +#include "core/bitmath_func.hpp" +#include "tile_map.h" +#include "openttd.h" /**
--- a/src/unmovable_cmd.cpp +++ b/src/unmovable_cmd.cpp @@ -8,7 +8,6 @@ #include "table/sprites.h" #include "tile_cmd.h" #include "landscape.h" -#include "map.h" #include "command_func.h" #include "viewport.h" #include "player.h"
--- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -12,7 +12,6 @@ #include "table/strings.h" #include "tile_cmd.h" #include "landscape.h" -#include "map.h" #include "vehicle.h" #include "timetable.h" #include "viewport.h"
--- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -11,7 +11,6 @@ #include "table/sprites.h" #include "table/strings.h" #include "landscape.h" -#include "map.h" #include "viewport.h" #include "vehicle.h" #include "station.h"
--- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -12,7 +12,6 @@ #include "table/strings.h" #include "tile_cmd.h" #include "landscape.h" -#include "map.h" #include "vehicle.h" #include "viewport.h" #include "command_func.h"
--- a/src/waypoint.cpp +++ b/src/waypoint.cpp @@ -7,7 +7,6 @@ #include "command_func.h" #include "landscape.h" -#include "map.h" #include "order.h" #include "rail_map.h" #include "rail.h"
--- a/src/window.cpp +++ b/src/window.cpp @@ -6,7 +6,6 @@ #include <stdarg.h> #include "openttd.h" #include "debug.h" -#include "map.h" #include "player.h" #include "viewport.h" #include "console.h" @@ -17,6 +16,8 @@ #include "window_gui.h" #include "zoom_func.h" #include "core/alloc_func.hpp" +#include "vehicle.h" +#include "map_func.h" /* delta between mouse cursor and upper left corner of dragged window */ static Point _drag_delta;