viewport.c
author Darkvater
Tue, 07 Nov 2006 13:06:02 +0000
changeset 5045 846098142ffe
parent 5027 8dacdfc948d3
child 5120 1ff65e874ce3
permissions -rw-r--r--
(svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
buttons depending on calling window, game-mode); handle it by broadcasting messages
to the calling window, because that knows how and what buttons to set.
2186
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
db48cf29b983 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     3
#include "stdafx.h"
1891
862800791170 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1864
diff changeset
     4
#include "openttd.h"
1299
39c06aba09aa (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1172
diff changeset
     5
#include "debug.h"
2163
b17b313113a0 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2159
diff changeset
     6
#include "functions.h"
2662
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
     7
#include "gui.h"
1349
15979a2e9001 (svn r1853) Move spritecache function declarations into a header of their own and use SpriteID as parameter type where appropriate
tron
parents: 1309
diff changeset
     8
#include "spritecache.h"
1309
4403a69da4f8 (svn r1813) Declare functions implemented in strings.c in their own shiny new header (though i think some of these function don't belong into strings.c)
tron
parents: 1299
diff changeset
     9
#include "strings.h"
1363
775a7ee52369 (svn r1867) Include tables/sprites.h only in files which need it
tron
parents: 1349
diff changeset
    10
#include "table/sprites.h"
507
04b5403aaf6b (svn r815) Include strings.h only in the files which need it.
tron
parents: 500
diff changeset
    11
#include "table/strings.h"
679
04ca2cd69420 (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents: 657
diff changeset
    12
#include "map.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    13
#include "viewport.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    14
#include "window.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    15
#include "vehicle.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    16
#include "station.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
#include "gfx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    18
#include "town.h"
988
4304525d1b8b (svn r1486) -Codechange: moved all 'signs' stuff to signs.c/h and prepared it for
truelight
parents: 981
diff changeset
    19
#include "signs.h"
1542
62a03537ad0b (svn r2046) -Codechange: moved all waypoint code to waypoint.c/waypoint.h
truelight
parents: 1390
diff changeset
    20
#include "waypoint.h"
2159
f6284cf5fab0 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2125
diff changeset
    21
#include "variables.h"
2676
59b65b4fb480 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2662
diff changeset
    22
#include "train.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    23
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
    24
#define VIEWPORT_DRAW_MEM (65536 * 2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    25
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    26
static bool _added_tile_sprite;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    27
static bool _offset_ground_sprites;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    28
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    29
/* The in-game coordiante system looks like this *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    30
 *                                               *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    31
 *                    ^ Z                        *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    32
 *                    |                          *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    33
 *                    |                          *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    34
 *                    |                          *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    35
 *                    |                          *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    36
 *                 /     \                       *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    37
 *              /           \                    *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    38
 *           /                 \                 *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    39
 *        /                       \              *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    40
 *   X <                             > Y         *
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    41
 */
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    42
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    43
typedef struct StringSpriteToDraw {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    44
	uint16 string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    45
	uint16 color;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    46
	struct StringSpriteToDraw *next;
849
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    47
	int32 x;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    48
	int32 y;
5026
d589561bc43d (svn r7067) Remove the unused parameter params_3 from AddStringToDraw()
tron
parents: 5025
diff changeset
    49
	uint32 params[2];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    50
	uint16 width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    51
} StringSpriteToDraw;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    52
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    53
typedef struct TileSpriteToDraw {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    54
	uint32 image;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    55
	struct TileSpriteToDraw *next;
849
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    56
	int32 x;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    57
	int32 y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
	byte z;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    59
} TileSpriteToDraw;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    60
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    61
typedef struct ChildScreenSpriteToDraw {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    62
	uint32 image;
849
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    63
	int32 x;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    64
	int32 y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    65
	struct ChildScreenSpriteToDraw *next;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    66
} ChildScreenSpriteToDraw;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    67
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    68
typedef struct ParentSpriteToDraw {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    69
	uint32 image;
849
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    70
	int32 left;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    71
	int32 top;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    72
	int32 right;
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    73
	int32 bottom;
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    74
	int32 xmin;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    75
	int32 ymin;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    76
	int32 xmax;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    77
	int32 ymax;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    78
	ChildScreenSpriteToDraw *child;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    79
	byte unk16;
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    80
	byte zmin;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
    81
	byte zmax;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    82
} ParentSpriteToDraw;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    83
2109
545d8173eebe (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
    84
// Quick hack to know how much memory to reserve when allocating from the spritelist
545d8173eebe (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
    85
// to prevent a buffer overflow.
545d8173eebe (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
    86
#define LARGEST_SPRITELIST_STRUCT ParentSpriteToDraw
545d8173eebe (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
    87
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    88
typedef struct ViewportDrawer {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    89
	DrawPixelInfo dpi;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
    90
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
    91
	byte *spritelist_mem;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
    92
	const byte *eof_spritelist_mem;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
    93
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    94
	StringSpriteToDraw **last_string, *first_string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    95
	TileSpriteToDraw **last_tile, *first_tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    96
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    97
	ChildScreenSpriteToDraw **last_child;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    98
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    99
	ParentSpriteToDraw **parent_list;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   100
	ParentSpriteToDraw * const *eof_parent_list;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   101
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   102
	byte combine_sprites;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   104
	int offs_x, offs_y; // used when drawing ground sprites relative
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   105
} ViewportDrawer;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   106
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   107
static ViewportDrawer *_cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   108
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   109
TileHighlightData _thd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   110
static TileInfo *_cur_ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   111
4340
89b0ebfb7615 (svn r6041) -Fix r6040: forgot to declare a function in viewport.c
truelight
parents: 4339
diff changeset
   112
extern void SmallMapCenterOnCurrentPos(Window *w);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   114
static Point MapXYZToViewport(const ViewPort *vp, uint x, uint y, uint z)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   115
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   116
	Point p = RemapCoords(x, y, z);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   117
	p.x -= vp->virtual_width / 2;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   118
	p.y -= vp->virtual_height / 2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   119
	return p;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   120
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   121
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   122
void AssignWindowViewport(Window *w, int x, int y,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
	int width, int height, uint32 follow_flags, byte zoom)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   124
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
	ViewPort *vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   127
	uint32 bit;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   129
	for (vp = _viewports, bit = 1; ; vp++, bit <<= 1) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   130
		assert(vp != endof(_viewports));
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   131
		if (vp->width == 0) break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   132
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   133
	_active_viewports |= bit;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   134
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   135
	vp->left = x + w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   136
	vp->top = y + w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   137
	vp->width = width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   138
	vp->height = height;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   139
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   140
	vp->zoom = zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   141
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   142
	vp->virtual_width = width << zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   143
	vp->virtual_height = height << zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   144
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   145
	if (follow_flags & 0x80000000) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   146
		const Vehicle *veh;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   147
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   148
		WP(w, vp_d).follow_vehicle = (VehicleID)(follow_flags & 0xFFFF);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   149
		veh = GetVehicle(WP(w, vp_d).follow_vehicle);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   150
		pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   151
	} else {
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
   152
		uint x = TileX(follow_flags) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
   153
		uint y = TileY(follow_flags) * TILE_SIZE;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   154
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   155
		WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   156
		pt = MapXYZToViewport(vp, x, y, GetSlopeZ(x, y));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   157
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   158
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   159
	WP(w, vp_d).scrollpos_x = pt.x;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   160
	WP(w, vp_d).scrollpos_y = pt.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
	w->viewport = vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   162
	vp->virtual_left = 0;//pt.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   163
	vp->virtual_top = 0;//pt.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   164
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   165
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   166
static Point _vp_move_offs;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   167
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   168
static void DoSetViewportPosition(Window *w, int left, int top, int width, int height)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   169
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   170
	for (; w < _last_window; w++) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   171
		if (left + width > w->left &&
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   172
				w->left + w->width > left &&
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   173
				top + height > w->top &&
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   174
				w->top + w->height > top) {
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   175
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   176
			if (left < w->left) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   177
				DoSetViewportPosition(w, left, top, w->left - left, height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   178
				DoSetViewportPosition(w, left + (w->left - left), top, width - (w->left - left), height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   179
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   180
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   181
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   182
			if (left + width > w->left + w->width) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   183
				DoSetViewportPosition(w, left, top, (w->left + w->width - left), height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   184
				DoSetViewportPosition(w, left + (w->left + w->width - left), top, width - (w->left + w->width - left) , height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   185
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   186
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   187
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   188
			if (top < w->top) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   189
				DoSetViewportPosition(w, left, top, width, (w->top - top));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   190
				DoSetViewportPosition(w, left, top + (w->top - top), width, height - (w->top - top));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   191
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   192
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   193
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   194
			if (top + height > w->top + w->height) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   195
				DoSetViewportPosition(w, left, top, width, (w->top + w->height - top));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   196
				DoSetViewportPosition(w, left, top + (w->top + w->height - top), width , height - (w->top + w->height - top));
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   197
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   198
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   199
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   200
			return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   201
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   202
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   203
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   204
	{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   205
		int xo = _vp_move_offs.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   206
		int yo = _vp_move_offs.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   207
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   208
		if (abs(xo) >= width || abs(yo) >= height) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   209
			/* fully_outside */
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   210
			RedrawScreenRect(left, top, left + width, top + height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   211
			return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   212
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   213
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   214
		GfxScroll(left, top, width, height, xo, yo);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   215
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   216
		if (xo > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   217
			RedrawScreenRect(left, top, xo + left, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   218
			left += xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   219
			width -= xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   220
		} else if (xo < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   221
			RedrawScreenRect(left+width+xo, top, left+width, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   222
			width += xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   223
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   224
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   225
		if (yo > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   226
			RedrawScreenRect(left, top, width+left, top + yo);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   227
		} else if (yo < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   228
			RedrawScreenRect(left, top + height + yo, width+left, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   229
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   230
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   231
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   232
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
   233
static void SetViewportPosition(Window *w, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   234
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   235
	ViewPort *vp = w->viewport;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   236
	int old_left = vp->virtual_left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   237
	int old_top = vp->virtual_top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   238
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   239
	int left, top, width, height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   240
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   241
	vp->virtual_left = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   242
	vp->virtual_top = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   243
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   244
	old_left >>= vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   245
	old_top >>= vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   246
	x >>= vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   247
	y >>= vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   248
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   249
	old_left -= x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   250
	old_top -= y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   251
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   252
	if (old_top == 0 && old_left == 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   253
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   254
	_vp_move_offs.x = old_left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   255
	_vp_move_offs.y = old_top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   256
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   257
	left = vp->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   258
	top = vp->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   259
	width = vp->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   260
	height = vp->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   261
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   262
	if (left < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   263
		width += left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   264
		left = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   265
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   266
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   267
	i = left + width - _screen.width;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   268
	if (i >= 0) width -= i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   269
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   270
	if (width > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   271
		if (top < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   272
			height += top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   273
			top = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   274
		}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   275
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   276
		i = top + height - _screen.height;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   277
		if (i >= 0) height -= i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   278
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   279
		if (height > 0) DoSetViewportPosition(w + 1, left, top, width, height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   280
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   281
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   282
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   283
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   284
ViewPort *IsPtInWindowViewport(const Window *w, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   285
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   286
	ViewPort *vp = w->viewport;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   287
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   288
	if (vp != NULL &&
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   289
	    IS_INT_INSIDE(x, vp->left, vp->left + vp->width) &&
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   290
			IS_INT_INSIDE(y, vp->top, vp->top + vp->height))
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   291
		return vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   292
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   293
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   294
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   295
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   296
static Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y)
1095
b59632d9df1b (svn r1596) Add some more statics
tron
parents: 1093
diff changeset
   297
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   298
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   299
	int a,b;
5014
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   300
	uint z;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   301
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   302
	if ( (uint)(x -= vp->left) >= (uint)vp->width ||
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   303
				(uint)(y -= vp->top) >= (uint)vp->height) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   304
				Point pt = {-1, -1};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   305
				return pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   306
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   307
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   308
	x = ((x << vp->zoom) + vp->virtual_left) >> 2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   309
	y = ((y << vp->zoom) + vp->virtual_top) >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   310
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   311
#if !defined(NEW_ROTATION)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   312
	a = y-x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   313
	b = y+x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   314
#else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   315
	a = x+y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   316
	b = x-y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   317
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   318
5014
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   319
	/* we need to move variables in to the valid range, as the
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   320
	 * GetTileZoomCenterWindow() function can call here with invalid x and/or y,
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   321
	 * when the user tries to zoom out along the sides of the map */
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   322
	a = clamp(a, 0, (int)(MapMaxX() * TILE_SIZE) - 1);
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   323
	b = clamp(b, 0, (int)(MapMaxY() * TILE_SIZE) - 1);
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   324
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   325
	z = GetSlopeZ(a,     b    ) / 2;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   326
	z = GetSlopeZ(a + z, b + z) / 2;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   327
	z = GetSlopeZ(a + z, b + z) / 2;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   328
	z = GetSlopeZ(a + z, b + z) / 2;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   329
	z = GetSlopeZ(a + z, b + z) / 2;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   330
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   331
	pt.x = a + z;
27054c09dc66 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   332
	pt.y = b + z;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   333
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   334
	return pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   335
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   336
981
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   337
/* When used for zooming, check area below current coordinates (x,y)
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   338
 * and return the tile of the zoomed out/in position (zoom_x, zoom_y)
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   339
 * when you just want the tile, make x = zoom_x and y = zoom_y */
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   340
static Point GetTileFromScreenXY(int x, int y, int zoom_x, int zoom_y)
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   341
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   342
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   343
	ViewPort *vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   344
	Point pt;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   345
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   346
	if ( (w = FindWindowFromPt(x, y)) != NULL &&
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   347
			 (vp = IsPtInWindowViewport(w, x, y)) != NULL)
981
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   348
				return TranslateXYToTileCoord(vp, zoom_x, zoom_y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   349
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   350
	pt.y = pt.x = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   351
	return pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   352
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   353
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
   354
Point GetTileBelowCursor(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   355
{
981
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   356
	return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, _cursor.pos.x, _cursor.pos.y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   357
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   358
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   359
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   360
Point GetTileZoomCenterWindow(bool in, Window * w)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   361
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   362
	int x, y;
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   363
	ViewPort * vp;
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   364
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   365
	vp = w->viewport;
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   366
2026
567e3bc9af72 (svn r2535) Tabs
tron
parents: 2023
diff changeset
   367
	if (in) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   368
		x = ((_cursor.pos.x - vp->left) >> 1) + (vp->width >> 2);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   369
		y = ((_cursor.pos.y - vp->top) >> 1) + (vp->height >> 2);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   370
	} else {
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   371
		x = vp->width - (_cursor.pos.x - vp->left);
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
   372
		y = vp->height - (_cursor.pos.y - vp->top);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   373
	}
981
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   374
	/* Get the tile below the cursor and center on the zoomed-out center */
f74abee65b7b (svn r1477) -Fix: finally zooming in/out always works. The problem was that the zoomed in/out coordinates were used for checking if the area was a zoomable viewport in the not zoomed in/out position. The chances were high that there was a window.
darkvater
parents: 979
diff changeset
   375
	return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, x + vp->left, y + vp->top);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   376
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   377
5045
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   378
/** Update the status of the zoom-buttons according to the zoom-level
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   379
 * of the viewport. This will update their status and invalidate accordingly
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   380
 * @param window pointer to the window that has the zoom buttons
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   381
 * @param vp pointer to the viewport whose zoom-level the buttons represent
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   382
 * @param widget_zoom_in widget index for window with zoom-in button
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   383
 * @param widget_zoom_out widget index for window with zoom-out button */
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   384
void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out)
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   385
{
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   386
	SetWindowWidgetDisabledState(w, widget_zoom_in, vp->zoom == 0);
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   387
	InvalidateWidget(w, widget_zoom_in);
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   388
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   389
	SetWindowWidgetDisabledState(w, widget_zoom_out, vp->zoom == 2);
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   390
	InvalidateWidget(w, widget_zoom_out);
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   391
}
846098142ffe (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   392
849
c3407041774f (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
   393
void DrawGroundSpriteAt(uint32 image, int32 x, int32 y, byte z)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   394
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   395
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   396
	TileSpriteToDraw *ts;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   397
2187
a0e206ce9fbf (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   398
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   399
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   400
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
2013
c83b52340eee (svn r2521) -Codechange: Removed trailing "\n"s from DEBUG statements
celestar
parents: 1990
diff changeset
   401
		DEBUG(misc, 0) ("Out of sprite mem");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   402
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   403
	}
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   404
	ts = (TileSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   405
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   406
	vd->spritelist_mem += sizeof(TileSpriteToDraw);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   407
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   408
	ts->image = image;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   409
	ts->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   410
	ts->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   411
	ts->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   412
	ts->z = z;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   413
	*vd->last_tile = ts;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   414
	vd->last_tile = &ts->next;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   415
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   416
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   417
void DrawGroundSprite(uint32 image)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   418
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   419
	if (_offset_ground_sprites) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   420
		// offset ground sprite because of foundation?
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   421
		AddChildSpriteScreen(image, _cur_vd->offs_x, _cur_vd->offs_y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   422
	} else {
1083
8e64dc3ed29f (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   423
		_added_tile_sprite = true;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   424
		DrawGroundSpriteAt(image, _cur_ti->x, _cur_ti->y, _cur_ti->z);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   425
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   426
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   427
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   428
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   429
void OffsetGroundSprite(int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   430
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   431
	_cur_vd->offs_x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   432
	_cur_vd->offs_y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   433
	_offset_ground_sprites = true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   434
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   435
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   436
static void AddCombinedSprite(uint32 image, int x, int y, byte z)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   437
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   438
	const ViewportDrawer *vd = _cur_vd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   439
	Point pt = RemapCoords(x, y, z);
2319
fba7d61df04a (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   440
	const Sprite* spr = GetSprite(image & SPRITE_MASK);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   441
2319
fba7d61df04a (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   442
	if (pt.x + spr->x_offs >= vd->dpi.left + vd->dpi.width ||
fba7d61df04a (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   443
			pt.x + spr->x_offs + spr->width <= vd->dpi.left ||
fba7d61df04a (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   444
			pt.y + spr->y_offs >= vd->dpi.top + vd->dpi.height ||
fba7d61df04a (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   445
			pt.y + spr->y_offs + spr->height <= vd->dpi.top)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   446
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   447
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   448
	AddChildSpriteScreen(image, pt.x - vd->parent_list[-1]->left, pt.y - vd->parent_list[-1]->top);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   449
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   450
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   451
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   452
void AddSortableSpriteToDraw(uint32 image, int x, int y, int w, int h, byte dz, byte z)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   453
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   454
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   455
	ParentSpriteToDraw *ps;
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
   456
	const Sprite *spr;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   457
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   458
2187
a0e206ce9fbf (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   459
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   460
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   461
	if (vd->combine_sprites == 2) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   462
		AddCombinedSprite(image, x, y, z);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   463
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   464
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   465
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   466
	vd->last_child = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   467
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   468
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
2013
c83b52340eee (svn r2521) -Codechange: Removed trailing "\n"s from DEBUG statements
celestar
parents: 1990
diff changeset
   469
		DEBUG(misc, 0) ("Out of sprite mem");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   470
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   471
	}
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   472
	ps = (ParentSpriteToDraw*)vd->spritelist_mem;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   473
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   474
	if (vd->parent_list >= vd->eof_parent_list) {
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   475
		// This can happen rarely, mostly when you zoom out completely
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   476
		//  and have a lot of stuff that moves (and is added to the
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   477
		//  sort-list, this function). To solve it, increase
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   478
		//  parent_list somewhere below to a higher number.
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   479
		// This can not really hurt you, it just gives some black
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   480
		//  spots on the screen ;)
2013
c83b52340eee (svn r2521) -Codechange: Removed trailing "\n"s from DEBUG statements
celestar
parents: 1990
diff changeset
   481
		DEBUG(misc, 0) ("Out of sprite mem (parent_list)");
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   482
		return;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   483
	}
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   484
4189
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   485
	pt = RemapCoords(x, y, z);
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   486
	spr = GetSprite(image & SPRITE_MASK);
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   487
	if ((ps->left   = (pt.x += spr->x_offs)) >= vd->dpi.left + vd->dpi.width ||
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   488
			(ps->right  = (pt.x +  spr->width )) <= vd->dpi.left ||
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   489
			(ps->top    = (pt.y += spr->y_offs)) >= vd->dpi.top + vd->dpi.height ||
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   490
			(ps->bottom = (pt.y +  spr->height)) <= vd->dpi.top) {
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   491
		return;
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   492
	}
fcc29d7b6722 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   493
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   494
	vd->spritelist_mem += sizeof(ParentSpriteToDraw);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   495
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   496
	ps->image = image;
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   497
	ps->xmin = x;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   498
	ps->xmax = x + w - 1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   499
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   500
	ps->ymin = y;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   501
	ps->ymax = y + h - 1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   502
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   503
	ps->zmin = z;
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
   504
	ps->zmax = z + dz - 1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   505
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   506
	ps->unk16 = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   507
	ps->child = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   508
	vd->last_child = &ps->child;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   509
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   510
	*vd->parent_list++ = ps;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   511
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   512
	if (vd->combine_sprites == 1) vd->combine_sprites = 2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   513
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   514
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
   515
void StartSpriteCombine(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   516
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   517
	_cur_vd->combine_sprites = 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   518
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   519
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
   520
void EndSpriteCombine(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   521
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   522
	_cur_vd->combine_sprites = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   523
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   524
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   525
void AddChildSpriteScreen(uint32 image, int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   526
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   527
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   528
	ChildScreenSpriteToDraw *cs;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   529
2187
a0e206ce9fbf (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   530
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   531
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   532
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
2013
c83b52340eee (svn r2521) -Codechange: Removed trailing "\n"s from DEBUG statements
celestar
parents: 1990
diff changeset
   533
		DEBUG(misc, 0) ("Out of sprite mem");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   534
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   535
	}
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   536
	cs = (ChildScreenSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   537
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   538
	if (vd->last_child == NULL) return;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   539
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   540
	vd->spritelist_mem += sizeof(ChildScreenSpriteToDraw);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   541
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   542
	*vd->last_child = cs;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   543
	vd->last_child = &cs->next;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   544
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   545
	cs->image = image;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   546
	cs->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   547
	cs->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   548
	cs->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   549
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   550
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   551
/* Returns a StringSpriteToDraw */
5026
d589561bc43d (svn r7067) Remove the unused parameter params_3 from AddStringToDraw()
tron
parents: 5025
diff changeset
   552
void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   553
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   554
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   555
	StringSpriteToDraw *ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   556
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   557
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
2013
c83b52340eee (svn r2521) -Codechange: Removed trailing "\n"s from DEBUG statements
celestar
parents: 1990
diff changeset
   558
		DEBUG(misc, 0) ("Out of sprite mem");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   559
		return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   560
	}
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   561
	ss = (StringSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   562
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   563
	vd->spritelist_mem += sizeof(StringSpriteToDraw);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   564
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   565
	ss->string = string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   566
	ss->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   567
	ss->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   568
	ss->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   569
	ss->params[0] = params_1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   570
	ss->params[1] = params_2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   571
	ss->width = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   572
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   573
	*vd->last_string = ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   574
	vd->last_string = &ss->next;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   575
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   576
	return ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   577
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   578
4000
4009d092b306 (svn r5210) Many small changes which piled up: const, unsigned, variable scope, CSE for readability, DeMorgan, if cascades -> switch, whitespace, parentheses, bracing, misc.
tron
parents: 3809
diff changeset
   579
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   580
static void DrawSelectionSprite(uint32 image, const TileInfo *ti)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   581
{
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   582
	if (_added_tile_sprite && !(_thd.drawstyle & HT_LINE)) { // draw on real ground
1083
8e64dc3ed29f (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   583
		DrawGroundSpriteAt(image, ti->x, ti->y, ti->z + 7);
8e64dc3ed29f (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   584
	} else { // draw on top of foundation
8e64dc3ed29f (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   585
		AddSortableSpriteToDraw(image, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7);
8e64dc3ed29f (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   586
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   587
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   588
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   589
static bool IsPartOfAutoLine(int px, int py)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   590
{
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   591
	px -= _thd.selstart.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   592
	py -= _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   593
2952
58522ed8f0f1 (svn r3511) More whitespace ([FS#46] by Rubidium)
tron
parents: 2817
diff changeset
   594
	switch (_thd.drawstyle) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   595
	case HT_LINE | HT_DIR_X:  return py == 0; // x direction
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   596
	case HT_LINE | HT_DIR_Y:  return px == 0; // y direction
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   597
	case HT_LINE | HT_DIR_HU: return px == -py || px == -py - 16; // horizontal upper
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   598
	case HT_LINE | HT_DIR_HL: return px == -py || px == -py + 16; // horizontal lower
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   599
	case HT_LINE | HT_DIR_VL: return px == py || px == py + 16; // vertival left
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   600
	case HT_LINE | HT_DIR_VR: return px == py || px == py - 16; // vertical right
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   601
	default:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   602
		NOT_REACHED();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   603
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   604
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   605
	/* useless, but avoids compiler warning this way */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   606
	return 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   607
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   608
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   609
// [direction][side]
2710
44278abd3ef9 (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
   610
static const int _AutorailType[6][2] = {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   611
	{ HT_DIR_X,  HT_DIR_X },
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   612
	{ HT_DIR_Y,  HT_DIR_Y },
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   613
	{ HT_DIR_HU, HT_DIR_HL },
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   614
	{ HT_DIR_HL, HT_DIR_HU },
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   615
	{ HT_DIR_VL, HT_DIR_VR },
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   616
	{ HT_DIR_VR, HT_DIR_VL }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   617
};
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   618
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   619
#include "table/autorail.h"
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   620
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   621
static void DrawTileSelection(const TileInfo *ti)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   622
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   623
	uint32 image;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   624
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   625
	// Draw a red error square?
3281
757d7da49445 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
   626
	if (_thd.redsq != 0 && _thd.redsq == ti->tile) {
1864
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   627
		DrawSelectionSprite(PALETTE_TILE_RED_PULSATING | (SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh]), ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   628
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   629
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   630
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   631
	// no selection active?
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   632
	if (_thd.drawstyle == 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   633
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   634
	// Inside the inner area?
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   635
	if (IS_INSIDE_1D(ti->x, _thd.pos.x, _thd.size.x) &&
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   636
			IS_INSIDE_1D(ti->y, _thd.pos.y, _thd.size.y)) {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   637
		if (_thd.drawstyle & HT_RECT) {
1864
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   638
			image = SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh];
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   639
			if (_thd.make_square_red) image |= PALETTE_SEL_TILE_RED;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   640
			DrawSelectionSprite(image, ti);
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   641
		} else if (_thd.drawstyle & HT_POINT) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   642
			// Figure out the Z coordinate for the single dot.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   643
			byte z = ti->z;
3636
a36cc46e754d (svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents: 3609
diff changeset
   644
			if (ti->tileh & SLOPE_N) {
3645
7f950533d510 (svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents: 3636
diff changeset
   645
				z += TILE_HEIGHT;
7f950533d510 (svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents: 3636
diff changeset
   646
				if (ti->tileh == SLOPE_STEEP_N) z += TILE_HEIGHT;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   647
			}
1864
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   648
			DrawGroundSpriteAt(_cur_dpi->zoom != 2 ? SPR_DOT : SPR_DOT_SMALL, ti->x, ti->y, z);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   649
		} else if (_thd.drawstyle & HT_RAIL /*&& _thd.place_mode == VHM_RAIL*/) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   650
			// autorail highlight piece under cursor
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   651
			uint type = _thd.drawstyle & 0xF;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   652
			assert(type <= 5);
2710
44278abd3ef9 (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
   653
			image = SPR_AUTORAIL_BASE + _AutorailTilehSprite[ti->tileh][_AutorailType[type][0]];
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   654
1864
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   655
			if (_thd.make_square_red) image |= PALETTE_SEL_TILE_RED;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   656
			DrawSelectionSprite(image, ti);
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   657
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   658
		} else if (IsPartOfAutoLine(ti->x, ti->y)) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   659
			// autorail highlighting long line
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   660
			int dir = _thd.drawstyle & ~0xF0;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   661
			uint side;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   662
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   663
			if (dir < 2) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   664
				side = 0;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   665
			} else {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   666
				TileIndex start = TileVirtXY(_thd.selstart.x, _thd.selstart.y);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   667
				int diffx = myabs(TileX(start) - TileX(ti->tile));
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   668
				int diffy = myabs(TileY(start) - TileY(ti->tile));
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   669
				side = myabs(diffx - diffy);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   670
			}
1109
ecb98f43ba2c (svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents: 1095
diff changeset
   671
2710
44278abd3ef9 (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
   672
			image = SPR_AUTORAIL_BASE + _AutorailTilehSprite[ti->tileh][_AutorailType[dir][side]];
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   673
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   674
			if (_thd.make_square_red) image |= PALETTE_SEL_TILE_RED;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   675
			DrawSelectionSprite(image, ti);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   676
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   677
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   678
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   679
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   680
	// Check if it's inside the outer area?
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   681
	if (_thd.outersize.x &&
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   682
			_thd.size.x < _thd.size.x + _thd.outersize.x &&
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   683
			IS_INSIDE_1D(ti->x, _thd.pos.x + _thd.offs.x, _thd.size.x + _thd.outersize.x) &&
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   684
			IS_INSIDE_1D(ti->y, _thd.pos.y + _thd.offs.y, _thd.size.y + _thd.outersize.y)) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   685
		// Draw a blue rect.
1864
80e13d54b061 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   686
		DrawSelectionSprite(PALETTE_SEL_TILE_BLUE | (SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh]), ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   687
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   688
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   689
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   690
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
   691
static void ViewportAddLandscape(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   692
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   693
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   694
	int x, y, width, height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   695
	TileInfo ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   696
	bool direction;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   697
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   698
	_cur_ti = &ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   699
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   700
	// Transform into tile coordinates and round to closest full tile
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   701
#if !defined(NEW_ROTATION)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   702
	x = ((vd->dpi.top >> 1) - (vd->dpi.left >> 2)) & ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   703
	y = ((vd->dpi.top >> 1) + (vd->dpi.left >> 2) - 0x10) & ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   704
#else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   705
	x = ((vd->dpi.top >> 1) + (vd->dpi.left >> 2) - 0x10) & ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   706
	y = ((vd->dpi.left >> 2) - (vd->dpi.top >> 1)) & ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   707
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   708
	// determine size of area
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   709
	{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   710
		Point pt = RemapCoords(x, y, 241);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   711
		width = (vd->dpi.left + vd->dpi.width - pt.x + 95) >> 6;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   712
		height = (vd->dpi.top + vd->dpi.height - pt.y) >> 5 << 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   713
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   714
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   715
	assert(width > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   716
	assert(height > 0);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   717
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   718
	direction = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   719
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   720
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   721
		int width_cur = width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   722
		int x_cur = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   723
		int y_cur = y;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   724
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   725
		do {
4238
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   726
			TileType tt;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   727
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   728
			ti.x = x_cur;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   729
			ti.y = y_cur;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   730
			if (0 <= x_cur && x_cur < (int)MapMaxX() * TILE_SIZE &&
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   731
					0 <= y_cur && y_cur < (int)MapMaxY() * TILE_SIZE) {
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   732
				TileIndex tile = TileVirtXY(x_cur, y_cur);
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   733
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   734
				ti.tile = tile;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   735
				ti.tileh = GetTileSlope(tile, &ti.z);
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   736
				tt = GetTileType(tile);
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   737
			} else {
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   738
				ti.tileh = SLOPE_FLAT;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   739
				ti.tile = 0;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   740
				ti.z = 0;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   741
				tt = MP_VOID;
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   742
			}
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   743
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   744
#if !defined(NEW_ROTATION)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   745
			y_cur += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   746
			x_cur -= 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   747
#else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   748
			y_cur += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   749
			x_cur += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   750
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   751
			_added_tile_sprite = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   752
			_offset_ground_sprites = false;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   753
4238
4b58d6ea4e5b (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   754
			_tile_type_procs[tt]->draw_tile_proc(&ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   755
			DrawTileSelection(&ti);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   756
		} while (--width_cur);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   757
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   758
#if !defined(NEW_ROTATION)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   759
		if ( (direction^=1) != 0)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   760
			y += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   761
		else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   762
			x += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   763
#else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   764
		if ( (direction^=1) != 0)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   765
			x += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   766
		else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   767
			y -= 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   768
#endif
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   769
	} while (--height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   770
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   771
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   772
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   773
static void ViewportAddTownNames(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   774
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   775
	Town *t;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   776
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   777
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   778
	if (!(_display_opt & DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   779
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   780
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   781
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   782
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   783
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   784
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   785
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   786
	switch (dpi->zoom) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   787
		case 0:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   788
			FOR_ALL_TOWNS(t) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   789
				if (bottom > t->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   790
						top    < t->sign.top + 12 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   791
						right  > t->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   792
						left   < t->sign.left + t->sign.width_1) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   793
					AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   794
						_patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   795
						t->index, t->population);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   796
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   797
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   798
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   799
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   800
		case 1:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   801
			right += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   802
			bottom += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   803
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   804
			FOR_ALL_TOWNS(t) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   805
				if (bottom > t->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   806
						top    < t->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   807
						right  > t->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   808
						left   < t->sign.left + t->sign.width_1*2) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   809
					AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   810
						_patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   811
						t->index, t->population);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   812
				}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   813
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   814
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   815
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   816
		default: NOT_REACHED();
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   817
		case 2:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   818
			right += 4;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   819
			bottom += 5;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   820
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   821
			FOR_ALL_TOWNS(t) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   822
				if (bottom > t->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   823
						top    < t->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   824
						right  > t->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   825
						left   < t->sign.left + t->sign.width_2*4) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   826
					AddStringToDraw(t->sign.left + 5, t->sign.top + 1, STR_TOWN_LABEL_TINY_BLACK, t->index, 0);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   827
					AddStringToDraw(t->sign.left + 1, t->sign.top - 3, STR_TOWN_LABEL_TINY_WHITE, t->index, 0);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   828
				}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   829
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   830
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   831
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   832
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   833
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   834
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   835
static void AddStation(const Station *st, StringID str, uint16 width)
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   836
{
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   837
	StringSpriteToDraw *sstd;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   838
5026
d589561bc43d (svn r7067) Remove the unused parameter params_3 from AddStringToDraw()
tron
parents: 5025
diff changeset
   839
	sstd = AddStringToDraw(st->sign.left + 1, st->sign.top + 1, str, st->index, st->facilities);
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   840
	if (sstd != NULL) {
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   841
		sstd->color = (st->owner == OWNER_NONE || st->facilities == 0) ? 0xE : _player_colors[st->owner];
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   842
		sstd->width = width;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   843
	}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   844
}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   845
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   846
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   847
static void ViewportAddStationNames(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   848
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   849
	int left, top, right, bottom;
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   850
	const Station *st;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   851
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   852
	if (!(_display_opt & DO_SHOW_STATION_NAMES) || _game_mode == GM_MENU)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   853
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   854
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   855
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   856
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   857
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   858
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   859
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   860
	switch (dpi->zoom) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   861
		case 0:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   862
			FOR_ALL_STATIONS(st) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   863
				if (bottom > st->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   864
						top    < st->sign.top + 12 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   865
						right  > st->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   866
						left   < st->sign.left + st->sign.width_1) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   867
					AddStation(st, STR_305C_0, st->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   868
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   869
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   870
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   871
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   872
		case 1:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   873
			right += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   874
			bottom += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   875
			FOR_ALL_STATIONS(st) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   876
				if (bottom > st->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   877
						top    < st->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   878
						right  > st->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   879
						left   < st->sign.left + st->sign.width_1*2) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   880
					AddStation(st, STR_305C_0, st->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   881
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   882
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   883
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   884
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   885
		default: NOT_REACHED();
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   886
		case 2:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   887
			right += 4;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   888
			bottom += 5;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   889
			FOR_ALL_STATIONS(st) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   890
				if (bottom > st->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   891
						top    < st->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   892
						right  > st->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   893
						left   < st->sign.left + st->sign.width_2*4) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   894
					AddStation(st, STR_STATION_SIGN_TINY, st->sign.width_2 | 0x8000);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   895
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   896
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   897
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   898
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   899
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   900
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   901
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   902
static void AddSign(const Sign *si, StringID str, uint16 width)
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   903
{
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   904
	StringSpriteToDraw *sstd;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   905
5026
d589561bc43d (svn r7067) Remove the unused parameter params_3 from AddStringToDraw()
tron
parents: 5025
diff changeset
   906
	sstd = AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->str, 0);
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   907
	if (sstd != NULL) {
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   908
		sstd->color = (si->owner == OWNER_NONE) ? 14 : _player_colors[si->owner];
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   909
		sstd->width = width;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   910
	}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   911
}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   912
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   913
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   914
static void ViewportAddSigns(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   915
{
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   916
	const Sign *si;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   917
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   918
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   919
	if (!(_display_opt & DO_SHOW_SIGNS))
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   920
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   921
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   922
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   923
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   924
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   925
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   926
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   927
	switch (dpi->zoom) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   928
		case 0:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   929
			FOR_ALL_SIGNS(si) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   930
				if (bottom > si->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   931
						top    < si->sign.top + 12 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   932
						right  > si->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   933
						left   < si->sign.left + si->sign.width_1) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   934
					AddSign(si, STR_2806, si->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   935
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   936
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   937
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   938
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   939
		case 1:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   940
			right += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   941
			bottom += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   942
			FOR_ALL_SIGNS(si) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   943
				if (bottom > si->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   944
						top    < si->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   945
						right  > si->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   946
						left   < si->sign.left + si->sign.width_1 * 2) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   947
					AddSign(si, STR_2806, si->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   948
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   949
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   950
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   951
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   952
		default: NOT_REACHED();
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   953
		case 2:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   954
			right += 4;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   955
			bottom += 5;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   956
			FOR_ALL_SIGNS(si) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   957
				if (bottom > si->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   958
						top    < si->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   959
						right  > si->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   960
						left   < si->sign.left + si->sign.width_2 * 4) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   961
					AddSign(si, STR_2002, si->sign.width_2 | 0x8000);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   962
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   963
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   964
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   965
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   966
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   967
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   968
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   969
static void AddWaypoint(const Waypoint *wp, StringID str, uint16 width)
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   970
{
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   971
	StringSpriteToDraw *sstd;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   972
5026
d589561bc43d (svn r7067) Remove the unused parameter params_3 from AddStringToDraw()
tron
parents: 5025
diff changeset
   973
	sstd = AddStringToDraw(wp->sign.left + 1, wp->sign.top + 1, str, wp->index, 0);
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   974
	if (sstd != NULL) {
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   975
		sstd->color = (wp->deleted ? 0xE : 11);
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   976
		sstd->width = width;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   977
	}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   978
}
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   979
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   980
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   981
static void ViewportAddWaypoints(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   982
{
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   983
	const Waypoint *wp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   984
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   985
395
788a9bba0889 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky).
darkvater
parents: 193
diff changeset
   986
	if (!(_display_opt & DO_WAYPOINTS))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   987
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   988
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   989
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   990
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   991
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   992
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   993
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   994
	switch (dpi->zoom) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   995
		case 0:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   996
			FOR_ALL_WAYPOINTS(wp) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   997
				if (bottom > wp->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   998
						top    < wp->sign.top + 12 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   999
						right  > wp->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1000
						left   < wp->sign.left + wp->sign.width_1) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1001
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT, wp->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1002
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1003
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1004
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1005
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1006
		case 1:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1007
			right += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1008
			bottom += 2;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1009
			FOR_ALL_WAYPOINTS(wp) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1010
				if (bottom > wp->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1011
						top    < wp->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1012
						right  > wp->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1013
						left   < wp->sign.left + wp->sign.width_1*2) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1014
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT, wp->sign.width_1);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1015
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1016
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1017
			break;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1018
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1019
		default: NOT_REACHED();
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1020
		case 2:
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1021
			right += 4;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1022
			bottom += 5;
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1023
			FOR_ALL_WAYPOINTS(wp) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1024
				if (bottom > wp->sign.top &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1025
						top    < wp->sign.top + 24 &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1026
						right  > wp->sign.left &&
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1027
						left   < wp->sign.left + wp->sign.width_2*4) {
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1028
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT_TINY, wp->sign.width_2 | 0x8000);
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1029
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1030
			}
5027
8dacdfc948d3 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1031
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1032
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1033
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1034
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1035
void UpdateViewportSignPos(ViewportSign *sign, int left, int top, StringID str)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1036
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1037
	char buffer[128];
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1038
	uint w;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1039
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1040
	sign->top = top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1041
4912
0f51b47cb983 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4885
diff changeset
  1042
	GetString(buffer, str, lastof(buffer));
4609
954fe701062f (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1043
	w = GetStringBoundingBox(buffer).width + 3;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1044
	sign->width_1 = w;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1045
	sign->left = left - w / 2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1046
4609
954fe701062f (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1047
	/* zoomed out version */
3798
b1f5290b36b1 (svn r4802) - Codechange: replace _stringwidth_base and associated magic numbers with a FontSize enum, using the numbers (which are SpriteIDs) in only the places needed.
peter1138
parents: 3645
diff changeset
  1048
	_cur_fontsize = FS_SMALL;
4609
954fe701062f (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1049
	w = GetStringBoundingBox(buffer).width + 3;
3798
b1f5290b36b1 (svn r4802) - Codechange: replace _stringwidth_base and associated magic numbers with a FontSize enum, using the numbers (which are SpriteIDs) in only the places needed.
peter1138
parents: 3645
diff changeset
  1050
	_cur_fontsize = FS_NORMAL;
1390
e7cdf3ce0fb6 (svn r1894) - Codechange: cleaned up the console a bit, wholly unified handling of text with that of editboxes
Darkvater
parents: 1363
diff changeset
  1051
	sign->width_2 = w;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1052
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1053
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1054
410
0efd84450b01 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
  1055
static void ViewportDrawTileSprites(TileSpriteToDraw *ts)
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1056
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1057
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1058
		Point pt = RemapCoords(ts->x, ts->y, ts->z);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1059
		DrawSprite(ts->image, pt.x, pt.y);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1060
		ts = ts->next;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1061
	} while (ts != NULL);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1062
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1063
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1064
static void ViewportSortParentSprites(ParentSpriteToDraw *psd[])
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1065
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1066
	while (*psd != NULL) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1067
		ParentSpriteToDraw* ps = *psd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1068
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1069
		if (!(ps->unk16 & 1)) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1070
			ParentSpriteToDraw** psd2 = psd;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1071
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1072
			ps->unk16 |= 1;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1073
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1074
			while (*++psd2 != NULL) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1075
				ParentSpriteToDraw* ps2 = *psd2;
4188
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1076
				ParentSpriteToDraw** psd3;
1934
b27bc12822cd (svn r2440) - Fix: [newgrf] Fix the spritesorter to handle overlapping sprites properly, this fixes display problems with really short wagons. (algorithm by patchman, ported by therax)
hackykid
parents: 1932
diff changeset
  1077
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1078
				if (ps2->unk16 & 1) continue;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1079
4187
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1080
				/* Decide which comparator to use, based on whether the bounding
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1081
				 * boxes overlap
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1082
				 */
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1083
				if (ps->xmax > ps2->xmin && ps->xmin < ps2->xmax && // overlap in X?
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1084
						ps->ymax > ps2->ymin && ps->ymin < ps2->ymax && // overlap in Y?
4eaf57b951c8 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1085
						ps->zmax > ps2->zmin && ps->zmin < ps2->zmax) { // overlap in Z?
4188
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1086
					/* Use X+Y+Z as the sorting order, so sprites closer to the bottom of
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1087
					 * the screen and with higher Z elevation, are drawn in front.
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1088
					 * Here X,Y,Z are the coordinates of the "center of mass" of the sprite,
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1089
					 * i.e. X=(left+right)/2, etc.
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1090
					 * However, since we only care about order, don't actually divide / 2
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1091
					 */
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1092
					if (ps->xmin + ps->xmax + ps->ymin + ps->ymax + ps->zmin + ps->zmax <=
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1093
							ps2->xmin + ps2->xmax + ps2->ymin + ps2->ymax + ps2->zmin + ps2->zmax) {
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1094
						continue;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1095
					}
1934
b27bc12822cd (svn r2440) - Fix: [newgrf] Fix the spritesorter to handle overlapping sprites properly, this fixes display problems with really short wagons. (algorithm by patchman, ported by therax)
hackykid
parents: 1932
diff changeset
  1096
				} else {
4188
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1097
					if (ps->xmax < ps2->xmin ||
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1098
							ps->ymax < ps2->ymin ||
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1099
							ps->zmax < ps2->zmin || (
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1100
								ps->xmin < ps2->xmax &&
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1101
								ps->ymin < ps2->ymax &&
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1102
								ps->zmin < ps2->zmax
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1103
							)) {
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1104
						continue;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1105
					}
1934
b27bc12822cd (svn r2440) - Fix: [newgrf] Fix the spritesorter to handle overlapping sprites properly, this fixes display problems with really short wagons. (algorithm by patchman, ported by therax)
hackykid
parents: 1932
diff changeset
  1106
				}
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1107
4188
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1108
				// Swap the two sprites ps and ps2 using bubble-sort algorithm.
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1109
				psd3 = psd;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1110
				do {
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1111
					ParentSpriteToDraw* temp = *psd3;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1112
					*psd3 = ps2;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1113
					ps2 = temp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1114
4188
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1115
					psd3++;
270af1cd03d4 (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1116
				} while (psd3 <= psd2);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1117
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1118
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1119
			psd++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1120
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1121
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1122
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1123
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1124
static void ViewportDrawParentSprites(ParentSpriteToDraw *psd[])
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1125
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1126
	for (; *psd != NULL; psd++) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1127
		const ParentSpriteToDraw* ps = *psd;
4186
6e55c6f0908b (svn r5628) Rename the attributes for the bounding box of struct ParentSpriteToDraw to something sensible. Half of them was totally off: right is left, bottom is top *sigh*
tron
parents: 4171
diff changeset
  1128
		Point pt = RemapCoords(ps->xmin, ps->ymin, ps->zmin);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1129
		const ChildScreenSpriteToDraw* cs;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1130
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1131
		DrawSprite(ps->image, pt.x, pt.y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1132
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1133
		for (cs = ps->child; cs != NULL; cs = cs->next) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1134
			DrawSprite(cs->image, ps->left + cs->x, ps->top + cs->y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1135
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1136
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1137
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1138
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1139
static void ViewportDrawStrings(DrawPixelInfo *dpi, const StringSpriteToDraw *ss)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1140
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1141
	DrawPixelInfo dp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1142
	byte zoom;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1143
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1144
	_cur_dpi = &dp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1145
	dp = *dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1146
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1147
	zoom = dp.zoom;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1148
	dp.zoom = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1149
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1150
	dp.left >>= zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1151
	dp.top >>= zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1152
	dp.width >>= zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1153
	dp.height >>= zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1154
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1155
	do {
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1156
		uint16 colour;
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1157
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1158
		if (ss->width != 0) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1159
			int x = (ss->x >> zoom) - 1;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1160
			int y = (ss->y >> zoom) - 1;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1161
			int bottom = y + 11;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1162
			int w = ss->width;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1163
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1164
			if (w & 0x8000) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1165
				w &= ~0x8000;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1166
				y--;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1167
				bottom -= 6;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1168
				w -= 3;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1169
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1170
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1171
		/* Draw the rectangle if 'tranparent station signs' is off,
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1172
		 * or if we are drawing a general text sign (STR_2806) */
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1173
			if (!(_display_opt & DO_TRANS_SIGNS) || ss->string == STR_2806)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1174
				DrawFrameRect(
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1175
					x, y, x + w, bottom, ss->color,
4439
00ac1d17d72e (svn r6211) Commit file forgotten in r6210
tron
parents: 4349
diff changeset
  1176
					(_display_opt & DO_TRANS_BUILDINGS) ? FR_TRANSPARENT : 0
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1177
				);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1178
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1179
534
306bc86eb23e (svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents: 507
diff changeset
  1180
		SetDParam(0, ss->params[0]);
306bc86eb23e (svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents: 507
diff changeset
  1181
		SetDParam(1, ss->params[1]);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1182
		/* if we didn't draw a rectangle, or if transparant building is on,
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1183
		 * draw the text in the color the rectangle would have */
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1184
		if ((
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1185
					(_display_opt & DO_TRANS_BUILDINGS) ||
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1186
					(_display_opt & DO_TRANS_SIGNS && ss->string != STR_2806)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1187
				) && ss->width != 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1188
			/* Real colors need the IS_PALETTE_COLOR flag
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1189
			 * otherwise colors from _string_colormap are assumed. */
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1190
			colour = _colour_gradient[ss->color][6] | IS_PALETTE_COLOR;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1191
		} else {
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1192
			colour = 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1193
		}
5025
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1194
		DrawString(
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1195
			ss->x >> zoom, (ss->y >> zoom) - (ss->width & 0x8000 ? 2 : 0),
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1196
			ss->string, colour
889b0b291d12 (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1197
		);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1198
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1199
		ss = ss->next;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1200
	} while (ss != NULL);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1201
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1202
430
2e9a2e9fcf11 (svn r631) Merge r440, r444, r485, r630 to trunk:
tron
parents: 410
diff changeset
  1203
void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1204
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1205
	ViewportDrawer vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1206
	int mask;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1207
	int x;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1208
	int y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1209
	DrawPixelInfo *old_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1210
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1211
	byte mem[VIEWPORT_DRAW_MEM];
137
73f897e1bf4a (svn r138) -Add: 64x64 stations are now nicely painted (increased size of
truelight
parents: 133
diff changeset
  1212
	ParentSpriteToDraw *parent_list[6144];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1213
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1214
	_cur_vd = &vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1215
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1216
	old_dpi = _cur_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1217
	_cur_dpi = &vd.dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1218
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1219
	vd.dpi.zoom = vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1220
	mask = (-1) << vp->zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1221
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1222
	vd.combine_sprites = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1223
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1224
	vd.dpi.width = (right - left) & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1225
	vd.dpi.height = (bottom - top) & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1226
	vd.dpi.left = left & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1227
	vd.dpi.top = top & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1228
	vd.dpi.pitch = old_dpi->pitch;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1229
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1230
	x = ((vd.dpi.left - (vp->virtual_left&mask)) >> vp->zoom) + vp->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1231
	y = ((vd.dpi.top - (vp->virtual_top&mask)) >> vp->zoom) + vp->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1232
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1233
	vd.dpi.dst_ptr = old_dpi->dst_ptr + x - old_dpi->left + (y - old_dpi->top) * old_dpi->pitch;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1234
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1235
	vd.parent_list = parent_list;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1236
	vd.eof_parent_list = endof(parent_list);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1237
	vd.spritelist_mem = mem;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1238
	vd.eof_spritelist_mem = endof(mem) - sizeof(LARGEST_SPRITELIST_STRUCT);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1239
	vd.last_string = &vd.first_string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1240
	vd.first_string = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1241
	vd.last_tile = &vd.first_tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1242
	vd.first_tile = NULL;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1243
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1244
	ViewportAddLandscape();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1245
#if !defined(NEW_ROTATION)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1246
	ViewportAddVehicles(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1247
	DrawTextEffects(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1248
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1249
	ViewportAddTownNames(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1250
	ViewportAddStationNames(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1251
	ViewportAddSigns(&vd.dpi);
395
788a9bba0889 (svn r587) -newgrf: Rename all /Checkpoint/i tokens to 'Waypoint's. The name actually makes some sense and is also compatible with TTDPatch (pasky).
darkvater
parents: 193
diff changeset
  1252
	ViewportAddWaypoints(&vd.dpi);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1253
#endif
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1254
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
  1255
	// This assert should never happen (because the length of the parent_list
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
  1256
	//  is checked)
979
11ea18598e16 (svn r1475) Fix some more signed/unsigned comparison warnings
tron
parents: 926
diff changeset
  1257
	assert(vd.parent_list <= endof(parent_list));
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
  1258
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1259
	if (vd.first_tile != NULL) ViewportDrawTileSprites(vd.first_tile);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1260
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1261
	/* null terminate parent sprite list */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1262
	*vd.parent_list = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1263
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1264
	ViewportSortParentSprites(parent_list);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1265
	ViewportDrawParentSprites(parent_list);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1266
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1267
	if (vd.first_string != NULL) ViewportDrawStrings(&vd.dpi, vd.first_string);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1268
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1269
	_cur_dpi = old_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1270
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1271
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1272
// Make sure we don't draw a too big area at a time.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1273
// If we do, the sprite memory will overflow.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1274
static void ViewportDrawChk(ViewPort *vp, int left, int top, int right, int bottom)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1275
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1276
	if (((bottom - top) * (right - left) << vp->zoom) > 180000) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1277
		if ((bottom - top) > (right - left)) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1278
			int t = (top + bottom) >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1279
			ViewportDrawChk(vp, left, top, right, t);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1280
			ViewportDrawChk(vp, left, t, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1281
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1282
			int t = (left + right) >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1283
			ViewportDrawChk(vp, left, top, t, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1284
			ViewportDrawChk(vp, t, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1285
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1286
	} else {
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1287
		ViewportDoDraw(vp,
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1288
			((left - vp->left) << vp->zoom) + vp->virtual_left,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1289
			((top - vp->top) << vp->zoom) + vp->virtual_top,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1290
			((right - vp->left) << vp->zoom) + vp->virtual_left,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1291
			((bottom - vp->top) << vp->zoom) + vp->virtual_top
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1292
		);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1293
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1294
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1295
500
8e52f7797b48 (svn r793) Merge INLINE -> inline replacement (revision 376)
tron
parents: 497
diff changeset
  1296
static inline void ViewportDraw(ViewPort *vp, int left, int top, int right, int bottom)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1297
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1298
	if (right <= vp->left || bottom <= vp->top) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1299
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1300
	if (left >= vp->left + vp->width) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1301
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1302
	if (left < vp->left) left = vp->left;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1303
	if (right > vp->left + vp->width) right = vp->left + vp->width;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1304
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1305
	if (top >= vp->top + vp->height) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1306
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1307
	if (top < vp->top) top = vp->top;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1308
	if (bottom > vp->top + vp->height) bottom = vp->top + vp->height;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1309
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1310
	ViewportDrawChk(vp, left, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1311
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1312
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1313
void DrawWindowViewport(Window *w)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1314
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1315
	DrawPixelInfo *dpi = _cur_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1316
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1317
	dpi->left += w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1318
	dpi->top += w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1319
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1320
	ViewportDraw(w->viewport, dpi->left, dpi->top, dpi->left + dpi->width, dpi->top + dpi->height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1321
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1322
	dpi->left -= w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1323
	dpi->top -= w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1324
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1325
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1326
void UpdateViewportPosition(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1327
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1328
	const ViewPort *vp = w->viewport;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1329
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1330
	if (WP(w, vp_d).follow_vehicle != INVALID_VEHICLE) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1331
		const Vehicle* veh = GetVehicle(WP(w,vp_d).follow_vehicle);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1332
		Point pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1333
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1334
		SetViewportPosition(w, pt.x, pt.y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1335
	} else {
632
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1336
#if !defined(NEW_ROTATION)
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1337
		int x;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1338
		int y;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1339
		int vx;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1340
		int vy;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1341
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1342
		// Center of the viewport is hot spot
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1343
		x = WP(w,vp_d).scrollpos_x + vp->virtual_width / 2;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1344
		y = WP(w,vp_d).scrollpos_y + vp->virtual_height / 2;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1345
		// Convert viewport coordinates to map coordinates
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1346
		// Calculation is scaled by 4 to avoid rounding errors
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1347
		vx = -x + y * 2;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1348
		vy =  x + y * 2;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1349
		// clamp to size of map
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1350
		vx = clamp(vx, 0 * 4, MapMaxX() * TILE_SIZE * 4);
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1351
		vy = clamp(vy, 0 * 4, MapMaxY() * TILE_SIZE * 4);
632
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1352
		// Convert map coordinates to viewport coordinates
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1353
		x = (-vx + vy) / 2;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1354
		y = ( vx + vy) / 4;
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1355
		// Set position
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1356
		WP(w, vp_d).scrollpos_x = x - vp->virtual_width / 2;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1357
		WP(w, vp_d).scrollpos_y = y - vp->virtual_height / 2;
632
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1358
#else
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1359
		int x,y,t;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1360
		int err;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1361
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1362
		x = WP(w,vp_d).scrollpos_x >> 2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1363
		y = WP(w,vp_d).scrollpos_y >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1364
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1365
		t = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1366
		x = x + y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1367
		y = x - y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1368
		err= 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1369
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1370
		if (err != 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1371
			/* coordinate remap */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1372
			Point pt = RemapCoords(x, y, 0);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1373
			t = (-1) << vp->zoom;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1374
			WP(w,vp_d).scrollpos_x = pt.x & t;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1375
			WP(w,vp_d).scrollpos_y = pt.y & t;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1376
		}
632
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1377
#endif
6528428cbebb (svn r1063) Improve scrolling limits a bit. You now can scroll further away from the map at the NW and NE edge.
tron
parents: 534
diff changeset
  1378
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1379
		SetViewportPosition(w, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1380
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1381
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1382
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1383
static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, int bottom)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1384
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1385
	right -= vp->virtual_left;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1386
	if (right <= 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1387
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1388
	bottom -= vp->virtual_top;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1389
	if (bottom <= 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1390
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1391
	left = max(0, left - vp->virtual_left);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1392
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1393
	if (left >= vp->virtual_width) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1394
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1395
	top = max(0, top - vp->virtual_top);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1396
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1397
	if (top >= vp->virtual_height) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1398
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1399
	SetDirtyBlocks(
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1400
		(left >> vp->zoom) + vp->left,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1401
		(top >> vp->zoom) + vp->top,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1402
		(right >> vp->zoom) + vp->left,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1403
		(bottom >> vp->zoom) + vp->top
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1404
	);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1405
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1406
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1407
void MarkAllViewportsDirty(int left, int top, int right, int bottom)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1408
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1409
	const ViewPort *vp = _viewports;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1410
	uint32 act = _active_viewports;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1411
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1412
		if (act & 1) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1413
			assert(vp->width != 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1414
			MarkViewportDirty(vp, left, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1415
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1416
	} while (vp++,act>>=1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1417
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1418
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1419
void MarkTileDirtyByTile(TileIndex tile)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1420
{
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1421
	Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, GetTileZ(tile));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1422
	MarkAllViewportsDirty(
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1423
		pt.x - 31,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1424
		pt.y - 122,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1425
		pt.x - 31 + 67,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1426
		pt.y - 122 + 154
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1427
	);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1428
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1429
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1430
void MarkTileDirty(int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1431
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1432
	uint z = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1433
	Point pt;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1434
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1435
	if (IS_INT_INSIDE(x, 0, MapSizeX() * TILE_SIZE) &&
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1436
			IS_INT_INSIDE(y, 0, MapSizeY() * TILE_SIZE))
1980
6c5917cfcb78 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  1437
		z = GetTileZ(TileVirtXY(x, y));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1438
	pt = RemapCoords(x, y, z);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1439
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1440
	MarkAllViewportsDirty(
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1441
		pt.x - 31,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1442
		pt.y - 122,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1443
		pt.x - 31 + 67,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1444
		pt.y - 122 + 154
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1445
	);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1446
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1447
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  1448
static void SetSelectionTilesDirty(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1449
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1450
	int y_size, x_size;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1451
	int x = _thd.pos.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1452
	int y = _thd.pos.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1453
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1454
	x_size = _thd.size.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1455
	y_size = _thd.size.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1456
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1457
	if (_thd.outersize.x) {
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1458
		x_size += _thd.outersize.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1459
		x += _thd.offs.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1460
		y_size += _thd.outersize.y;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1461
		y += _thd.offs.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1462
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1463
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1464
	assert(x_size > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1465
	assert(y_size > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1466
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1467
	x_size += x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1468
	y_size += y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1469
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1470
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1471
		int y_bk = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1472
		do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1473
			MarkTileDirty(x, y);
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1474
		} while ( (y += TILE_SIZE) != y_size);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1475
		y = y_bk;
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1476
	} while ( (x += TILE_SIZE) != x_size);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1477
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1478
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1479
1990
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1480
void SetSelectionRed(bool b)
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1481
{
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1482
	_thd.make_square_red = b;
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1483
	SetSelectionTilesDirty();
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1484
}
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1485
efb67f977138 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1486
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1487
static bool CheckClickOnTown(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1488
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1489
	const Town *t;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1490
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1491
	if (!(_display_opt & DO_SHOW_TOWN_NAMES)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1492
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1493
	switch (vp->zoom) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1494
		case 0:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1495
			x = x - vp->left + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1496
			y = y - vp->top  + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1497
			FOR_ALL_TOWNS(t) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1498
				if (y >= t->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1499
						y < t->sign.top + 12 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1500
						x >= t->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1501
						x < t->sign.left + t->sign.width_1) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1502
					ShowTownViewWindow(t->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1503
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1504
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1505
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1506
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1507
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1508
		case 1:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1509
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1510
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1511
			FOR_ALL_TOWNS(t) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1512
				if (y >= t->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1513
						y < t->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1514
						x >= t->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1515
						x < t->sign.left + t->sign.width_1 * 2) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1516
					ShowTownViewWindow(t->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1517
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1518
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1519
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1520
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1521
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1522
		default:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1523
			x = (x - vp->left + 3) * 4 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1524
			y = (y - vp->top  + 3) * 4 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1525
			FOR_ALL_TOWNS(t) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1526
				if (y >= t->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1527
						y < t->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1528
						x >= t->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1529
						x < t->sign.left + t->sign.width_2 * 4) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1530
					ShowTownViewWindow(t->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1531
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1532
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1533
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1534
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1535
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1536
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1537
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1538
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1539
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1540
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1541
static bool CheckClickOnStation(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1542
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1543
	const Station *st;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1544
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1545
	if (!(_display_opt & DO_SHOW_STATION_NAMES)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1546
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1547
	switch (vp->zoom) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1548
		case 0:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1549
			x = x - vp->left + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1550
			y = y - vp->top  + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1551
			FOR_ALL_STATIONS(st) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1552
				if (y >= st->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1553
						y < st->sign.top + 12 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1554
						x >= st->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1555
						x < st->sign.left + st->sign.width_1) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1556
					ShowStationViewWindow(st->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1557
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1558
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1559
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1560
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1561
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1562
		case 1:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1563
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1564
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1565
			FOR_ALL_STATIONS(st) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1566
				if (y >= st->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1567
						y < st->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1568
						x >= st->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1569
						x < st->sign.left + st->sign.width_1 * 2) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1570
					ShowStationViewWindow(st->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1571
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1572
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1573
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1574
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1575
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1576
		default:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1577
			x = (x - vp->left + 3) * 4 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1578
			y = (y - vp->top  + 3) * 4 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1579
			FOR_ALL_STATIONS(st) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1580
				if (y >= st->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1581
						y < st->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1582
						x >= st->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1583
						x < st->sign.left + st->sign.width_2 * 4) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1584
					ShowStationViewWindow(st->index);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1585
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1586
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1587
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1588
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1589
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1590
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1591
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1592
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1593
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1594
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1595
static bool CheckClickOnSign(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1596
{
4349
1016170ae0cb (svn r6050) -Codechange: mass-renamed SignStruct -> Sign and ss -> si. Now functions and variables all match eachother
truelight
parents: 4346
diff changeset
  1597
	const Sign *si;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1598
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1599
	if (!(_display_opt & DO_SHOW_SIGNS)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1600
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1601
	switch (vp->zoom) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1602
		case 0:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1603
			x = x - vp->left + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1604
			y = y - vp->top  + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1605
			FOR_ALL_SIGNS(si) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1606
				if (y >= si->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1607
						y <  si->sign.top + 12 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1608
						x >= si->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1609
						x <  si->sign.left + si->sign.width_1) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1610
					ShowRenameSignWindow(si);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1611
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1612
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1613
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1614
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1615
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1616
		case 1:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1617
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1618
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1619
			FOR_ALL_SIGNS(si) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1620
				if (y >= si->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1621
						y <  si->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1622
						x >= si->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1623
						x <  si->sign.left + si->sign.width_1 * 2) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1624
					ShowRenameSignWindow(si);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1625
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1626
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1627
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1628
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1629
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1630
		default:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1631
			x = (x - vp->left + 3) * 4 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1632
			y = (y - vp->top  + 3) * 4 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1633
			FOR_ALL_SIGNS(si) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1634
				if (y >= si->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1635
						y <  si->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1636
						x >= si->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1637
						x <  si->sign.left + si->sign.width_2 * 4) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1638
					ShowRenameSignWindow(si);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1639
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1640
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1641
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1642
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1643
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1644
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1645
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1646
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1647
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1648
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1649
static bool CheckClickOnWaypoint(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1650
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1651
	const Waypoint *wp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1652
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1653
	if (!(_display_opt & DO_WAYPOINTS)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1654
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1655
	switch (vp->zoom) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1656
		case 0:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1657
			x = x - vp->left + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1658
			y = y - vp->top  + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1659
			FOR_ALL_WAYPOINTS(wp) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1660
				if (y >= wp->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1661
						y < wp->sign.top + 12 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1662
						x >= wp->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1663
						x < wp->sign.left + wp->sign.width_1) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1664
					ShowRenameWaypointWindow(wp);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1665
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1666
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1667
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1668
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1669
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1670
		case 1:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1671
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1672
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1673
			FOR_ALL_WAYPOINTS(wp) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1674
				if (y >= wp->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1675
						y < wp->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1676
						x >= wp->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1677
						x < wp->sign.left + wp->sign.width_1 * 2) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1678
					ShowRenameWaypointWindow(wp);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1679
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1680
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1681
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1682
			break;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1683
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1684
		default:
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1685
			x = (x - vp->left + 3) * 4 + vp->virtual_left;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1686
			y = (y - vp->top  + 3) * 4 + vp->virtual_top;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1687
			FOR_ALL_WAYPOINTS(wp) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1688
				if (y >= wp->sign.top &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1689
						y < wp->sign.top + 24 &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1690
						x >= wp->sign.left &&
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1691
						x < wp->sign.left + wp->sign.width_2 * 4) {
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1692
					ShowRenameWaypointWindow(wp);
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1693
					return true;
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1694
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1695
			}
4471
f8130f9bd1e3 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1696
			break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1697
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1698
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1699
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1700
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1701
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1702
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1703
static void CheckClickOnLandscape(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1704
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1705
	Point pt = TranslateXYToTileCoord(vp, x, y);
1977
37bbebf94434 (svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents: 1964
diff changeset
  1706
1980
6c5917cfcb78 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  1707
	if (pt.x != -1) ClickTile(TileVirtXY(pt.x, pt.y));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1708
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1709
2662
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1710
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1711
static void SafeShowTrainViewWindow(const Vehicle* v)
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1712
{
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  1713
	if (!IsFrontEngine(v)) v = GetFirstVehicleInChain(v);
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  1714
	ShowTrainViewWindow(v);
2662
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1715
}
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1716
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1717
static void Nop(const Vehicle *v) {}
2662
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1718
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1719
typedef void OnVehicleClickProc(const Vehicle *v);
2662
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1720
static OnVehicleClickProc* const _on_vehicle_click_proc[] = {
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1721
	SafeShowTrainViewWindow,
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1722
	ShowRoadVehViewWindow,
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1723
	ShowShipViewWindow,
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1724
	ShowAircraftViewWindow,
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1725
	Nop, // Special vehicles
8b46824bd821 (svn r3204) Make handling of clicking on vehicles a bit less ugly by avoiding function declarations in .c files and unnecessary indirection
tron
parents: 2484
diff changeset
  1726
	Nop  // Disaster vehicles
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1727
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1728
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1729
void HandleViewportClicked(const ViewPort *vp, int x, int y)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1730
{
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1731
	const Vehicle *v;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1732
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1733
	if (CheckClickOnTown(vp, x, y)) return;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1734
	if (CheckClickOnStation(vp, x, y)) return;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1735
	if (CheckClickOnSign(vp, x, y)) return;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1736
	if (CheckClickOnWaypoint(vp, x, y)) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1737
	CheckClickOnLandscape(vp, x, y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1738
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1739
	v = CheckClickOnVehicle(vp, x, y);
3809
d67cd0232924 (svn r4819) -Debug: When clicking on a vehicle in the viewport, the index and address of the vehicle get dumped for "misc" debug levels >= 2
celestar
parents: 3798
diff changeset
  1740
	if (v != NULL) {
d67cd0232924 (svn r4819) -Debug: When clicking on a vehicle in the viewport, the index and address of the vehicle get dumped for "misc" debug levels >= 2
celestar
parents: 3798
diff changeset
  1741
		DEBUG(misc, 2) ("Vehicle %d at %p", v->index, v);
d67cd0232924 (svn r4819) -Debug: When clicking on a vehicle in the viewport, the index and address of the vehicle get dumped for "misc" debug levels >= 2
celestar
parents: 3798
diff changeset
  1742
		_on_vehicle_click_proc[v->type - 0x10](v);
d67cd0232924 (svn r4819) -Debug: When clicking on a vehicle in the viewport, the index and address of the vehicle get dumped for "misc" debug levels >= 2
celestar
parents: 3798
diff changeset
  1743
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1744
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1745
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  1746
Vehicle *CheckMouseOverVehicle(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1747
{
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1748
	const Window *w;
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1749
	const ViewPort *vp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1750
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1751
	int x = _cursor.pos.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1752
	int y = _cursor.pos.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1753
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1754
	w = FindWindowFromPt(x, y);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1755
	if (w == NULL) return NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1756
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1757
	vp = IsPtInWindowViewport(w, x, y);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1758
	return (vp != NULL) ? CheckClickOnVehicle(vp, x, y) : NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1759
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1760
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1761
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1762
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  1763
void PlaceObject(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1764
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1765
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1766
	Window *w;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1767
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1768
	pt = GetTileBelowCursor();
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1769
	if (pt.x == -1) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1770
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1771
	if (_thd.place_mode == VHM_POINT) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1772
		pt.x += 8;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1773
		pt.y += 8;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1774
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1775
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1776
	_tile_fract_coords.x = pt.x & 0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1777
	_tile_fract_coords.y = pt.y & 0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1778
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1779
	w = GetCallbackWnd();
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1780
	if (w != NULL) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1781
		WindowEvent e;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1782
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1783
		e.event = WE_PLACE_OBJ;
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  1784
		e.we.place.pt = pt;
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  1785
		e.we.place.tile = TileVirtXY(pt.x, pt.y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1786
		w->wndproc(w, &e);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1787
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1788
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1789
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1790
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1791
/* scrolls the viewport in a window to a given location */
4171
5c6e60c392c3 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1792
bool ScrollWindowTo(int x , int y, Window *w)
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1793
{
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1794
	Point pt;
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1795
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1796
	pt = MapXYZToViewport(w->viewport, x, y, GetSlopeZ(x, y));
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1797
	WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1798
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1799
	if (WP(w, vp_d).scrollpos_x == pt.x && WP(w, vp_d).scrollpos_y == pt.y)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1800
		return false;
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1801
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1802
	WP(w, vp_d).scrollpos_x = pt.x;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1803
	WP(w, vp_d).scrollpos_y = pt.y;
152
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1804
	return true;
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1805
}
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1806
c3964b43943e (svn r153) -Feature: [1009710] Extra Viewport. In the minimap dropdown menu, open a new viewport to have a quick look at your favorite map-positions. Independent zoom and quick jump to/from viewport (Dribbel)
darkvater
parents: 137
diff changeset
  1807
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1808
bool ScrollMainWindowTo(int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1809
{
4339
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1810
	Window *w;
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1811
	bool res = ScrollWindowTo(x, y, FindWindowById(WC_MAIN_WINDOW, 0));
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1812
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1813
	/* If a user scrolls to a tile (via what way what so ever) and already is on
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1814
	 *  that tile (e.g.: pressed twice), move the smallmap to that location,
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1815
	 *  so you directly see where you are on the smallmap. */
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1816
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1817
	if (res) return res;
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1818
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1819
	w = FindWindowById(WC_SMALLMAP, 0);
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1820
	if (w == NULL) return res;
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1821
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1822
	SmallMapCenterOnCurrentPos(w);
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1823
0b1c9f47e69b (svn r6040) -Add: when clicking twice on a Location Button, the SmallMap centers on your position (based on FS#54 by thomasdev)
truelight
parents: 4334
diff changeset
  1824
	return res;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1825
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1826
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1827
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1828
bool ScrollMainWindowToTile(TileIndex tile)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1829
{
3645
7f950533d510 (svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents: 3636
diff changeset
  1830
	return ScrollMainWindowTo(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1831
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1832
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1833
void SetRedErrorSquare(TileIndex tile)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1834
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1835
	TileIndex old;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1836
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1837
	old = _thd.redsq;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1838
	_thd.redsq = tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1839
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1840
	if (tile != old) {
3281
757d7da49445 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
  1841
		if (tile != 0) MarkTileDirtyByTile(tile);
757d7da49445 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
  1842
		if (old  != 0) MarkTileDirtyByTile(old);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1843
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1844
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1845
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1846
void SetTileSelectSize(int w, int h)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1847
{
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1848
	_thd.new_size.x = w * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1849
	_thd.new_size.y = h * TILE_SIZE;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1850
	_thd.new_outersize.x = 0;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1851
	_thd.new_outersize.y = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1852
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1853
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1854
void SetTileSelectBigSize(int ox, int oy, int sx, int sy)
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1855
{
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1856
	_thd.offs.x = ox * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1857
	_thd.offs.y = oy * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1858
	_thd.new_outersize.x = sx * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1859
	_thd.new_outersize.y = sy * TILE_SIZE;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1860
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1861
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1862
/* returns the best autorail highlight type from map coordinates */
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1863
static byte GetAutorailHT(int x, int y)
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1864
{
2710
44278abd3ef9 (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
  1865
	return HT_RAIL | _AutorailPiece[x & 0xF][y & 0xF];
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1866
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1867
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1868
// called regular to update tile highlighting in all cases
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  1869
void UpdateTileSelection(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1870
{
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1871
	int x1;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1872
	int y1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1873
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1874
	_thd.new_drawstyle = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1875
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1876
	if (_thd.place_mode == VHM_SPECIAL) {
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1877
		x1 = _thd.selend.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1878
		y1 = _thd.selend.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1879
		if (x1 != -1) {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1880
			int x2 = _thd.selstart.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1881
			int y2 = _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1882
			x1 &= ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1883
			y1 &= ~0xF;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1884
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1885
			if (x1 >= x2) intswap(x1,x2);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1886
			if (y1 >= y2) intswap(y1,y2);
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1887
			_thd.new_pos.x = x1;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1888
			_thd.new_pos.y = y1;
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1889
			_thd.new_size.x = x2 - x1 + TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1890
			_thd.new_size.y = y2 - y1 + TILE_SIZE;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1891
			_thd.new_drawstyle = _thd.next_drawstyle;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1892
		}
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1893
	} else if (_thd.place_mode != VHM_NONE) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1894
		Point pt = GetTileBelowCursor();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1895
		x1 = pt.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1896
		y1 = pt.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1897
		if (x1 != -1) {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1898
			switch (_thd.place_mode) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1899
				case VHM_RECT:
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1900
					_thd.new_drawstyle = HT_RECT;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1901
					break;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1902
				case VHM_POINT:
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1903
					_thd.new_drawstyle = HT_POINT;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1904
					x1 += 8;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1905
					y1 += 8;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1906
					break;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1907
				case VHM_RAIL:
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1908
					_thd.new_drawstyle = GetAutorailHT(pt.x, pt.y); // draw one highlighted tile
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1909
			}
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1910
			_thd.new_pos.x = x1 & ~0xF;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1911
			_thd.new_pos.y = y1 & ~0xF;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1912
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1913
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1914
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1915
	// redraw selection
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1916
	if (_thd.drawstyle != _thd.new_drawstyle ||
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1917
			_thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y ||
4539
0004dc6c3777 (svn r6368) -Fix [FS#136]: Station catchment area persists after switching tools. The
Darkvater
parents: 4523
diff changeset
  1918
			_thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y ||
0004dc6c3777 (svn r6368) -Fix [FS#136]: Station catchment area persists after switching tools. The
Darkvater
parents: 4523
diff changeset
  1919
	    _thd.outersize.x != _thd.new_outersize.x ||
0004dc6c3777 (svn r6368) -Fix [FS#136]: Station catchment area persists after switching tools. The
Darkvater
parents: 4523
diff changeset
  1920
	    _thd.outersize.y != _thd.new_outersize.y) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1921
		// clear the old selection?
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1922
		if (_thd.drawstyle) SetSelectionTilesDirty();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1923
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1924
		_thd.drawstyle = _thd.new_drawstyle;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1925
		_thd.pos = _thd.new_pos;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1926
		_thd.size = _thd.new_size;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1927
		_thd.outersize = _thd.new_outersize;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1928
		_thd.dirty = 0xff;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1929
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1930
		// draw the new selection?
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1931
		if (_thd.new_drawstyle) SetSelectionTilesDirty();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1932
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1933
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1934
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1935
// highlighting tiles while only going over them with the mouse
1977
37bbebf94434 (svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents: 1964
diff changeset
  1936
void VpStartPlaceSizing(TileIndex tile, int user)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1937
{
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1938
	_thd.userdata = user;
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1939
	_thd.selend.x = TileX(tile) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1940
	_thd.selstart.x = TileX(tile) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1941
	_thd.selend.y = TileY(tile) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1942
	_thd.selstart.y = TileY(tile) * TILE_SIZE;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1943
	if (_thd.place_mode == VHM_RECT) {
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1944
		_thd.place_mode = VHM_SPECIAL;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1945
		_thd.next_drawstyle = HT_RECT;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1946
	} else if (_thd.place_mode == VHM_RAIL) { // autorail one piece
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1947
		_thd.place_mode = VHM_SPECIAL;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1948
		_thd.next_drawstyle = _thd.drawstyle;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1949
	} else {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1950
		_thd.place_mode = VHM_SPECIAL;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1951
		_thd.next_drawstyle = HT_POINT;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1952
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1953
	_special_mouse_mode = WSM_SIZING;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1954
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1955
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1956
void VpSetPlaceSizingLimit(int limit)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1957
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1958
	_thd.sizelimit = limit;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1959
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1960
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1961
/**
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1962
* Highlights all tiles between a set of two tiles. Used in dock and tunnel placement
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1963
* @param from TileIndex of the first tile to highlight
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1964
* @param to TileIndex of the last tile to highlight */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1965
void VpSetPresizeRange(TileIndex from, TileIndex to)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1966
{
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1967
	uint distance = DistanceManhattan(from, to) + 1;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1968
3421
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1969
	_thd.selend.x = TileX(to) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1970
	_thd.selend.y = TileY(to) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1971
	_thd.selstart.x = TileX(from) * TILE_SIZE;
7968a4b5ff0a (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1972
	_thd.selstart.y = TileY(from) * TILE_SIZE;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1973
	_thd.next_drawstyle = HT_RECT;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1974
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1975
	/* show measurement only if there is any length to speak of */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  1976
	if (distance > 1) GuiShowTooltipsWithArgs(STR_MEASURE_LENGTH, 1, &distance);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1977
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1978
2817
cdf488223c23 (svn r3365) Staticise 36 functions
tron
parents: 2816
diff changeset
  1979
static void VpStartPreSizing(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1980
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1981
	_thd.selend.x = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1982
	_special_mouse_mode = WSM_PRESIZE;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1983
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1984
1109
ecb98f43ba2c (svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents: 1095
diff changeset
  1985
/* returns information about the 2x1 piece to be build.
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1986
 * The lower bits (0-3) are the track type. */
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1987
static byte Check2x1AutoRail(int mode)
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1988
{
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1989
	int fxpy = _tile_fract_coords.x + _tile_fract_coords.y;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1990
	int sxpy = (_thd.selend.x & 0xF) + (_thd.selend.y & 0xF);
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1991
	int fxmy = _tile_fract_coords.x - _tile_fract_coords.y;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1992
	int sxmy = (_thd.selend.x & 0xF) - (_thd.selend.y & 0xF);
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1993
2952
58522ed8f0f1 (svn r3511) More whitespace ([FS#46] by Rubidium)
tron
parents: 2817
diff changeset
  1994
	switch (mode) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1995
	case 0: // end piece is lower right
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1996
		if (fxpy >= 20 && sxpy <= 12) { /*SwapSelection(); DoRailroadTrack(0); */return 3; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1997
		if (fxmy < -3 && sxmy > 3) {/* DoRailroadTrack(0); */return 5; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1998
		return 1;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1999
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2000
	case 1:
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2001
		if (fxmy > 3 && sxmy < -3) { /*SwapSelection(); DoRailroadTrack(0); */return 4; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2002
		if (fxpy <= 12 && sxpy >= 20) { /*DoRailroadTrack(0); */return 2; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2003
		return 1;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2004
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2005
	case 2:
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2006
		if (fxmy > 3 && sxmy < -3) { /*DoRailroadTrack(3);*/ return 4; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2007
		if (fxpy >= 20 && sxpy <= 12) { /*SwapSelection(); DoRailroadTrack(0); */return 3; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2008
		return 0;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2009
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2010
	case 3:
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2011
		if (fxmy < -3 && sxmy > 3) { /*SwapSelection(); DoRailroadTrack(3);*/ return 5; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2012
		if (fxpy <= 12 && sxpy >= 20) { /*DoRailroadTrack(0); */return 2; }
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2013
		return 0;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2014
	}
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2015
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2016
	return 0; // avoids compiler warnings
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2017
}
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2018
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2019
/** Check if the direction of start and end tile should be swapped based on
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2020
 * the dragging-style. Default directions are:
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2021
 * in the case of a line (HT_RAIL, HT_LINE):  DIR_NE, DIR_NW, DIR_N, DIR_E
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2022
 * in the case of a rect (HT_RECT, HT_POINT): DIR_S, DIR_E
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2023
 * For example dragging a rectangle area from south to north should be swapped to
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2024
 * north-south (DIR_S) to obtain the same results with less code. This is what
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2025
 * the return value signifies.
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2026
 * @param style HighLightStyle dragging style
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2027
 * @param start_tile, end_tile start and end tile of drag
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2028
 * @param boolean value which when true means start/end should be swapped */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2029
static bool SwapDirection(HighLightStyle style, TileIndex start_tile, TileIndex end_tile)
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2030
{
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2031
	uint start_x = TileX(start_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2032
	uint start_y = TileY(start_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2033
	uint end_x = TileX(end_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2034
	uint end_y = TileY(end_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2035
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2036
	switch (style & HT_DRAG_MASK) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2037
		case HT_RAIL:
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2038
		case HT_LINE: return (end_x > start_x || (end_x == start_x && end_y > start_y));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2039
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2040
		case HT_RECT:
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2041
		case HT_POINT: return (end_x != start_x && end_y < start_y);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2042
		default: NOT_REACHED();
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2043
	}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2044
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2045
	return false;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2046
}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2047
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2048
/** Calculates height difference between one tile and another
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2049
* Multiplies the result to suit the standard given by minimap - 50 meters high
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2050
* To correctly get the height difference we need the direction we are dragging
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2051
* in, as well as with what kind of tool we are dragging. For example a horizontal
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2052
* autorail tool that starts in bottom and ends at the top of a tile will need the
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2053
* maximum of SW,S and SE,N corners respectively. This is handled by the lookup table below
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2054
* See _tileoffs_by_dir in map.c for the direction enums if you can't figure out
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2055
* the values yourself.
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2056
* @param style HightlightStyle of drag. This includes direction and style (autorail, rect, etc.)
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2057
* @param distance amount of tiles dragged, important for horizontal/vertical drags
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2058
*        ignored for others
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2059
* @param start_tile, end_tile start and end tile of drag operation
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2060
* @return height difference between two tiles. Tile measurement tool utilizes
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2061
* this value in its tooltips */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2062
static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_tile, TileIndex end_tile)
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2063
{
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2064
	bool swap = SwapDirection(style, start_tile, end_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2065
	byte style_t;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2066
	uint h0, h1, ht; // start heigth, end height, and temp variable
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2067
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2068
	if (start_tile == end_tile) return 0;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2069
	if (swap) swap_tile(&start_tile, &end_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2070
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2071
	switch (style & HT_DRAG_MASK) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2072
		case HT_RECT: {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2073
			static const TileIndexDiffC heightdiff_area_by_dir[] = {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2074
				/* Start */ {1, 0}, /* Dragging east */ {0, 0}, /* Dragging south */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2075
				/* End   */ {0, 1}, /* Dragging east */ {1, 1}  /* Dragging south */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2076
			};
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2077
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2078
			/* In the case of an area we can determine whether we were dragging south or
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2079
			 * east by checking the X-coordinates of the tiles */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2080
			style_t = (byte)(TileX(end_tile) > TileX(start_tile));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2081
			start_tile = TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t]));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2082
			end_tile   = TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t]));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2083
		}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2084
		/* Fallthrough */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2085
		case HT_POINT:
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2086
			h0 = TileHeight(start_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2087
			h1 = TileHeight(end_tile);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2088
			break;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2089
		default: { /* All other types, this is mostly only line/autorail */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2090
			static const HighLightStyle flip_style_direction[] = {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2091
				HT_DIR_X, HT_DIR_Y, HT_DIR_HL, HT_DIR_HU, HT_DIR_VR, HT_DIR_VL
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2092
			};
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2093
			static const TileIndexDiffC heightdiff_line_by_dir[] = {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2094
				/* Start */ {1, 0}, {1, 1}, /* HT_DIR_X  */ {0, 1}, {1, 1}, /* HT_DIR_Y  */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2095
				/* Start */ {1, 0}, {0, 0}, /* HT_DIR_HU */ {1, 0}, {1, 1}, /* HT_DIR_HL */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2096
				/* Start */ {1, 0}, {1, 1}, /* HT_DIR_VL */ {0, 1}, {1, 1}, /* HT_DIR_VR */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2097
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2098
				/* Start */ {0, 1}, {0, 0}, /* HT_DIR_X  */ {1, 0}, {0, 0}, /* HT_DIR_Y  */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2099
				/* End   */ {0, 1}, {0, 0}, /* HT_DIR_HU */ {1, 1}, {0, 1}, /* HT_DIR_HL */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2100
				/* End   */ {1, 0}, {0, 0}, /* HT_DIR_VL */ {0, 0}, {0, 1}, /* HT_DIR_VR */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2101
			};
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2102
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2103
			distance %= 2; // we're only interested if the distance is even or uneven
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2104
			style &= HT_DIR_MASK;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2105
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2106
			/* To handle autorail, we do some magic to be able to use a lookup table.
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2107
			 * Firstly if we drag the other way around, we switch start&end, and if needed
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2108
			 * also flip the drag-position. Eg if it was on the left, and the distance is even
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2109
			 * that means the end, which is now the start is on the right */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2110
			if (swap && distance == 0) style = flip_style_direction[style];
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2111
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2112
			/* Use lookup table for start-tile based on HighLightStyle direction */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2113
			style_t = style * 2;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2114
			assert(style_t < lengthof(heightdiff_line_by_dir) - 13);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2115
			h0 = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t])));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2116
			ht = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1])));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2117
			h0 = maxu(h0, ht);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2118
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2119
			/* Use lookup table for end-tile based on HighLightStyle direction
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2120
			 * flip around side (lower/upper, left/right) based on distance */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2121
			if (distance == 0) style_t = flip_style_direction[style] * 2;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2122
			assert(style_t < lengthof(heightdiff_line_by_dir) - 13);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2123
			h1 = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t])));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2124
			ht = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1])));
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2125
			h1 = maxu(h1, ht);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2126
		} break;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2127
	}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2128
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2129
	if (swap) swap_uint32(&h0, &h1);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2130
	/* Minimap shows height in intervals of 50 meters, let's do the same */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2131
	return (int)(h1 - h0) * 50;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2132
}
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2133
4885
19e116dc240f (svn r6822) -Fix r6821: add type for measure_strings_length[]
glx
parents: 4884
diff changeset
  2134
static const StringID measure_strings_length[] = {STR_NULL, STR_MEASURE_LENGTH, STR_MEASURE_LENGTH_HEIGHTDIFF};
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2135
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2136
// while dragging
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2137
static void CalcRaildirsDrawstyle(TileHighlightData *thd, int x, int y, int method)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2138
{
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2139
	HighLightStyle b;
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2140
	uint w, h;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2141
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2142
	int dx = thd->selstart.x - (thd->selend.x & ~0xF);
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2143
	int dy = thd->selstart.y - (thd->selend.y & ~0xF);
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2144
	w = myabs(dx) + 16;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2145
	h = myabs(dy) + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2146
1980
6c5917cfcb78 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  2147
	if (TileVirtXY(thd->selstart.x, thd->selstart.y) == TileVirtXY(x, y)) { // check if we're only within one tile
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2148
		if (method == VPM_RAILDIRS) {
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2149
			b = GetAutorailHT(x, y);
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2150
		} else { // rect for autosignals on one tile
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2151
			b = HT_RECT;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2152
		}
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2153
	} else if (h == 16) { // Is this in X direction?
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2154
		if (dx == 16) { // 2x1 special handling
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2155
			b = (Check2x1AutoRail(3)) | HT_LINE;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2156
		} else if (dx == -16) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2157
			b = (Check2x1AutoRail(2)) | HT_LINE;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2158
		} else {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2159
			b = HT_LINE | HT_DIR_X;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2160
		}
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2161
		y = thd->selstart.y;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2162
	} else if (w == 16) { // Or Y direction?
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2163
		if (dy == 16) { // 2x1 special handling
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2164
			b = (Check2x1AutoRail(1)) | HT_LINE;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2165
		} else if (dy == -16) { // 2x1 other direction
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2166
			b = (Check2x1AutoRail(0)) | HT_LINE;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2167
		} else {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2168
			b = HT_LINE | HT_DIR_Y;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2169
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2170
		x = thd->selstart.x;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2171
	} else if (w > h * 2) { // still count as x dir?
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2172
		b = HT_LINE | HT_DIR_X;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2173
		y = thd->selstart.y;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2174
	} else if (h > w * 2) { // still count as y dir?
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2175
		b = HT_LINE | HT_DIR_Y;
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2176
		x = thd->selstart.x;
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2177
	} else { // complicated direction
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2178
		int d = w - h;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2179
		thd->selend.x = thd->selend.x & ~0xF;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2180
		thd->selend.y = thd->selend.y & ~0xF;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2181
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2182
		// four cases.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2183
		if (x > thd->selstart.x) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2184
			if (y > thd->selstart.y) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2185
				// south
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2186
				if (d == 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2187
					b = (x & 0xF) > (y & 0xF) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2188
				} else if (d >= 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2189
					x = thd->selstart.x + h;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2190
					b = HT_LINE | HT_DIR_VL;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2191
					// return px == py || px == py + 16;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2192
				} else {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2193
					y = thd->selstart.y + w;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2194
					b = HT_LINE | HT_DIR_VR;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2195
				} // return px == py || px == py - 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2196
			} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2197
				// west
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2198
				if (d == 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2199
					b = (x & 0xF) + (y & 0xF) >= 0x10 ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2200
				} else if (d >= 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2201
					x = thd->selstart.x + h;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2202
					b = HT_LINE | HT_DIR_HL;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2203
				} else {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2204
					y = thd->selstart.y - w;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2205
					b = HT_LINE | HT_DIR_HU;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2206
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2207
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2208
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2209
			if (y > thd->selstart.y) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2210
				// east
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2211
				if (d == 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2212
					b = (x & 0xF) + (y & 0xF) >= 0x10 ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2213
				} else if (d >= 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2214
					x = thd->selstart.x - h;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2215
					b = HT_LINE | HT_DIR_HU;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2216
					// return px == -py || px == -py - 16;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2217
				} else {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2218
					y = thd->selstart.y + w;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2219
					b = HT_LINE | HT_DIR_HL;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2220
				} // return px == -py || px == -py + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2221
			} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2222
				// north
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2223
				if (d == 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2224
					b = (x & 0xF) > (y & 0xF) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2225
				} else if (d >= 0) {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2226
					x = thd->selstart.x - h;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2227
					b = HT_LINE | HT_DIR_VR;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2228
					// return px == py || px == py - 16;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2229
				} else {
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2230
					y = thd->selstart.y - w;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2231
					b = HT_LINE | HT_DIR_VL;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2232
				} //return px == py || px == py + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2233
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2234
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2235
	}
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2236
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2237
	if (_patches.measure_tooltip) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2238
		TileIndex t0 = TileVirtXY(thd->selstart.x, thd->selstart.y);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2239
		TileIndex t1 = TileVirtXY(x, y);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2240
		uint distance = DistanceManhattan(t0, t1) + 1;
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2241
		byte index = 0;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2242
		uint params[2];
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2243
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2244
		if (distance != 1) {
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2245
			int heightdiff = CalcHeightdiff(b, distance, t0, t1);
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2246
			/* If we are showing a tooltip for horizontal or vertical drags,
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2247
			 * 2 tiles have a length of 1. To bias towards the ceiling we add
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2248
			 * one before division. It feels more natural to count 3 lengths as 2 */
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2249
			if ((b & HT_DIR_MASK) != HT_DIR_X && (b & HT_DIR_MASK) != HT_DIR_Y) {
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2250
				distance = (distance + 1) / 2;
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2251
			}
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2252
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2253
			params[index++] = distance;
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2254
			if (heightdiff != 0) params[index++] = heightdiff;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2255
		}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2256
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2257
		GuiShowTooltipsWithArgs(measure_strings_length[index], index, params);
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2258
	}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2259
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2260
	thd->selend.x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2261
	thd->selend.y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2262
	thd->next_drawstyle = b;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2263
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2264
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2265
/**
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2266
 * Selects tiles while dragging
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2267
 * @param x X coordinate of end of selection
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2268
 * @param y Y coordinate of end of selection
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2269
 * @param method modifies the way tiles are selected. Possible
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2270
 * methods are VPM_* in viewport.h */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2271
void VpSelectTilesWithMethod(int x, int y, int method)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2272
{
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2273
	int sx, sy;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2274
	HighLightStyle style;
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2275
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2276
	if (x == -1) {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2277
		_thd.selend.x = -1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2278
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2279
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2280
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2281
	/* Special handling of drag in any (8-way) direction */
58
b9fdcc9b5c90 (svn r59) -Feature: Added Autosignals, just like Autorail. Can copy signal style, convert signal<->semaphore, etc. Big thanks to betatesters Dribbel and Testman57 (Darkvater)
darkvater
parents: 0
diff changeset
  2282
	if (method == VPM_RAILDIRS || method == VPM_SIGNALDIRS) {
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2283
		_thd.selend.x = x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2284
		_thd.selend.y = y;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2285
		CalcRaildirsDrawstyle(&_thd, x, y, method);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2286
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2287
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2288
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2289
	if (_thd.next_drawstyle == HT_POINT) {
4799
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2290
		x += TILE_SIZE / 2;
20311e38bedf (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2291
		y += TILE_SIZE / 2;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2292
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2293
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2294
	sx = _thd.selstart.x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2295
	sy = _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2296
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2297
	switch (method) {
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2298
		case VPM_X_OR_Y: /* drag in X or Y direction */
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2299
			if (myabs(sy - y) < myabs(sx - x)) {
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2300
				y = sy;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2301
				style = HT_DIR_X;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2302
			} else {
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2303
				x = sx;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2304
				style = HT_DIR_Y;
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2305
			}
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2306
			goto calc_heightdiff_single_direction;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2307
		case VPM_FIX_X: /* drag in Y direction */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2308
			x = sx;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2309
			style = HT_DIR_Y;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2310
			goto calc_heightdiff_single_direction;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2311
		case VPM_FIX_Y: /* drag in X direction */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2312
			y = sy;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2313
			style = HT_DIR_X;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2314
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2315
calc_heightdiff_single_direction:;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2316
			if (_patches.measure_tooltip) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2317
				TileIndex t0 = TileVirtXY(sx, sy);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2318
				TileIndex t1 = TileVirtXY(x, y);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2319
				uint distance = DistanceManhattan(t0, t1) + 1;
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2320
				byte index = 0;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2321
				uint params[2];
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2322
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2323
				if (distance != 1) {
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2324
					/* With current code passing a HT_LINE style to calculate the height
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2325
					 * difference is enough. However if/when a point-tool is created
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2326
					 * with this method, function should be called with new_style (below)
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2327
					 * instead of HT_LINE | style case HT_POINT is handled specially
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2328
					 * new_style := (_thd.next_drawstyle & HT_RECT) ? HT_LINE | style : _thd.next_drawstyle; */
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2329
					int heightdiff = CalcHeightdiff(HT_LINE | style, 0, t0, t1);
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2330
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2331
					params[index++] = distance;
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2332
					if (heightdiff != 0) params[index++] = heightdiff;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2333
				}
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2334
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2335
				GuiShowTooltipsWithArgs(measure_strings_length[index], index, params);
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2336
			} break;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2337
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2338
		case VPM_X_AND_Y_LIMITED: { /* drag an X by Y constrained rect area */
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2339
			int limit = (_thd.sizelimit - 1) * TILE_SIZE;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2340
			x = sx + clamp(x - sx, -limit, limit);
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2341
			y = sy + clamp(y - sy, -limit, limit);
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2342
			/* Fallthrough */
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2343
		case VPM_X_AND_Y: /* drag an X by Y area */
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2344
			if (_patches.measure_tooltip) {
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2345
				static const StringID measure_strings_area[] = {
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2346
					STR_NULL, STR_NULL, STR_MEASURE_AREA, STR_MEASURE_AREA_HEIGHTDIFF
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2347
				};
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2348
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2349
				TileIndex t0 = TileVirtXY(sx, sy);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2350
				TileIndex t1 = TileVirtXY(x, y);
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2351
				uint dx = abs(TileX(t0) - TileX(t1)) + 1;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2352
				uint dy = abs(TileY(t0) - TileY(t1)) + 1;
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2353
				byte index = 0;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2354
				uint params[3];
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2355
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2356
				/* If dragging an area (eg dynamite tool) and it is actually a single
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2357
				 * row/column, change the type to 'line' to get proper calculation for height */
4838
af7376f8a68d (svn r6764) -Fix (r6758): Wrong height difference calculated because invalid drag-type
Darkvater
parents: 4834
diff changeset
  2358
				style = _thd.next_drawstyle;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2359
				if (style & HT_RECT) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2360
					if (dx == 1) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2361
						style = HT_LINE | HT_DIR_Y;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2362
					} else if (dy == 1) {
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2363
						style = HT_LINE | HT_DIR_X;
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2364
					}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2365
				}
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2366
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2367
				if (dx != 1 || dy != 1) {
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2368
					int heightdiff = CalcHeightdiff(style, 0, t0, t1);
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2369
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2370
					params[index++] = dx;
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2371
					params[index++] = dy;
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2372
					if (heightdiff != 0) params[index++] = heightdiff;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2373
				}
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2374
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2375
				GuiShowTooltipsWithArgs(measure_strings_area[index], index, params);
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2376
			}
4884
94dd5df0d584 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2377
		break;
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2378
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2379
		}
4834
3c6e8a547174 (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2380
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2381
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2382
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2383
	_thd.selend.x = x;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2384
	_thd.selend.y = y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2385
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2386
1109
ecb98f43ba2c (svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents: 1095
diff changeset
  2387
// while dragging
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  2388
bool VpHandlePlaceSizingDrag(void)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2389
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2390
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2391
	WindowEvent e;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2392
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2393
	if (_special_mouse_mode != WSM_SIZING) return true;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2394
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2395
	e.we.place.userdata = _thd.userdata;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2396
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2397
	// stop drag mode if the window has been closed
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2398
	w = FindWindowById(_thd.window_class,_thd.window_number);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2399
	if (w == NULL) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2400
		ResetObjectToPlace();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2401
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2402
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2403
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2404
	// while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() )
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2405
	if (_left_button_down) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2406
		e.event = WE_PLACE_DRAG;
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2407
		e.we.place.pt = GetTileBelowCursor();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2408
		w->wndproc(w, &e);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2409
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2410
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2411
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2412
	// mouse button released..
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2413
	// keep the selected tool, but reset it to the original mode.
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2414
	_special_mouse_mode = WSM_NONE;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2415
	if (_thd.next_drawstyle == HT_RECT) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2416
		_thd.place_mode = VHM_RECT;
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2417
	} else if ((e.we.place.userdata & 0xF) == VPM_SIGNALDIRS) { // some might call this a hack... -- Dominik
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2418
		_thd.place_mode = VHM_RECT;
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2419
	} else if (_thd.next_drawstyle & HT_LINE) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2420
		_thd.place_mode = VHM_RAIL;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2421
	} else if (_thd.next_drawstyle & HT_RAIL) {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2422
		_thd.place_mode = VHM_RAIL;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2423
	} else {
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2424
		_thd.place_mode = VHM_POINT;
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2425
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2426
	SetTileSelectSize(1, 1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2427
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2428
	// and call the mouseup event.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2429
	e.event = WE_PLACE_MOUSEUP;
4634
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2430
	e.we.place.pt = _thd.selend;
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2431
	e.we.place.tile = TileVirtXY(e.we.place.pt.x, e.we.place.pt.y);
07699ac2bf37 (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2432
	e.we.place.starttile = TileVirtXY(_thd.selstart.x, _thd.selstart.y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2433
	w->wndproc(w, &e);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2434
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2435
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2436
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2437
1914
2b4b3c3a95b4 (svn r2420) - Codechange: magic number elminitation of cursorsprites.
Darkvater
parents: 1891
diff changeset
  2438
void SetObjectToPlaceWnd(CursorID icon, byte mode, Window *w)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2439
{
1914
2b4b3c3a95b4 (svn r2420) - Codechange: magic number elminitation of cursorsprites.
Darkvater
parents: 1891
diff changeset
  2440
	SetObjectToPlace(icon, mode, w->window_class, w->window_number);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2441
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2442
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2443
#include "table/animcursors.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2444
1914
2b4b3c3a95b4 (svn r2420) - Codechange: magic number elminitation of cursorsprites.
Darkvater
parents: 1891
diff changeset
  2445
void SetObjectToPlace(CursorID icon, byte mode, WindowClass window_class, WindowNumber window_num)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2446
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2447
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2448
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2449
	// undo clicking on button
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2450
	if (_thd.place_mode != 0) {
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2451
		_thd.place_mode = 0;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2452
		w = FindWindowById(_thd.window_class, _thd.window_number);
2116
23031555ff54 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2453
		if (w != NULL) CallWindowEventNP(w, WE_ABORT_PLACE_OBJ);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2454
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2455
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2456
	SetTileSelectSize(1, 1);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2457
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2458
	_thd.make_square_red = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2459
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2460
	if (mode == VHM_DRAG) { // mode 4 is for dragdropping trains in the depot window
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2461
		mode = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2462
		_special_mouse_mode = WSM_DRAGDROP;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2463
	} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2464
		_special_mouse_mode = WSM_NONE;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2465
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2466
1863
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2467
	_thd.place_mode = mode;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2468
	_thd.window_class = window_class;
74a8379bb868 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2469
	_thd.window_number = window_num;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2470
1070
bd31ed783fd3 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2471
	if (mode == VHM_SPECIAL) // special tools, like tunnels or docks start with presizing mode
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2472
		VpStartPreSizing();
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2473
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2474
	if ( (int)icon < 0)
4334
99abd73de061 (svn r6035) -Revert r5900 which supposedly fixed an invalid warning caused by buggy MS software
Darkvater
parents: 4272
diff changeset
  2475
		SetAnimatedMouseCursor(_animcursors[~icon]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2476
	else
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2477
		SetMouseCursor(icon);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2478
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2479
1093
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  2480
void ResetObjectToPlace(void)
4fdc46eaf423 (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  2481
{
4077
d4d440dd8925 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2482
	SetObjectToPlace(SPR_CURSOR_MOUSE, VHM_NONE, 0, 0);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2483
}