map.c
author tron
Mon, 14 Feb 2005 22:17:21 +0000
changeset 1372 8f367e2c4aad
parent 1299 0a6510cc889b
child 1410 3b5f94893633
permissions -rw-r--r--
(svn r1876) Make placement of oil rigs and refineries map size agnostic
679
e959706a3e4d (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
diff changeset
     1
#include "stdafx.h"
e959706a3e4d (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
diff changeset
     2
#include "ttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1247
diff changeset
     3
#include "debug.h"
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
     4
#include "functions.h"
679
e959706a3e4d (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
diff changeset
     5
#include "map.h"
e959706a3e4d (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents:
diff changeset
     6
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
     7
uint _map_log_x;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
     8
uint _map_log_y;
689
1412bc834a8d (svn r1130) Add helper functions to query map size
tron
parents: 679
diff changeset
     9
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    10
byte   *_map_type_and_height = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    11
byte   *_map_owner           = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    12
uint16 *_map2                = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    13
byte   *_map3_lo             = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    14
byte   *_map3_hi             = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    15
byte   *_map5                = NULL;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    16
byte   *_map_extra_bits      = NULL;
863
8d09f9331a80 (svn r1344) Use MapSize[XY]() (or MapSize()/MapMax[XY]() where appropriate) instead of TILES_[XY]
tron
parents: 817
diff changeset
    17
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    18
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    19
void InitMap(uint log_x, uint log_y)
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    20
{
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    21
	uint map_size;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    22
1244
7c87de28da3c (svn r1748) Enforce map size limits
tron
parents: 1233
diff changeset
    23
	if (log_x < 6 || log_x > 11 || log_y < 6 || log_y > 11)
7c87de28da3c (svn r1748) Enforce map size limits
tron
parents: 1233
diff changeset
    24
		error("Invalid map size");
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    25
1233
2ee427ec9014 (svn r1737) Add DEBUG category "map" and use it to print the map size when allocating the map
tron
parents: 1218
diff changeset
    26
	DEBUG(map, 1)("Allocating map of size %dx%d", log_x, log_y);
2ee427ec9014 (svn r1737) Add DEBUG category "map" and use it to print the map size when allocating the map
tron
parents: 1218
diff changeset
    27
1218
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    28
	_map_log_x = log_x;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    29
	_map_log_y = log_y;
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    30
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    31
	map_size = MapSize();
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    32
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    33
	_map_type_and_height =
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    34
		realloc(_map_type_and_height, map_size * sizeof(_map_type_and_height[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    35
	_map_owner = realloc(_map_owner, map_size * sizeof(_map_owner[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    36
	_map2      = realloc(_map2,      map_size * sizeof(_map2[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    37
	_map3_lo   = realloc(_map3_lo,   map_size * sizeof(_map3_lo[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    38
	_map3_hi   = realloc(_map3_hi,   map_size * sizeof(_map3_hi[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    39
	_map5      = realloc(_map5,      map_size * sizeof(_map5[0]));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    40
	_map_extra_bits =
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    41
		realloc(_map_extra_bits, map_size * sizeof(_map_extra_bits[0] / 4));
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    42
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    43
	// XXX TODO handle memory shortage more gracefully
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    44
	if (_map_type_and_height == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    45
			_map_owner           == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    46
			_map2                == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    47
			_map3_lo             == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    48
			_map3_hi             == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    49
			_map5                == NULL ||
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    50
			_map_extra_bits      == NULL)
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    51
		error("Failed to allocate memory for the map");
353a7773bc3c (svn r1722) -Feature: Bigger maps - anyone?
tron
parents: 1202
diff changeset
    52
}
900
feed1801fd35 (svn r1386) Move TileIndexDiff to map.h
tron
parents: 863
diff changeset
    53
955
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    54
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    55
#ifdef _DEBUG
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    56
TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    57
	const char *exp, const char *file, int line)
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    58
{
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    59
	int dx;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    60
	int dy;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    61
	uint x;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    62
	uint y;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    63
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    64
	dx = add & MapMaxX();
957
d1dd9429e417 (svn r1449) -Fix: signed/unsigned error on windows
darkvater
parents: 955
diff changeset
    65
	if (dx >= (int)MapSizeX() / 2) dx -= MapSizeX();
955
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    66
	dy = (add - dx) / (int)MapSizeX();
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    67
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    68
	x = TileX(tile) + dx;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    69
	y = TileY(tile) + dy;
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    70
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    71
	if (x >= MapSizeX() || y >= MapSizeY()) {
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    72
		char buf[512];
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    73
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    74
		sprintf(buf, "TILE_ADD(%s) when adding 0x%.4X and 0x%.4X failed",
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    75
			exp, tile, add);
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    76
#if !defined(_MSC_VER)
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    77
		fprintf(stderr, "%s:%d %s\n", file, line, buf);
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    78
#else
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    79
		_assert(buf, (char*)file, line);
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    80
#endif
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    81
	}
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    82
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    83
	assert(TILE_XY(x,y) == TILE_MASK(tile + add));
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    84
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    85
	return TILE_XY(x,y);
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    86
}
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    87
#endif
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    88
25bc5b97e3e2 (svn r1447) Move TILE_ADD(), TILE_ADDXY() and SafeTileAdd() to map.[ch] and make the latter map size agnostic
tron
parents: 927
diff changeset
    89
1202
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    90
uint ScaleByMapSize(uint n)
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    91
{
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    92
	int shift = (int)MapLogX() - 8 + (int)MapLogY() - 8;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    93
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    94
	if (shift < 0)
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    95
		return (n + (1 << -shift) - 1) >> -shift;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    96
	else
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    97
		return n << shift;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    98
}
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
    99
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   100
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   101
uint ScaleByMapSize1D(uint n)
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   102
{
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   103
	int shift = ((int)MapLogX() - 8 + (int)MapLogY() - 8) / 2;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   104
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   105
	if (shift < 0)
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   106
		return (n + (1 << -shift) - 1) >> -shift;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   107
	else
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   108
		return n << shift;
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   109
}
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   110
7d8b86bd8ba2 (svn r1706) Implement ScaleByMapSize() and ScaleByMapSize1D()
tron
parents: 957
diff changeset
   111
1247
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   112
// This function checks if we add addx/addy to tile, if we
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   113
//  do wrap around the edges. For example, tile = (10,2) and
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   114
//  addx = +3 and addy = -4. This function will now return
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   115
//  INVALID_TILE, because the y is wrapped. This is needed in
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   116
//  for example, farmland. When the tile is not wrapped,
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   117
//  the result will be tile + TILE_XY(addx, addy)
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   118
uint TileAddWrap(TileIndex tile, int addx, int addy)
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   119
{
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   120
	uint x, y;
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   121
	x = TileX(tile) + addx;
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   122
	y = TileY(tile) + addy;
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   123
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   124
	// Are we about to wrap?
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   125
		if (x < MapMaxX() && y < MapMaxY())
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   126
		return tile + TILE_XY(addx, addy);
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   127
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   128
	return INVALID_TILE;
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   129
}
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   130
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   131
const TileIndexDiffC _tileoffs_by_dir[] = {
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   132
	{-1,  0},
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   133
	{ 0,  1},
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   134
	{ 1,  0},
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   135
	{ 0, -1}
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   136
};
01711347f9ac (svn r1751) - Feature: New PathFinder (NPF).
matthijs
parents: 1245
diff changeset
   137
1245
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   138
uint DistanceManhattan(TileIndex t0, TileIndex t1)
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   139
{
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   140
	return
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   141
		abs(TileX(t0) - TileX(t1)) +
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   142
		abs(TileY(t0) - TileY(t1));
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   143
}
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   144
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   145
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   146
uint DistanceSquare(TileIndex t0, TileIndex t1)
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   147
{
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   148
	const int x = TileX(t0) - TileX(t1);
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   149
	const int y = TileY(t0) - TileY(t1);
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   150
	return x * x + y * y;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   151
}
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   152
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   153
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   154
uint DistanceMax(TileIndex t0, TileIndex t1)
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   155
{
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   156
	const uint x = abs(TileX(t0) - TileX(t1));
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   157
	const uint y = abs(TileY(t0) - TileY(t1));
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   158
	return x > y ? x : y;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   159
}
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   160
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   161
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   162
uint DistanceMaxPlusManhattan(TileIndex t0, TileIndex t1)
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   163
{
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   164
	const uint x = abs(TileX(t0) - TileX(t1));
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   165
	const uint y = abs(TileY(t0) - TileY(t1));
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   166
	return x > y ? 2 * x + y : 2 * y + x;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   167
}
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   168
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   169
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   170
uint DistanceFromEdge(TileIndex tile)
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   171
{
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   172
	const uint xl = TileX(tile);
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   173
	const uint yl = TileY(tile);
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   174
	const uint xh = MapSizeX() - 1 - xl;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   175
	const uint yh = MapSizeY() - 1 - yl;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   176
	const uint minl = xl < yl ? xl : yl;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   177
	const uint minh = xh < yh ? xh : yh;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   178
	return minl < minh ? minl : minh;
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   179
}
768d9bc95aaa (svn r1749) Move the functions which calculate distances to map.[ch] and give the more meaningful names
tron
parents: 1244
diff changeset
   180