src/viewport.cpp
author rubidium
Mon, 24 Sep 2007 20:56:33 +0000
changeset 8123 2f8dfb527d7c
parent 8113 f7a573c5d56c
child 8139 16ad832aa538
permissions -rw-r--r--
(svn r11158) -Codechange: reduce the amount of Random calls needed when we do not have NewGRF industries that actually need the random bits.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 2163
diff changeset
     2
6443
b8f06d8eb7be (svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents: 6432
diff changeset
     3
/** @file viewport.cpp */
b8f06d8eb7be (svn r8853) -Cleanup: doxygen changes. Correct forgotten c files to cpp files with the @file tag as well as a few general comments style
belugas
parents: 6432
diff changeset
     4
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
     5
#include "stdafx.h"
1891
92a3b0aa0946 (svn r2397) - CodeChange: rename all "ttd" files to "openttd" files.
Darkvater
parents: 1864
diff changeset
     6
#include "openttd.h"
1299
0a6510cc889b (svn r1803) Move debugging stuff into files of it's own
tron
parents: 1172
diff changeset
     7
#include "debug.h"
2163
637ec3c361f5 (svn r2673) Include functions.h directly, not globally via openttd.h
tron
parents: 2159
diff changeset
     8
#include "functions.h"
2662
42c11a1a0a4b (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
     9
#include "gui.h"
1349
07514c2cc6d1 (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
    10
#include "spritecache.h"
1309
dab90d4cbf2d (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
    11
#include "strings.h"
1363
01d3de5d8039 (svn r1867) Include tables/sprites.h only in files which need it
tron
parents: 1349
diff changeset
    12
#include "table/sprites.h"
507
8aa8100b0b22 (svn r815) Include strings.h only in the files which need it.
tron
parents: 500
diff changeset
    13
#include "table/strings.h"
6949
72d11a1e1e60 (svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents: 6944
diff changeset
    14
#include "landscape.h"
679
e959706a3e4d (svn r1117) Move map arrays and some related macros into their own files map.c and map.h
tron
parents: 657
diff changeset
    15
#include "map.h"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    16
#include "viewport.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    17
#include "window.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    18
#include "vehicle.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    19
#include "station.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    20
#include "gfx.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    21
#include "town.h"
988
2482369a61ff (svn r1486) -Codechange: moved all 'signs' stuff to signs.c/h and prepared it for
truelight
parents: 981
diff changeset
    22
#include "signs.h"
1542
2ca6d1624e6d (svn r2046) -Codechange: moved all waypoint code to waypoint.c/waypoint.h
truelight
parents: 1390
diff changeset
    23
#include "waypoint.h"
2159
3b634157c3b2 (svn r2669) Shuffle some more stuff around to reduce dependencies
tron
parents: 2125
diff changeset
    24
#include "variables.h"
2676
2ba71e034d97 (svn r3218) -Feature: Multiheaded train engines will now stay in the same train
bjarni
parents: 2662
diff changeset
    25
#include "train.h"
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
    26
#include "roadveh.h"
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7829
diff changeset
    27
#include "vehicle_gui.h"
7433
8e410e7ec0d7 (svn r10190) -Codechange: merged renderer and blitter to one single class API: blitter
truelight
parents: 7374
diff changeset
    28
#include "blitter/factory.hpp"
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    29
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
    30
#define VIEWPORT_DRAW_MEM (65536 * 2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    31
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
    32
ZoomLevel _saved_scrollpos_zoom;
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
    33
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
    34
/* XXX - maximum viewports is maximum windows - 2 (main toolbar + status bar) */
5122
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
    35
static ViewPort _viewports[25 - 2];
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
    36
static uint32 _active_viewports;    ///< bitmasked variable where each bit signifies if a viewport is in use or not
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
    37
assert_compile(lengthof(_viewports) < sizeof(_active_viewports) * 8);
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
    38
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    39
static bool _added_tile_sprite;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    40
static bool _offset_ground_sprites;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    41
4186
853361bea03b (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
/* The in-game coordiante system looks like this *
853361bea03b (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
    43
 *                                               *
853361bea03b (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
    44
 *                    ^ Z                        *
853361bea03b (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
    45
 *                    |                          *
853361bea03b (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
    46
 *                    |                          *
853361bea03b (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
    47
 *                    |                          *
853361bea03b (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
    48
 *                    |                          *
853361bea03b (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
    49
 *                 /     \                       *
853361bea03b (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
    50
 *              /           \                    *
853361bea03b (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
    51
 *           /                 \                 *
853361bea03b (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
    52
 *        /                       \              *
853361bea03b (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
    53
 *   X <                             > Y         *
853361bea03b (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
    54
 */
853361bea03b (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
    55
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    56
struct StringSpriteToDraw {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    57
	uint16 string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    58
	uint16 color;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    59
	StringSpriteToDraw *next;
849
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    60
	int32 x;
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    61
	int32 y;
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
    62
	uint64 params[2];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    63
	uint16 width;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    64
};
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    65
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    66
struct TileSpriteToDraw {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
    67
	SpriteID image;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
    68
	SpriteID pal;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    69
	TileSpriteToDraw *next;
849
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    70
	int32 x;
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    71
	int32 y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
    72
	byte z;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    73
};
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    74
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    75
struct ChildScreenSpriteToDraw {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
    76
	SpriteID image;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
    77
	SpriteID pal;
849
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    78
	int32 x;
c6223dbdb202 (svn r1330) Increase size of some vars from int16 to int32 to guard against future overflows
tron
parents: 835
diff changeset
    79
	int32 y;
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    80
	ChildScreenSpriteToDraw *next;
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    81
};
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    82
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
    83
struct ParentSpriteToDraw {
8065
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    84
	SpriteID image;                 ///< sprite to draw
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    85
	SpriteID pal;                   ///< palette to use
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    86
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
    87
	int32 x;                        ///< screen X coordinate of sprite
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
    88
	int32 y;                        ///< screen Y coordinate of sprite
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
    89
8065
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    90
	int32 left;                     ///< minimal screen X coordinate of sprite (= x + sprite->x_offs), reference point for child sprites
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    91
	int32 top;                      ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    92
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    93
	int32 xmin;                     ///< minimal world X coordinate of bounding box
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    94
	int32 xmax;                     ///< maximal world X coordinate of bounding box
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    95
	int32 ymin;                     ///< minimal world Y coordinate of bounding box
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    96
	int32 ymax;                     ///< maximal world Y coordinate of bounding box
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
    97
	int zmin;                       ///< minimal world Z coordinate of bounding box
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
    98
	int zmax;                       ///< maximal world Z coordinate of bounding box
8065
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
    99
1ec515080c33 (svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas
parents: 8041
diff changeset
   100
	ChildScreenSpriteToDraw *child; ///< head of child list;
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   101
	bool comparison_done;           ///< Used during sprite sorting: true if sprite has been compared with all other sprites
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   102
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   103
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   104
/* Quick hack to know how much memory to reserve when allocating from the spritelist
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   105
 * to prevent a buffer overflow. */
2109
c3202f3988df (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
   106
#define LARGEST_SPRITELIST_STRUCT ParentSpriteToDraw
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   107
assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(StringSpriteToDraw));
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   108
assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(TileSpriteToDraw));
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   109
assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(ChildScreenSpriteToDraw));
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   110
assert_compile(sizeof(LARGEST_SPRITELIST_STRUCT) >= sizeof(ParentSpriteToDraw));
2109
c3202f3988df (svn r2619) Fix: [viewport] Fix potential buffer overflow reported by Tron
ludde
parents: 2085
diff changeset
   111
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   112
struct ViewportDrawer {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   113
	DrawPixelInfo dpi;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   114
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   115
	byte *spritelist_mem;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   116
	const byte *eof_spritelist_mem;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   117
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   118
	StringSpriteToDraw **last_string, *first_string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   119
	TileSpriteToDraw **last_tile, *first_tile;
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
	ChildScreenSpriteToDraw **last_child;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   122
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   123
	ParentSpriteToDraw **parent_list;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   124
	ParentSpriteToDraw * const *eof_parent_list;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   125
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   126
	byte combine_sprites;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   127
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   128
	int offs_x, offs_y; // used when drawing ground sprites relative
6574
e1d1a12faaf7 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6573
diff changeset
   129
};
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   130
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   131
static ViewportDrawer *_cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   132
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   133
TileHighlightData _thd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   134
static TileInfo *_cur_ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   135
4340
1b2bf292033b (svn r6041) -Fix r6040: forgot to declare a function in viewport.c
truelight
parents: 4339
diff changeset
   136
extern void SmallMapCenterOnCurrentPos(Window *w);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   137
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   138
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
   139
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   140
	Point p = RemapCoords(x, y, z);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   141
	p.x -= vp->virtual_width / 2;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   142
	p.y -= vp->virtual_height / 2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   143
	return p;
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
7817
f24498d934ac (svn r10684) -Codechange: some more coding style related changes. Primarily moving { to a new line.
rubidium
parents: 7574
diff changeset
   146
void InitViewports()
f24498d934ac (svn r10684) -Codechange: some more coding style related changes. Primarily moving { to a new line.
rubidium
parents: 7574
diff changeset
   147
{
5122
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   148
	memset(_viewports, 0, sizeof(_viewports));
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   149
	_active_viewports = 0;
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   150
}
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   151
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   152
void DeleteWindowViewport(Window *w)
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   153
{
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   154
	CLRBIT(_active_viewports, w->viewport - _viewports);
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   155
	w->viewport->width = 0;
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   156
	w->viewport = NULL;
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   157
}
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   158
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   159
void AssignWindowViewport(Window *w, int x, int y,
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   160
	int width, int height, uint32 follow_flags, ZoomLevel zoom)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   161
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   162
	ViewPort *vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   163
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   164
	uint32 bit;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   165
5122
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   166
	for (vp = _viewports, bit = 0; ; vp++, bit++) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   167
		assert(vp != endof(_viewports));
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   168
		if (vp->width == 0) break;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   169
	}
5122
a68d16b055fa (svn r7202) -Codechange: Move _viewports and _active_viewports local to viewport.c and have them
Darkvater
parents: 5120
diff changeset
   170
	SETBIT(_active_viewports, bit);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   171
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   172
	vp->left = x + w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   173
	vp->top = y + w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   174
	vp->width = width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   175
	vp->height = height;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   176
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   177
	vp->zoom = zoom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   178
7150
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
   179
	vp->virtual_width = ScaleByZoom(width, zoom);
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
   180
	vp->virtual_height = ScaleByZoom(height, zoom);
0
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 (follow_flags & 0x80000000) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   183
		const Vehicle *veh;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   184
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   185
		WP(w, vp_d).follow_vehicle = (VehicleID)(follow_flags & 0xFFFF);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   186
		veh = GetVehicle(WP(w, vp_d).follow_vehicle);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   187
		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
   188
	} else {
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
   189
		uint x = TileX(follow_flags) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
   190
		uint y = TileY(follow_flags) * TILE_SIZE;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   191
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   192
		WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   193
		pt = MapXYZToViewport(vp, x, y, GetSlopeZ(x, y));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   194
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   195
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   196
	WP(w, vp_d).scrollpos_x = pt.x;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   197
	WP(w, vp_d).scrollpos_y = pt.y;
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
   198
	WP(w, vp_d).dest_scrollpos_x = pt.x;
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
   199
	WP(w, vp_d).dest_scrollpos_y = pt.y;
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
   200
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   201
	w->viewport = vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   202
	vp->virtual_left = 0;//pt.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   203
	vp->virtual_top = 0;//pt.y;
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   206
static Point _vp_move_offs;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   207
5137
a1f26c30fecd (svn r7219) -Fix: Several warnings by gcc introduced in r7206 which MSVC found not of a problem. Thanks Tron
Darkvater
parents: 5124
diff changeset
   208
static void DoSetViewportPosition(Window* const *wz, int left, int top, int width, int height)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   209
{
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   210
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   211
	for (; wz != _last_z_window; wz++) {
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   212
		const Window *w = *wz;
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   213
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   214
		if (left + width > w->left &&
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   215
				w->left + w->width > left &&
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   216
				top + height > w->top &&
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   217
				w->top + w->height > top) {
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   218
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   219
			if (left < w->left) {
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   220
				DoSetViewportPosition(wz, left, top, w->left - left, height);
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   221
				DoSetViewportPosition(wz, left + (w->left - left), top, width - (w->left - left), height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   222
				return;
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 (left + width > w->left + w->width) {
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   226
				DoSetViewportPosition(wz, left, top, (w->left + w->width - left), height);
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   227
				DoSetViewportPosition(wz, left + (w->left + w->width - left), top, width - (w->left + w->width - left) , height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   228
				return;
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
			if (top < w->top) {
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   232
				DoSetViewportPosition(wz, left, top, width, (w->top - top));
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   233
				DoSetViewportPosition(wz, left, top + (w->top - top), width, height - (w->top - top));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   234
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   235
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   236
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   237
			if (top + height > w->top + w->height) {
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   238
				DoSetViewportPosition(wz, left, top, width, (w->top + w->height - top));
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   239
				DoSetViewportPosition(wz, left, top + (w->top + w->height - top), width , height - (w->top + w->height - top));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   240
				return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   241
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   242
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   243
			return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   244
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   245
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   246
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   247
	{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   248
		int xo = _vp_move_offs.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   249
		int yo = _vp_move_offs.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   250
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   251
		if (abs(xo) >= width || abs(yo) >= height) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   252
			/* fully_outside */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   253
			RedrawScreenRect(left, top, left + width, top + height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   254
			return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   255
		}
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
		GfxScroll(left, top, width, height, xo, yo);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   258
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   259
		if (xo > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   260
			RedrawScreenRect(left, top, xo + left, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   261
			left += xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   262
			width -= xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   263
		} else if (xo < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   264
			RedrawScreenRect(left+width+xo, top, left+width, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   265
			width += xo;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   266
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   267
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   268
		if (yo > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   269
			RedrawScreenRect(left, top, width+left, top + yo);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   270
		} else if (yo < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   271
			RedrawScreenRect(left, top + height + yo, width+left, top + height);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   272
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   273
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   274
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   275
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
   276
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
   277
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   278
	ViewPort *vp = w->viewport;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   279
	int old_left = vp->virtual_left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   280
	int old_top = vp->virtual_top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   281
	int i;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   282
	int left, top, width, height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   283
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   284
	vp->virtual_left = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   285
	vp->virtual_top = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   286
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   287
	old_left = UnScaleByZoom(old_left, vp->zoom);
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   288
	old_top = UnScaleByZoom(old_top, vp->zoom);
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   289
	x = UnScaleByZoom(x, vp->zoom);
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   290
	y = UnScaleByZoom(y, vp->zoom);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   291
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   292
	old_left -= x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   293
	old_top -= y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   294
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   295
	if (old_top == 0 && old_left == 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   296
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   297
	_vp_move_offs.x = old_left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   298
	_vp_move_offs.y = old_top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   299
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   300
	left = vp->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   301
	top = vp->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   302
	width = vp->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   303
	height = vp->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   304
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   305
	if (left < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   306
		width += left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   307
		left = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   308
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   309
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   310
	i = left + width - _screen.width;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   311
	if (i >= 0) width -= i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   312
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   313
	if (width > 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   314
		if (top < 0) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   315
			height += top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   316
			top = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   317
		}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   318
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   319
		i = top + height - _screen.height;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   320
		if (i >= 0) height -= i;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   321
5124
d30772d0e9e1 (svn r7205) -Fix [FS#350, SF#1560913]: Window allocation and deletion messed with the actual window
Darkvater
parents: 5122
diff changeset
   322
		if (height > 0) DoSetViewportPosition(FindWindowZPosition(w) + 1, left, top, width, height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   323
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   324
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   325
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   326
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   327
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
   328
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   329
	ViewPort *vp = w->viewport;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   330
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   331
	if (vp != NULL &&
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   332
	    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
   333
			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
   334
		return vp;
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
	return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   337
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   338
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   339
static Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y)
1095
90220990fd7c (svn r1596) Add some more statics
tron
parents: 1093
diff changeset
   340
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   341
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   342
	int a,b;
5014
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   343
	uint z;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   344
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   345
	if ( (uint)(x -= vp->left) >= (uint)vp->width ||
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   346
				(uint)(y -= vp->top) >= (uint)vp->height) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   347
				Point pt = {-1, -1};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   348
				return pt;
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
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   351
	x = (ScaleByZoom(x, vp->zoom) + vp->virtual_left) >> 2;
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   352
	y = (ScaleByZoom(y, vp->zoom) + vp->virtual_top) >> 1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   353
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   354
	a = y-x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   355
	b = y+x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   356
5014
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   357
	/* we need to move variables in to the valid range, as the
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   358
	 * GetTileZoomCenterWindow() function can call here with invalid x and/or y,
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   359
	 * when the user tries to zoom out along the sides of the map */
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   360
	a = clamp(a, 0, (int)(MapMaxX() * TILE_SIZE) - 1);
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   361
	b = clamp(b, 0, (int)(MapMaxY() * TILE_SIZE) - 1);
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   362
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   363
	z = GetSlopeZ(a,     b    ) / 2;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   364
	z = GetSlopeZ(a + z, b + z) / 2;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   365
	z = GetSlopeZ(a + z, b + z) / 2;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   366
	z = GetSlopeZ(a + z, b + z) / 2;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   367
	z = GetSlopeZ(a + z, b + z) / 2;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   368
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   369
	pt.x = a + z;
aaa61af89635 (svn r7047) -Fix [FS#317]: Zooming out near map-borders would previously fail because the new centre
Darkvater
parents: 4912
diff changeset
   370
	pt.y = b + z;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   371
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   372
	return pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   373
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   374
981
25c7b445dcb8 (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
/* When used for zooming, check area below current coordinates (x,y)
25c7b445dcb8 (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
   376
 * and return the tile of the zoomed out/in position (zoom_x, zoom_y)
25c7b445dcb8 (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
   377
 * when you just want the tile, make x = zoom_x and y = zoom_y */
25c7b445dcb8 (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
   378
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
   379
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   380
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   381
	ViewPort *vp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   382
	Point pt;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   383
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   384
	if ( (w = FindWindowFromPt(x, y)) != NULL &&
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   385
			 (vp = IsPtInWindowViewport(w, x, y)) != NULL)
981
25c7b445dcb8 (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
   386
				return TranslateXYToTileCoord(vp, zoom_x, zoom_y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   387
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   388
	pt.y = pt.x = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   389
	return pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   390
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   391
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
   392
Point GetTileBelowCursor()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   393
{
981
25c7b445dcb8 (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
   394
	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
   395
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   396
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
   397
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
   398
Point GetTileZoomCenterWindow(bool in, Window * w)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   399
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   400
	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
   401
	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
   402
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
   403
	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
   404
2026
02dfa0aa2c2f (svn r2535) Tabs
tron
parents: 2023
diff changeset
   405
	if (in) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   406
		x = ((_cursor.pos.x - vp->left) >> 1) + (vp->width >> 2);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   407
		y = ((_cursor.pos.y - vp->top) >> 1) + (vp->height >> 2);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   408
	} 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
   409
		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
   410
		y = vp->height - (_cursor.pos.y - vp->top);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   411
	}
981
25c7b445dcb8 (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
   412
	/* Get the tile below the cursor and center on the zoomed-out center */
25c7b445dcb8 (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
   413
	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
   414
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   415
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   416
/** Update the status of the zoom-buttons according to the zoom-level
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   417
 * of the viewport. This will update their status and invalidate accordingly
6939
50b3cf596ce2 (svn r9580) -Documentation: Correction of doxygen function declarations
belugas
parents: 6923
diff changeset
   418
 * @param w Window pointer to the window that has the zoom buttons
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   419
 * @param vp pointer to the viewport whose zoom-level the buttons represent
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   420
 * @param widget_zoom_in widget index for window with zoom-in button
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   421
 * @param widget_zoom_out widget index for window with zoom-out button */
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   422
void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out)
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   423
{
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   424
	SetWindowWidgetDisabledState(w, widget_zoom_in, vp->zoom == ZOOM_LVL_MIN);
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   425
	InvalidateWidget(w, widget_zoom_in);
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   426
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   427
	SetWindowWidgetDisabledState(w, widget_zoom_out, vp->zoom == ZOOM_LVL_MAX);
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   428
	InvalidateWidget(w, widget_zoom_out);
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   429
}
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 5027
diff changeset
   430
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   431
void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   432
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   433
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   434
	TileSpriteToDraw *ts;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   435
2187
2a51f8925eeb (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   436
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   437
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   438
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
   439
		DEBUG(sprite, 0, "Out of sprite memory");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   440
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   441
	}
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   442
	ts = (TileSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   443
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   444
	vd->spritelist_mem += sizeof(TileSpriteToDraw);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   445
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   446
	ts->image = image;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   447
	ts->pal = pal;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   448
	ts->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   449
	ts->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   450
	ts->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   451
	ts->z = z;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   452
	*vd->last_tile = ts;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   453
	vd->last_tile = &ts->next;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   454
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   455
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   456
void DrawGroundSprite(SpriteID image, SpriteID pal)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   457
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   458
	if (_offset_ground_sprites) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   459
		/* offset ground sprite because of foundation? */
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   460
		AddChildSpriteScreen(image, pal, _cur_vd->offs_x, _cur_vd->offs_y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   461
	} else {
1083
2e9d525af38d (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   462
		_added_tile_sprite = true;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   463
		DrawGroundSpriteAt(image, pal, _cur_ti->x, _cur_ti->y, _cur_ti->z);
0
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   467
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   468
void OffsetGroundSprite(int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   469
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   470
	_cur_vd->offs_x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   471
	_cur_vd->offs_y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   472
	_offset_ground_sprites = true;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   473
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   474
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   475
static void AddCombinedSprite(SpriteID image, SpriteID pal, int x, int y, byte z)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   476
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   477
	const ViewportDrawer *vd = _cur_vd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   478
	Point pt = RemapCoords(x, y, z);
2319
9902d3ffa309 (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   479
	const Sprite* spr = GetSprite(image & SPRITE_MASK);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   480
2319
9902d3ffa309 (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   481
	if (pt.x + spr->x_offs >= vd->dpi.left + vd->dpi.width ||
9902d3ffa309 (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   482
			pt.x + spr->x_offs + spr->width <= vd->dpi.left ||
9902d3ffa309 (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   483
			pt.y + spr->y_offs >= vd->dpi.top + vd->dpi.height ||
9902d3ffa309 (svn r2845) Remove sprite size caching, it was unused
tron
parents: 2187
diff changeset
   484
			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
   485
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   486
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   487
	AddChildSpriteScreen(image, pal, 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
   488
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   489
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   490
/** Draw a (transparent) sprite at given coordinates with a given bounding box.
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   491
 * The bounding box extends from (x + bb_offset_x, y + bb_offset_y, z + bb_offset_z) to (x + w - 1, y + h - 1, z + dz - 1), both corners included.
8113
f7a573c5d56c (svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium
parents: 8097
diff changeset
   492
 * Bounding boxes with bb_offset_x == w or bb_offset_y == h or bb_offset_z == dz are allowed and produce thin slices.
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   493
 *
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   494
 * @note Bounding boxes are normally specified with bb_offset_x = bb_offset_y = bb_offset_z = 0. The extent of the bounding box in negative direction is
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   495
 *       defined by the sprite offset in the grf file.
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   496
 *       However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset.
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   497
 *
8113
f7a573c5d56c (svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium
parents: 8097
diff changeset
   498
 * @pre w >= bb_offset_x, h >= bb_offset_y, dz >= bb_offset_z. Else w, h or dz are ignored.
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   499
 *
7829
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   500
 * @param image the image to combine and draw,
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   501
 * @param pal the provided palette,
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   502
 * @param x position X (world) of the sprite,
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   503
 * @param y position Y (world) of the sprite,
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   504
 * @param w bounding box extent towards positive X (world),
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   505
 * @param h bounding box extent towards positive Y (world),
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   506
 * @param dz bounding box extent towards positive Z (world),
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   507
 * @param z position Z (world) of the sprite,
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   508
 * @param transparent if true, switch the palette between the provided palette and the transparent palette,
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   509
 * @param bb_offset_x bounding box extent towards negative X (world),
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   510
 * @param bb_offset_y bounding box extent towards negative Y (world),
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   511
 * @param bb_offset_z bounding box extent towards negative Z (world)
7829
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   512
 */
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   513
void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, int dz, int z, bool transparent, int bb_offset_x, int bb_offset_y, int bb_offset_z)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   514
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   515
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   516
	ParentSpriteToDraw *ps;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   517
	Point pt;
8097
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   518
	int32 right, bottom;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   519
2187
2a51f8925eeb (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   520
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   521
7829
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   522
	/* make the sprites transparent with the right palette */
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   523
	if (transparent) {
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   524
		SETBIT(image, PALETTE_MODIFIER_TRANSPARENT);
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   525
		pal = PALETTE_TO_TRANSPARENT;
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   526
	}
88883899c9e6 (svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium
parents: 7817
diff changeset
   527
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   528
	if (vd->combine_sprites == 2) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   529
		AddCombinedSprite(image, pal, x, y, z);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   530
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   531
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   532
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   533
	vd->last_child = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   534
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   535
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
   536
		DEBUG(sprite, 0, "Out of sprite memory");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   537
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   538
	}
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   539
	ps = (ParentSpriteToDraw*)vd->spritelist_mem;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   540
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   541
	if (vd->parent_list >= vd->eof_parent_list) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   542
		/* This can happen rarely, mostly when you zoom out completely
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   543
		 *  and have a lot of stuff that moves (and is added to the
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   544
		 *  sort-list, this function). To solve it, increase
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   545
		 *  parent_list somewhere below to a higher number.
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   546
		 * This can not really hurt you, it just gives some black
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   547
		 *  spots on the screen ;) */
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
   548
		DEBUG(sprite, 0, "Out of sprite memory (parent_list)");
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
   549
		return;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   550
	}
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   551
4189
258f98b17f57 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   552
	pt = RemapCoords(x, y, z);
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   553
	ps->x = pt.x;
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   554
	ps->y = pt.y;
8097
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   555
	if (image == SPR_EMPTY_BOUNDING_BOX) {
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   556
		ps->left = RemapCoords(x + w          , y + bb_offset_y, z + bb_offset_z).x;
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   557
		right    = RemapCoords(x + bb_offset_x, y + h          , z + bb_offset_z).x;
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   558
		ps->top  = RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz         ).y;
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   559
		bottom   = RemapCoords(x + w          , y + h          , z + bb_offset_z).y;
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   560
	} else {
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   561
		const Sprite *spr = GetSprite(image & SPRITE_MASK);
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   562
		ps->left = (pt.x += spr->x_offs);
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   563
		right    = (pt.x +  spr->width );
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   564
		ps->top  = (pt.y += spr->y_offs);
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   565
		bottom   = (pt.y +  spr->height);
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   566
	}
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   567
	if (ps->left >= vd->dpi.left + vd->dpi.width ||
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   568
	    right    <= vd->dpi.left ||
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   569
	    ps->top  >= vd->dpi.top + vd->dpi.height ||
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
   570
	    bottom   <= vd->dpi.top) {
4189
258f98b17f57 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   571
		return;
258f98b17f57 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   572
	}
258f98b17f57 (svn r5631) Don't allocate memory for information about a sprite which isn't drawn
tron
parents: 4188
diff changeset
   573
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   574
	vd->spritelist_mem += sizeof(ParentSpriteToDraw);
0
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
	ps->image = image;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   577
	ps->pal = pal;
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   578
	ps->xmin = x + bb_offset_x;
8113
f7a573c5d56c (svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium
parents: 8097
diff changeset
   579
	ps->xmax = x + max(bb_offset_x, w) - 1;
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   580
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   581
	ps->ymin = y + bb_offset_y;
8113
f7a573c5d56c (svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium
parents: 8097
diff changeset
   582
	ps->ymax = y + max(bb_offset_y, h) - 1;
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   583
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   584
	ps->zmin = z + bb_offset_z;
8113
f7a573c5d56c (svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium
parents: 8097
diff changeset
   585
	ps->zmax = z + max(bb_offset_z, dz) - 1;
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   586
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
   587
	ps->comparison_done = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   588
	ps->child = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   589
	vd->last_child = &ps->child;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   590
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   591
	*vd->parent_list++ = ps;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   592
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   593
	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
   594
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   595
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
   596
void StartSpriteCombine()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   597
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   598
	_cur_vd->combine_sprites = 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   599
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   600
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
   601
void EndSpriteCombine()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   602
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   603
	_cur_vd->combine_sprites = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   604
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   605
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   606
void AddChildSpriteScreen(SpriteID image, SpriteID pal, int x, int y)
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
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   609
	ChildScreenSpriteToDraw *cs;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   610
2187
2a51f8925eeb (svn r2702) -Codechange: Cleaned up the sprite code and replaced many magic numbers
celestar
parents: 2186
diff changeset
   611
	assert((image & SPRITE_MASK) < MAX_SPRITES);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   612
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   613
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
   614
		DEBUG(sprite, 0, "Out of sprite memory");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   615
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   616
	}
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   617
	cs = (ChildScreenSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   618
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   619
	if (vd->last_child == NULL) return;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   620
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   621
	vd->spritelist_mem += sizeof(ChildScreenSpriteToDraw);
0
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
	*vd->last_child = cs;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   624
	vd->last_child = &cs->next;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   625
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   626
	cs->image = image;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   627
	cs->pal = pal;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   628
	cs->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   629
	cs->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   630
	cs->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   631
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   632
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   633
/* Returns a StringSpriteToDraw */
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
   634
void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   635
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   636
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   637
	StringSpriteToDraw *ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   638
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   639
	if (vd->spritelist_mem >= vd->eof_spritelist_mem) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
   640
		DEBUG(sprite, 0, "Out of sprite memory");
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   641
		return NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   642
	}
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   643
	ss = (StringSpriteToDraw*)vd->spritelist_mem;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   644
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   645
	vd->spritelist_mem += sizeof(StringSpriteToDraw);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   646
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   647
	ss->string = string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   648
	ss->next = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   649
	ss->x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   650
	ss->y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   651
	ss->params[0] = params_1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   652
	ss->params[1] = params_2;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   653
	ss->width = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   654
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   655
	*vd->last_string = ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   656
	vd->last_string = &ss->next;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   657
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   658
	return ss;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   659
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   660
4000
bab1ebc37da0 (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
   661
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   662
static void DrawSelectionSprite(SpriteID image, SpriteID pal, const TileInfo *ti)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   663
{
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   664
	if (_added_tile_sprite && !(_thd.drawstyle & HT_LINE)) { // draw on real ground
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   665
		DrawGroundSpriteAt(image, pal, ti->x, ti->y, ti->z + 7);
1083
2e9d525af38d (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   666
	} else { // draw on top of foundation
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   667
		AddSortableSpriteToDraw(image, pal, ti->x, ti->y, 0x10, 0x10, 1, ti->z + 7);
1083
2e9d525af38d (svn r1584) Fix: Highlighlighting tiles under bridges works again correctly for square selection tools.
dominik
parents: 1070
diff changeset
   668
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   669
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   670
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   671
static bool IsPartOfAutoLine(int px, int py)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   672
{
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   673
	px -= _thd.selstart.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   674
	py -= _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   675
2952
6a26eeda9679 (svn r3511) More whitespace ([FS#46] by Rubidium)
tron
parents: 2817
diff changeset
   676
	switch (_thd.drawstyle) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   677
	case HT_LINE | HT_DIR_X:  return py == 0; // x direction
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   678
	case HT_LINE | HT_DIR_Y:  return px == 0; // y direction
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   679
	case HT_LINE | HT_DIR_HU: return px == -py || px == -py - 16; // horizontal upper
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   680
	case HT_LINE | HT_DIR_HL: return px == -py || px == -py + 16; // horizontal lower
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   681
	case HT_LINE | HT_DIR_VL: return px == py || px == py + 16; // vertival left
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   682
	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
   683
	default:
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   684
		NOT_REACHED();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   685
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   686
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   687
	/* useless, but avoids compiler warning this way */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   688
	return 0;
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
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   691
// [direction][side]
2710
e144188c1fdb (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
   692
static const int _AutorailType[6][2] = {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   693
	{ HT_DIR_X,  HT_DIR_X },
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   694
	{ HT_DIR_Y,  HT_DIR_Y },
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   695
	{ HT_DIR_HU, HT_DIR_HL },
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   696
	{ HT_DIR_HL, HT_DIR_HU },
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   697
	{ HT_DIR_VL, HT_DIR_VR },
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   698
	{ HT_DIR_VR, HT_DIR_VL }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   699
};
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   700
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   701
#include "table/autorail.h"
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   702
7574
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
   703
/**
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
   704
 * Checks if the specified tile is selected and if so draws selection using correct selectionstyle.
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
   705
 * @param *ti TileInfo Tile that is being drawn
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
   706
 */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   707
static void DrawTileSelection(const TileInfo *ti)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   708
{
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   709
	SpriteID image;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   710
	SpriteID pal;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   711
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   712
	/* Draw a red error square? */
3281
0f3d836e35b1 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
   713
	if (_thd.redsq != 0 && _thd.redsq == ti->tile) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   714
		DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], PALETTE_TILE_RED_PULSATING, ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   715
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   716
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   717
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   718
	/* no selection active? */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   719
	if (_thd.drawstyle == 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   720
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   721
	/* Inside the inner area? */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   722
	if (IS_INSIDE_1D(ti->x, _thd.pos.x, _thd.size.x) &&
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   723
			IS_INSIDE_1D(ti->y, _thd.pos.y, _thd.size.y)) {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   724
		if (_thd.drawstyle & HT_RECT) {
1864
83c91b158180 (svn r2370) Replace some magic numbers with symbolic names
tron
parents: 1863
diff changeset
   725
			image = SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh];
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   726
			DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : PAL_NONE, ti);
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   727
		} else if (_thd.drawstyle & HT_POINT) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   728
			/* Figure out the Z coordinate for the single dot. */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   729
			byte z = ti->z;
3636
d87b21df2944 (svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents: 3609
diff changeset
   730
			if (ti->tileh & SLOPE_N) {
3645
86af43f87885 (svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents: 3636
diff changeset
   731
				z += TILE_HEIGHT;
86af43f87885 (svn r4554) Replace magic numbers by TILE_{HEIGHT,SIZE}
tron
parents: 3636
diff changeset
   732
				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
   733
			}
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
   734
			DrawGroundSpriteAt(_cur_dpi->zoom <= ZOOM_LVL_DETAIL ? SPR_DOT : SPR_DOT_SMALL, PAL_NONE, ti->x, ti->y, z);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   735
		} else if (_thd.drawstyle & HT_RAIL /*&& _thd.place_mode == VHM_RAIL*/) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   736
			/* autorail highlight piece under cursor */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   737
			uint type = _thd.drawstyle & 0xF;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   738
			int offset;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   739
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   740
			assert(type <= 5);
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   741
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   742
			offset = _AutorailTilehSprite[ti->tileh][_AutorailType[type][0]];
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   743
			if (offset >= 0) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   744
				image = SPR_AUTORAIL_BASE + offset;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   745
				pal = PAL_NONE;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   746
			} else {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   747
				image = SPR_AUTORAIL_BASE - offset;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   748
				pal = PALETTE_TO_RED;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   749
			}
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   750
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   751
			DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti);
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   752
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   753
		} else if (IsPartOfAutoLine(ti->x, ti->y)) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   754
			/* autorail highlighting long line */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   755
			int dir = _thd.drawstyle & ~0xF0;
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   756
			int offset;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   757
			uint side;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
   758
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   759
			if (dir < 2) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   760
				side = 0;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   761
			} else {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   762
				TileIndex start = TileVirtXY(_thd.selstart.x, _thd.selstart.y);
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
   763
				side = delta(delta(TileX(start), TileX(ti->tile)), delta(TileY(start), TileY(ti->tile)));
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   764
			}
1109
1bab892228cd (svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents: 1095
diff changeset
   765
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   766
			offset = _AutorailTilehSprite[ti->tileh][_AutorailType[dir][side]];
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   767
			if (offset >= 0) {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   768
				image = SPR_AUTORAIL_BASE + offset;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   769
				pal = PAL_NONE;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   770
			} else {
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   771
				image = SPR_AUTORAIL_BASE - offset;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   772
				pal = PALETTE_TO_RED;
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   773
			}
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   774
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   775
			DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
   776
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   777
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   778
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   779
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   780
	/* Check if it's inside the outer area? */
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   781
	if (_thd.outersize.x &&
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   782
			_thd.size.x < _thd.size.x + _thd.outersize.x &&
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   783
			IS_INSIDE_1D(ti->x, _thd.pos.x + _thd.offs.x, _thd.size.x + _thd.outersize.x) &&
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
   784
			IS_INSIDE_1D(ti->y, _thd.pos.y + _thd.offs.y, _thd.size.y + _thd.outersize.y)) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   785
		/* Draw a blue rect. */
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
   786
		DrawSelectionSprite(SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh], PALETTE_SEL_TILE_BLUE, ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   787
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   788
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   789
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   790
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
   791
static void ViewportAddLandscape()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   792
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   793
	ViewportDrawer *vd = _cur_vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   794
	int x, y, width, height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   795
	TileInfo ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   796
	bool direction;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   797
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   798
	_cur_ti = &ti;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   799
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   800
	/* Transform into tile coordinates and round to closest full tile */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   801
	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
   802
	y = ((vd->dpi.top >> 1) + (vd->dpi.left >> 2) - 0x10) & ~0xF;
5752
7e417aab8074 (svn r7794) -Cleanup: Remove obsolete, never-used landscape rotation code. And spell obsolete correctly.
peter1138
parents: 5726
diff changeset
   803
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
   804
	/* determine size of area */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   805
	{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   806
		Point pt = RemapCoords(x, y, 241);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   807
		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
   808
		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
   809
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   810
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   811
	assert(width > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   812
	assert(height > 0);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   813
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   814
	direction = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   815
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   816
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   817
		int width_cur = width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   818
		int x_cur = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   819
		int y_cur = y;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   820
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   821
		do {
4238
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   822
			TileType tt;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   823
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   824
			ti.x = x_cur;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   825
			ti.y = y_cur;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   826
			if (0 <= x_cur && x_cur < (int)MapMaxX() * TILE_SIZE &&
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   827
					0 <= y_cur && y_cur < (int)MapMaxY() * TILE_SIZE) {
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   828
				TileIndex tile = TileVirtXY(x_cur, y_cur);
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   829
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   830
				ti.tile = tile;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   831
				ti.tileh = GetTileSlope(tile, &ti.z);
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   832
				tt = GetTileType(tile);
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   833
			} else {
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   834
				ti.tileh = SLOPE_FLAT;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   835
				ti.tile = 0;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   836
				ti.z = 0;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   837
				tt = MP_VOID;
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   838
			}
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   839
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   840
			y_cur += 0x10;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   841
			x_cur -= 0x10;
5752
7e417aab8074 (svn r7794) -Cleanup: Remove obsolete, never-used landscape rotation code. And spell obsolete correctly.
peter1138
parents: 5726
diff changeset
   842
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   843
			_added_tile_sprite = false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   844
			_offset_ground_sprites = false;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   845
4238
e017178ca040 (svn r5806) Inline FindLandscapeHeight() into its only remaining caller and remove the attribute "type" from struct TileInfo
tron
parents: 4231
diff changeset
   846
			_tile_type_procs[tt]->draw_tile_proc(&ti);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   847
			DrawTileSelection(&ti);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   848
		} while (--width_cur);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   849
5752
7e417aab8074 (svn r7794) -Cleanup: Remove obsolete, never-used landscape rotation code. And spell obsolete correctly.
peter1138
parents: 5726
diff changeset
   850
		if ((direction ^= 1) != 0) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   851
			y += 0x10;
5752
7e417aab8074 (svn r7794) -Cleanup: Remove obsolete, never-used landscape rotation code. And spell obsolete correctly.
peter1138
parents: 5726
diff changeset
   852
		} else {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   853
			x += 0x10;
5752
7e417aab8074 (svn r7794) -Cleanup: Remove obsolete, never-used landscape rotation code. And spell obsolete correctly.
peter1138
parents: 5726
diff changeset
   854
		}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   855
	} while (--height);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   856
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   857
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   858
410
8de2aaf20800 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   859
static void ViewportAddTownNames(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   860
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   861
	Town *t;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   862
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   863
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
   864
	if (!HASBIT(_display_opt, DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   865
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   866
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   867
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   868
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   869
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   870
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   871
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   872
	switch (dpi->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   873
		case ZOOM_LVL_NORMAL:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   874
			FOR_ALL_TOWNS(t) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   875
				if (bottom > t->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   876
						top    < t->sign.top + 12 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   877
						right  > t->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   878
						left   < t->sign.left + t->sign.width_1) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   879
					AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   880
						_patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   881
						t->index, t->population);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   882
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   883
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   884
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   885
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   886
		case ZOOM_LVL_OUT_2X:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   887
			right += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   888
			bottom += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   889
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   890
			FOR_ALL_TOWNS(t) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   891
				if (bottom > t->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   892
						top    < t->sign.top + 24 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   893
						right  > t->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   894
						left   < t->sign.left + t->sign.width_1*2) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   895
					AddStringToDraw(t->sign.left + 1, t->sign.top + 1,
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   896
						_patches.population_in_label ? STR_TOWN_LABEL_POP : STR_TOWN_LABEL,
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   897
						t->index, t->population);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   898
				}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   899
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   900
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   901
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   902
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   903
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   904
			right += ScaleByZoom(1, dpi->zoom);
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   905
			bottom += ScaleByZoom(1, dpi->zoom) + 1;
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   906
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   907
			FOR_ALL_TOWNS(t) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   908
				if (bottom > t->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   909
						top    < t->sign.top + ScaleByZoom(12, dpi->zoom) &&
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   910
						right  > t->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   911
						left   < t->sign.left + ScaleByZoom(t->sign.width_2, dpi->zoom)) {
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   912
					AddStringToDraw(t->sign.left + 5, t->sign.top + 1, STR_TOWN_LABEL_TINY_BLACK, t->index, 0);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   913
					AddStringToDraw(t->sign.left + 1, t->sign.top - 3, STR_TOWN_LABEL_TINY_WHITE, t->index, 0);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   914
				}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
   915
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   916
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   917
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   918
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   919
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   920
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   921
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   922
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   923
static void AddStation(const Station *st, StringID str, uint16 width)
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   924
{
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   925
	StringSpriteToDraw *sstd;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   926
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
   927
	sstd = (StringSpriteToDraw*)AddStringToDraw(st->sign.left + 1, st->sign.top + 1, str, st->index, st->facilities);
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   928
	if (sstd != NULL) {
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   929
		sstd->color = (st->owner == OWNER_NONE || st->facilities == 0) ? 0xE : _player_colors[st->owner];
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   930
		sstd->width = width;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   931
	}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   932
}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   933
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   934
410
8de2aaf20800 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
   935
static void ViewportAddStationNames(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   936
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   937
	int left, top, right, bottom;
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   938
	const Station *st;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   939
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
   940
	if (!HASBIT(_display_opt, DO_SHOW_STATION_NAMES) || _game_mode == GM_MENU)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   941
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   942
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   943
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   944
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   945
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   946
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   947
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   948
	switch (dpi->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   949
		case ZOOM_LVL_NORMAL:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   950
			FOR_ALL_STATIONS(st) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   951
				if (bottom > st->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   952
						top    < st->sign.top + 12 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   953
						right  > st->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   954
						left   < st->sign.left + st->sign.width_1) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   955
					AddStation(st, STR_305C_0, st->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   956
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   957
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   958
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   959
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   960
		case ZOOM_LVL_OUT_2X:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   961
			right += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   962
			bottom += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   963
			FOR_ALL_STATIONS(st) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   964
				if (bottom > st->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   965
						top    < st->sign.top + 24 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   966
						right  > st->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   967
						left   < st->sign.left + st->sign.width_1*2) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   968
					AddStation(st, STR_305C_0, st->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   969
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   970
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   971
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   972
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
   973
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   974
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   975
			right += ScaleByZoom(1, dpi->zoom);
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   976
			bottom += ScaleByZoom(1, dpi->zoom) + 1;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   977
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   978
			FOR_ALL_STATIONS(st) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   979
				if (bottom > st->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   980
						top    < st->sign.top + ScaleByZoom(12, dpi->zoom) &&
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   981
						right  > st->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   982
						left   < st->sign.left + ScaleByZoom(st->sign.width_2, dpi->zoom)) {
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   983
					AddStation(st, STR_STATION_SIGN_TINY, st->sign.width_2 | 0x8000);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   984
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   985
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
   986
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   987
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
   988
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   989
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   990
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
   991
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   992
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   993
static void AddSign(const Sign *si, StringID str, uint16 width)
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   994
{
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   995
	StringSpriteToDraw *sstd;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   996
7552
064d734e9900 (svn r10321) -Codechange: refer to sign text by index
peter1138
parents: 7502
diff changeset
   997
	sstd = (StringSpriteToDraw*)AddStringToDraw(si->sign.left + 1, si->sign.top + 1, str, si->index, 0);
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   998
	if (sstd != NULL) {
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
   999
		sstd->color = (si->owner == OWNER_NONE) ? 14 : _player_colors[si->owner];
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1000
		sstd->width = width;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1001
	}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1002
}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1003
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1004
410
8de2aaf20800 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
  1005
static void ViewportAddSigns(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1006
{
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1007
	const Sign *si;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1008
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1009
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1010
	if (!HASBIT(_display_opt, DO_SHOW_SIGNS))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1011
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1012
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1013
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1014
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1015
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1016
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1017
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1018
	switch (dpi->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1019
		case ZOOM_LVL_NORMAL:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1020
			FOR_ALL_SIGNS(si) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1021
				if (bottom > si->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1022
						top    < si->sign.top + 12 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1023
						right  > si->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1024
						left   < si->sign.left + si->sign.width_1) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1025
					AddSign(si, STR_2806, si->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1026
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1027
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1028
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1029
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1030
		case ZOOM_LVL_OUT_2X:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1031
			right += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1032
			bottom += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1033
			FOR_ALL_SIGNS(si) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1034
				if (bottom > si->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1035
						top    < si->sign.top + 24 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1036
						right  > si->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1037
						left   < si->sign.left + si->sign.width_1 * 2) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1038
					AddSign(si, STR_2806, si->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1039
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1040
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1041
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1042
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1043
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1044
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1045
			right += ScaleByZoom(1, dpi->zoom);
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1046
			bottom += ScaleByZoom(1, dpi->zoom) + 1;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1047
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1048
			FOR_ALL_SIGNS(si) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1049
				if (bottom > si->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1050
						top    < si->sign.top + ScaleByZoom(12, dpi->zoom) &&
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1051
						right  > si->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1052
						left   < si->sign.left + ScaleByZoom(si->sign.width_2, dpi->zoom)) {
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1053
					AddSign(si, STR_2002, si->sign.width_2 | 0x8000);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1054
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1055
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1056
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1057
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1058
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1059
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1060
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1061
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1062
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1063
static void AddWaypoint(const Waypoint *wp, StringID str, uint16 width)
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1064
{
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1065
	StringSpriteToDraw *sstd;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1066
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  1067
	sstd = (StringSpriteToDraw*)AddStringToDraw(wp->sign.left + 1, wp->sign.top + 1, str, wp->index, 0);
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1068
	if (sstd != NULL) {
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1069
		sstd->color = (wp->deleted ? 0xE : 11);
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1070
		sstd->width = width;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1071
	}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1072
}
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1073
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1074
410
8de2aaf20800 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
  1075
static void ViewportAddWaypoints(DrawPixelInfo *dpi)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1076
{
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1077
	const Waypoint *wp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1078
	int left, top, right, bottom;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1079
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1080
	if (!HASBIT(_display_opt, DO_WAYPOINTS))
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1081
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1082
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1083
	left = dpi->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1084
	top = dpi->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1085
	right = left + dpi->width;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1086
	bottom = top + dpi->height;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1087
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1088
	switch (dpi->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1089
		case ZOOM_LVL_NORMAL:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1090
			FOR_ALL_WAYPOINTS(wp) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1091
				if (bottom > wp->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1092
						top    < wp->sign.top + 12 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1093
						right  > wp->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1094
						left   < wp->sign.left + wp->sign.width_1) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1095
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT, wp->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1096
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1097
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1098
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1099
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1100
		case ZOOM_LVL_OUT_2X:
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1101
			right += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1102
			bottom += 2;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1103
			FOR_ALL_WAYPOINTS(wp) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1104
				if (bottom > wp->sign.top &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1105
						top    < wp->sign.top + 24 &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1106
						right  > wp->sign.left &&
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1107
						left   < wp->sign.left + wp->sign.width_1*2) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1108
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT, wp->sign.width_1);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1109
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1110
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1111
			break;
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1112
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1113
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1114
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1115
			right += ScaleByZoom(1, dpi->zoom);
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1116
			bottom += ScaleByZoom(1, dpi->zoom) + 1;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1117
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1118
			FOR_ALL_WAYPOINTS(wp) {
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1119
				if (bottom > wp->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1120
						top    < wp->sign.top + ScaleByZoom(12, dpi->zoom) &&
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1121
						right  > wp->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1122
						left   < wp->sign.left + ScaleByZoom(wp->sign.width_2, dpi->zoom)) {
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1123
					AddWaypoint(wp, STR_WAYPOINT_VIEWPORT_TINY, wp->sign.width_2 | 0x8000);
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1124
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1125
			}
5027
1141f07a15b4 (svn r7068) if () cascades -> switch ()
tron
parents: 5026
diff changeset
  1126
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1127
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1128
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1129
	}
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1132
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
  1133
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1134
	char buffer[128];
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1135
	uint w;
0
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
	sign->top = top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1138
4912
d04b3f2bca70 (svn r6884) -Codechange: Add strict bounds checking in string formatting system.
Darkvater
parents: 4885
diff changeset
  1139
	GetString(buffer, str, lastof(buffer));
4609
6c337b3fbf4b (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1140
	w = GetStringBoundingBox(buffer).width + 3;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1141
	sign->width_1 = w;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1142
	sign->left = left - w / 2;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1143
4609
6c337b3fbf4b (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1144
	/* zoomed out version */
3798
37a2090eac94 (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
  1145
	_cur_fontsize = FS_SMALL;
4609
6c337b3fbf4b (svn r6462) -Codechange: Have GetStringWidth() return width as well as the height bounding
Darkvater
parents: 4539
diff changeset
  1146
	w = GetStringBoundingBox(buffer).width + 3;
3798
37a2090eac94 (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
  1147
	_cur_fontsize = FS_NORMAL;
1390
53a5713cf3f9 (svn r1894) - Codechange: cleaned up the console a bit, wholly unified handling of text with that of editboxes
Darkvater
parents: 1363
diff changeset
  1148
	sign->width_2 = w;
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
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1151
410
8de2aaf20800 (svn r607) -Patch: [ 985102 ] static cleanup
tron
parents: 395
diff changeset
  1152
static void ViewportDrawTileSprites(TileSpriteToDraw *ts)
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1153
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1154
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1155
		Point pt = RemapCoords(ts->x, ts->y, ts->z);
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  1156
		DrawSprite(ts->image, ts->pal, pt.x, pt.y);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1157
		ts = ts->next;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1158
	} while (ts != NULL);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1159
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1160
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1161
static void ViewportSortParentSprites(ParentSpriteToDraw *psd[])
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1162
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1163
	while (*psd != NULL) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1164
		ParentSpriteToDraw* ps = *psd;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1165
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
  1166
		if (!ps->comparison_done) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1167
			ParentSpriteToDraw** psd2 = psd;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1168
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
  1169
			ps->comparison_done = true;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1170
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1171
			while (*++psd2 != NULL) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1172
				ParentSpriteToDraw* ps2 = *psd2;
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1173
				ParentSpriteToDraw** psd3;
1934
b3d568113d4d (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
  1174
8076
10e9b5e354d9 (svn r11105) -Codechange [FS#1223]: add some support for tuning of the bounding boxes for some special cases (like tunnels and bridges). Patch by frosch.
rubidium
parents: 8075
diff changeset
  1175
				if (ps2->comparison_done) continue;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1176
4187
50b94420d9a2 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1177
				/* Decide which comparator to use, based on whether the bounding
50b94420d9a2 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1178
				 * boxes overlap
50b94420d9a2 (svn r5629) Simplify the test whether two bounding boxes overlap
tron
parents: 4186
diff changeset
  1179
				 */
8075
2cc7ed645b11 (svn r11104) -Fix: bounding boxes also overlap when the min of a bounding box is equal to the max of another bounding box. Patch by frosch.
rubidium
parents: 8074
diff changeset
  1180
				if (ps->xmax >= ps2->xmin && ps->xmin <= ps2->xmax && // overlap in X?
2cc7ed645b11 (svn r11104) -Fix: bounding boxes also overlap when the min of a bounding box is equal to the max of another bounding box. Patch by frosch.
rubidium
parents: 8074
diff changeset
  1181
						ps->ymax >= ps2->ymin && ps->ymin <= ps2->ymax && // overlap in Y?
2cc7ed645b11 (svn r11104) -Fix: bounding boxes also overlap when the min of a bounding box is equal to the max of another bounding box. Patch by frosch.
rubidium
parents: 8074
diff changeset
  1182
						ps->zmax >= ps2->zmin && ps->zmin <= ps2->zmax) { // overlap in Z?
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1183
					/* Use X+Y+Z as the sorting order, so sprites closer to the bottom of
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1184
					 * the screen and with higher Z elevation, are drawn in front.
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1185
					 * Here X,Y,Z are the coordinates of the "center of mass" of the sprite,
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1186
					 * i.e. X=(left+right)/2, etc.
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1187
					 * However, since we only care about order, don't actually divide / 2
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1188
					 */
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1189
					if (ps->xmin + ps->xmax + ps->ymin + ps->ymax + ps->zmin + ps->zmax <=
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1190
							ps2->xmin + ps2->xmax + ps2->ymin + ps2->ymax + ps2->zmin + ps2->zmax) {
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1191
						continue;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1192
					}
1934
b3d568113d4d (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
  1193
				} else {
8074
6226685d955f (svn r11103) -Codechange: remove pointless comparison as it can never ever be true (unless you've got at least 3 bit errors and then you're screwed anyway). Patch by frosch.
rubidium
parents: 8065
diff changeset
  1194
					/* We only change the order, if it is definite.
6226685d955f (svn r11103) -Codechange: remove pointless comparison as it can never ever be true (unless you've got at least 3 bit errors and then you're screwed anyway). Patch by frosch.
rubidium
parents: 8065
diff changeset
  1195
					 * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap.
6226685d955f (svn r11103) -Codechange: remove pointless comparison as it can never ever be true (unless you've got at least 3 bit errors and then you're screwed anyway). Patch by frosch.
rubidium
parents: 8065
diff changeset
  1196
					 * That is: If one partial order says ps behind ps2, do not change the order.
6226685d955f (svn r11103) -Codechange: remove pointless comparison as it can never ever be true (unless you've got at least 3 bit errors and then you're screwed anyway). Patch by frosch.
rubidium
parents: 8065
diff changeset
  1197
					 */
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1198
					if (ps->xmax < ps2->xmin ||
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1199
							ps->ymax < ps2->ymin ||
8074
6226685d955f (svn r11103) -Codechange: remove pointless comparison as it can never ever be true (unless you've got at least 3 bit errors and then you're screwed anyway). Patch by frosch.
rubidium
parents: 8065
diff changeset
  1200
							ps->zmax < ps2->zmin) {
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1201
						continue;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1202
					}
1934
b3d568113d4d (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
  1203
				}
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1204
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1205
				/* Swap the two sprites ps and ps2 using bubble-sort algorithm. */
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1206
				psd3 = psd;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1207
				do {
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1208
					ParentSpriteToDraw* temp = *psd3;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1209
					*psd3 = ps2;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1210
					ps2 = temp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1211
4188
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1212
					psd3++;
c817518c79cc (svn r5630) Replace a boolean variable by continue
tron
parents: 4187
diff changeset
  1213
				} while (psd3 <= psd2);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1214
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1215
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1216
			psd++;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1217
		}
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
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1220
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1221
static void ViewportDrawParentSprites(ParentSpriteToDraw *psd[])
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1222
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1223
	for (; *psd != NULL; psd++) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1224
		const ParentSpriteToDraw* ps = *psd;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1225
		const ChildScreenSpriteToDraw* cs;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1226
8097
68eefbb4ff46 (svn r11128) -Fix: a lot of graphical glitches by changing some bounding boxes. It's not perfect yet, but a *very* good step into the right direction. Patch by frosch.
rubidium
parents: 8076
diff changeset
  1227
		if (ps->image != SPR_EMPTY_BOUNDING_BOX) DrawSprite(ps->image, ps->pal, ps->x, ps->y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1228
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1229
		for (cs = ps->child; cs != NULL; cs = cs->next) {
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  1230
			DrawSprite(cs->image, cs->pal, ps->left + cs->x, ps->top + cs->y);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1231
		}
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
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1234
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1235
static void ViewportDrawStrings(DrawPixelInfo *dpi, const StringSpriteToDraw *ss)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1236
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1237
	DrawPixelInfo dp;
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1238
	ZoomLevel zoom;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1239
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1240
	_cur_dpi = &dp;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1241
	dp = *dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1242
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1243
	zoom = dp.zoom;
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1244
	dp.zoom = ZOOM_LVL_NORMAL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1245
7150
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1246
	dp.left   = UnScaleByZoom(dp.left,   zoom);
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1247
	dp.top    = UnScaleByZoom(dp.top,    zoom);
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1248
	dp.width  = UnScaleByZoom(dp.width,  zoom);
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1249
	dp.height = UnScaleByZoom(dp.height, zoom);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1250
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1251
	do {
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1252
		uint16 colour;
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1253
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1254
		if (ss->width != 0) {
7150
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1255
			int x = UnScaleByZoom(ss->x, zoom) - 1;
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1256
			int y = UnScaleByZoom(ss->y, zoom) - 1;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1257
			int bottom = y + 11;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1258
			int w = ss->width;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1259
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1260
			if (w & 0x8000) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1261
				w &= ~0x8000;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1262
				y--;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1263
				bottom -= 6;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1264
				w -= 3;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1265
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1266
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1267
		/* Draw the rectangle if 'tranparent station signs' is off,
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1268
		 * or if we are drawing a general text sign (STR_2806) */
6923
6913c8a82cc0 (svn r9563) -Feature: Add more finer control to transparency options, including a new toolbar, accessible from the map menu or Ctrl X. Patch by Wolf01.
peter1138
parents: 6919
diff changeset
  1269
			if (!HASBIT(_transparent_opt, TO_SIGNS) || ss->string == STR_2806) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1270
				DrawFrameRect(
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1271
					x, y, x + w, bottom, ss->color,
6923
6913c8a82cc0 (svn r9563) -Feature: Add more finer control to transparency options, including a new toolbar, accessible from the map menu or Ctrl X. Patch by Wolf01.
peter1138
parents: 6919
diff changeset
  1272
					HASBIT(_transparent_opt, TO_SIGNS) ? FR_TRANSPARENT : FR_NONE
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1273
				);
6923
6913c8a82cc0 (svn r9563) -Feature: Add more finer control to transparency options, including a new toolbar, accessible from the map menu or Ctrl X. Patch by Wolf01.
peter1138
parents: 6919
diff changeset
  1274
			}
0
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
534
17ab2f22ff74 (svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents: 507
diff changeset
  1277
		SetDParam(0, ss->params[0]);
17ab2f22ff74 (svn r901) Small step in the process to clean up the DPARAM mess:
tron
parents: 507
diff changeset
  1278
		SetDParam(1, ss->params[1]);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1279
		/* if we didn't draw a rectangle, or if transparant building is on,
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1280
		 * draw the text in the color the rectangle would have */
6944
9131836028e1 (svn r9596) -Fix (r9563): (non-)transparency of station signs was confused with building transparency...
peter1138
parents: 6939
diff changeset
  1281
		if (HASBIT(_transparent_opt, TO_SIGNS) && ss->string != STR_2806 && ss->width != 0) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1282
			/* Real colors need the IS_PALETTE_COLOR flag
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1283
			 * otherwise colors from _string_colormap are assumed. */
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1284
			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
  1285
		} else {
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1286
			colour = 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1287
		}
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1288
		DrawString(
7150
2cfe4a46fa1c (svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight
parents: 7149
diff changeset
  1289
			UnScaleByZoom(ss->x, zoom), UnScaleByZoom(ss->y, zoom) - (ss->width & 0x8000 ? 2 : 0),
5025
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1290
			ss->string, colour
48314eb3efde (svn r7066) -Codechange: Factorise common code
tron
parents: 5014
diff changeset
  1291
		);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1292
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1293
		ss = ss->next;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1294
	} while (ss != NULL);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1295
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1296
430
75820dedf4f1 (svn r631) Merge r440, r444, r485, r630 to trunk:
tron
parents: 410
diff changeset
  1297
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
  1298
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1299
	ViewportDrawer vd;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1300
	int mask;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1301
	int x;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1302
	int y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1303
	DrawPixelInfo *old_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1304
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1305
	byte mem[VIEWPORT_DRAW_MEM];
137
73f897e1bf4a (svn r138) -Add: 64x64 stations are now nicely painted (increased size of
truelight
parents: 133
diff changeset
  1306
	ParentSpriteToDraw *parent_list[6144];
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1307
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1308
	_cur_vd = &vd;
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
	old_dpi = _cur_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1311
	_cur_dpi = &vd.dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1312
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1313
	vd.dpi.zoom = vp->zoom;
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1314
	mask = ScaleByZoom(-1, vp->zoom);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1315
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1316
	vd.combine_sprites = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1317
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1318
	vd.dpi.width = (right - left) & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1319
	vd.dpi.height = (bottom - top) & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1320
	vd.dpi.left = left & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1321
	vd.dpi.top = top & mask;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1322
	vd.dpi.pitch = old_dpi->pitch;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1323
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1324
	x = UnScaleByZoom(vd.dpi.left - (vp->virtual_left & mask), vp->zoom) + vp->left;
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1325
	y = UnScaleByZoom(vd.dpi.top - (vp->virtual_top & mask), vp->zoom) + vp->top;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1326
7433
8e410e7ec0d7 (svn r10190) -Codechange: merged renderer and blitter to one single class API: blitter
truelight
parents: 7374
diff changeset
  1327
	vd.dpi.dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(old_dpi->dst_ptr, x - old_dpi->left, y - old_dpi->top);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1328
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1329
	vd.parent_list = parent_list;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1330
	vd.eof_parent_list = endof(parent_list);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1331
	vd.spritelist_mem = mem;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1332
	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
  1333
	vd.last_string = &vd.first_string;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1334
	vd.first_string = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1335
	vd.last_tile = &vd.first_tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1336
	vd.first_tile = NULL;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1337
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1338
	ViewportAddLandscape();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1339
	ViewportAddVehicles(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1340
	DrawTextEffects(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1341
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1342
	ViewportAddTownNames(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1343
	ViewportAddStationNames(&vd.dpi);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1344
	ViewportAddSigns(&vd.dpi);
395
4c990f33dab7 (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
  1345
	ViewportAddWaypoints(&vd.dpi);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1346
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1347
	/* This assert should never happen (because the length of the parent_list
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1348
	 *  is checked) */
979
f12f96116cdd (svn r1475) Fix some more signed/unsigned comparison warnings
tron
parents: 926
diff changeset
  1349
	assert(vd.parent_list <= endof(parent_list));
133
321532e90bc8 (svn r134) -Fix: [976583] parent_list was too small
truelight
parents: 58
diff changeset
  1350
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1351
	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
  1352
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1353
	/* null terminate parent sprite list */
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1354
	*vd.parent_list = NULL;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1355
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1356
	ViewportSortParentSprites(parent_list);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1357
	ViewportDrawParentSprites(parent_list);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1358
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1359
	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
  1360
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1361
	_cur_dpi = old_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1362
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1363
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1364
/** Make sure we don't draw a too big area at a time.
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1365
 * If we do, the sprite memory will overflow. */
5120
e12dfc67761f (svn r7200) -Codechange: remove unneeded redraw (console.c), coding style, use FindWindowById
Darkvater
parents: 5045
diff changeset
  1366
static void ViewportDrawChk(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
  1367
{
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1368
	if (ScaleByZoom(bottom - top, vp->zoom) * ScaleByZoom(right - left, vp->zoom) > 180000) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1369
		if ((bottom - top) > (right - left)) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1370
			int t = (top + bottom) >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1371
			ViewportDrawChk(vp, left, top, right, t);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1372
			ViewportDrawChk(vp, left, t, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1373
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1374
			int t = (left + right) >> 1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1375
			ViewportDrawChk(vp, left, top, t, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1376
			ViewportDrawChk(vp, t, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1377
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1378
	} else {
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1379
		ViewportDoDraw(vp,
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1380
			ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1381
			ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1382
			ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1383
			ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1384
		);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1385
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1386
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1387
5120
e12dfc67761f (svn r7200) -Codechange: remove unneeded redraw (console.c), coding style, use FindWindowById
Darkvater
parents: 5045
diff changeset
  1388
static inline void ViewportDraw(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
  1389
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1390
	if (right <= vp->left || bottom <= vp->top) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1391
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1392
	if (left >= vp->left + vp->width) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1393
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1394
	if (left < vp->left) left = vp->left;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1395
	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
  1396
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1397
	if (top >= vp->top + vp->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
	if (top < vp->top) top = vp->top;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1400
	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
  1401
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1402
	ViewportDrawChk(vp, left, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1403
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1404
5120
e12dfc67761f (svn r7200) -Codechange: remove unneeded redraw (console.c), coding style, use FindWindowById
Darkvater
parents: 5045
diff changeset
  1405
void DrawWindowViewport(const Window *w)
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1406
{
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1407
	DrawPixelInfo *dpi = _cur_dpi;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1408
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1409
	dpi->left += w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1410
	dpi->top += w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1411
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1412
	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
  1413
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1414
	dpi->left -= w->left;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1415
	dpi->top -= w->top;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1416
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1417
7565
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1418
static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y)
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1419
{
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1420
	/* Centre of the viewport is hot spot */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1421
	x += vp->virtual_width / 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1422
	y += vp->virtual_height / 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1423
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1424
	/* Convert viewport coordinates to map coordinates
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1425
	 * Calculation is scaled by 4 to avoid rounding errors */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1426
	int vx = -x + y * 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1427
	int vy =  x + y * 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1428
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1429
	/* clamp to size of map */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1430
	vx = clamp(vx, 0, MapMaxX() * TILE_SIZE * 4);
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1431
	vy = clamp(vy, 0, MapMaxY() * TILE_SIZE * 4);
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1432
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1433
	/* Convert map coordinates to viewport coordinates */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1434
	x = (-vx + vy) / 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1435
	y = ( vx + vy) / 4;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1436
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1437
	/* Remove centreing */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1438
	x -= vp->virtual_width / 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1439
	y -= vp->virtual_height / 2;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1440
}
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1441
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1442
void UpdateViewportPosition(Window *w)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1443
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1444
	const ViewPort *vp = w->viewport;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1445
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1446
	if (WP(w, vp_d).follow_vehicle != INVALID_VEHICLE) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1447
		const Vehicle* veh = GetVehicle(WP(w,vp_d).follow_vehicle);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1448
		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
  1449
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1450
		SetViewportPosition(w, pt.x, pt.y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1451
	} else {
7565
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1452
		/* Ensure the destination location is within the map */
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1453
		ClampViewportToMap(vp, WP(w, vp_d).dest_scrollpos_x, WP(w, vp_d).dest_scrollpos_y);
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1454
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1455
		int delta_x = WP(w, vp_d).dest_scrollpos_x - WP(w, vp_d).scrollpos_x;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1456
		int delta_y = WP(w, vp_d).dest_scrollpos_y - WP(w, vp_d).scrollpos_y;
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1457
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1458
		if (delta_x != 0 || delta_y != 0) {
7227
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1459
			if (_patches.smooth_scroll) {
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1460
				int max_scroll = ScaleByMapSize1D(512);
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1461
				/* Not at our desired positon yet... */
7565
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1462
				WP(w, vp_d).scrollpos_x += clamp(delta_x / 4, -max_scroll, max_scroll);
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1463
				WP(w, vp_d).scrollpos_y += clamp(delta_y / 4, -max_scroll, max_scroll);
7227
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1464
			} else {
7565
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1465
				WP(w, vp_d).scrollpos_x = WP(w, vp_d).dest_scrollpos_x;
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1466
				WP(w, vp_d).scrollpos_y = WP(w, vp_d).dest_scrollpos_y;
7227
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1467
			}
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1468
		}
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1469
7565
a2948dd92c0e (svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138
parents: 7552
diff changeset
  1470
		ClampViewportToMap(vp, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1471
		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
  1472
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1473
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1474
8041
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1475
/**
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1476
 * Marks a viewport as dirty for repaint.
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1477
 *
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1478
 * @param vp The viewport to mark as dirty
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1479
 * @todo documents the missing parameters @c left, @c top, @c right and @c bottom
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1480
 * @todo detailed description missing
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1481
 * @ingroup dirty
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1482
 */
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1483
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
  1484
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1485
	right -= vp->virtual_left;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1486
	if (right <= 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1487
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1488
	bottom -= vp->virtual_top;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1489
	if (bottom <= 0) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1490
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1491
	left = max(0, left - vp->virtual_left);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1492
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1493
	if (left >= vp->virtual_width) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1494
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1495
	top = max(0, top - vp->virtual_top);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1496
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1497
	if (top >= vp->virtual_height) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1498
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1499
	SetDirtyBlocks(
7122
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1500
		UnScaleByZoom(left, vp->zoom) + vp->left,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1501
		UnScaleByZoom(top, vp->zoom) + vp->top,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1502
		UnScaleByZoom(right, vp->zoom) + vp->left,
0607a15aedc0 (svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight
parents: 7120
diff changeset
  1503
		UnScaleByZoom(bottom, vp->zoom) + vp->top
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1504
	);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1505
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1506
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1507
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
  1508
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1509
	const ViewPort *vp = _viewports;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1510
	uint32 act = _active_viewports;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1511
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1512
		if (act & 1) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1513
			assert(vp->width != 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1514
			MarkViewportDirty(vp, left, top, right, bottom);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1515
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1516
	} while (vp++,act>>=1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1517
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1518
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1519
void MarkTileDirtyByTile(TileIndex tile)
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1520
{
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1521
	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
  1522
	MarkAllViewportsDirty(
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1523
		pt.x - 31,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1524
		pt.y - 122,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1525
		pt.x - 31 + 67,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1526
		pt.y - 122 + 154
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1527
	);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1528
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1529
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1530
void MarkTileDirty(int x, int y)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1531
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1532
	uint z = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1533
	Point pt;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1534
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1535
	if (IS_INT_INSIDE(x, 0, MapSizeX() * TILE_SIZE) &&
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1536
			IS_INT_INSIDE(y, 0, MapSizeY() * TILE_SIZE))
1980
9ea0c89fbb58 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  1537
		z = GetTileZ(TileVirtXY(x, y));
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1538
	pt = RemapCoords(x, y, z);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1539
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1540
	MarkAllViewportsDirty(
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1541
		pt.x - 31,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1542
		pt.y - 122,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1543
		pt.x - 31 + 67,
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1544
		pt.y - 122 + 154
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1545
	);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1546
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1547
8041
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1548
/**
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1549
 * Marks the selected tiles as dirty.
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1550
 *
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1551
 * This function marks the selected tiles as dirty for repaint
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1552
 *
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1553
 * @note Documentation may be wrong (Progman)
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1554
 * @ingroup dirty
63e760418a15 (svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium
parents: 7993
diff changeset
  1555
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  1556
static void SetSelectionTilesDirty()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1557
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1558
	int y_size, x_size;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1559
	int x = _thd.pos.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1560
	int y = _thd.pos.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1561
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1562
	x_size = _thd.size.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1563
	y_size = _thd.size.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1564
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1565
	if (_thd.outersize.x) {
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1566
		x_size += _thd.outersize.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1567
		x += _thd.offs.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1568
		y_size += _thd.outersize.y;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1569
		y += _thd.offs.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1570
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1571
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1572
	assert(x_size > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1573
	assert(y_size > 0);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1574
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1575
	x_size += x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1576
	y_size += y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1577
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1578
	do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1579
		int y_bk = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1580
		do {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1581
			MarkTileDirty(x, y);
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1582
		} while ( (y += TILE_SIZE) != y_size);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1583
		y = y_bk;
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1584
	} while ( (x += TILE_SIZE) != x_size);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1585
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1586
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1587
1990
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1588
void SetSelectionRed(bool b)
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1589
{
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1590
	_thd.make_square_red = b;
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1591
	SetSelectionTilesDirty();
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1592
}
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1593
90eb49e87b90 (svn r2496) -Fix: [1179933] When toggling build/remove via keyboard the selection wasn't correctly redrawn
tron
parents: 1980
diff changeset
  1594
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1595
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
  1596
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1597
	const Town *t;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1598
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1599
	if (!HASBIT(_display_opt, DO_SHOW_TOWN_NAMES)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1600
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1601
	switch (vp->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1602
		case ZOOM_LVL_NORMAL:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1603
			x = x - vp->left + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1604
			y = y - vp->top  + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1605
			FOR_ALL_TOWNS(t) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1606
				if (y >= t->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1607
						y < t->sign.top + 12 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1608
						x >= t->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1609
						x < t->sign.left + t->sign.width_1) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1610
					ShowTownViewWindow(t->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1611
					return true;
4134f0452cd6 (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
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1614
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1615
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1616
		case ZOOM_LVL_OUT_2X:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1617
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1618
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1619
			FOR_ALL_TOWNS(t) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1620
				if (y >= t->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1621
						y < t->sign.top + 24 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1622
						x >= t->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1623
						x < t->sign.left + t->sign.width_1 * 2) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1624
					ShowTownViewWindow(t->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1625
					return true;
4134f0452cd6 (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
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1628
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1629
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1630
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1631
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1632
			x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1633
			y = ScaleByZoom(y - vp->top  + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1634
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1635
			FOR_ALL_TOWNS(t) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1636
				if (y >= t->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1637
						y < t->sign.top + ScaleByZoom(12, vp->zoom) &&
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1638
						x >= t->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1639
						x < t->sign.left + ScaleByZoom(t->sign.width_2, vp->zoom)) {
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1640
					ShowTownViewWindow(t->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1641
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1642
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1643
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1644
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1645
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1646
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1647
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1648
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1649
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1650
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1651
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1652
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1653
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
  1654
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1655
	const Station *st;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1656
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1657
	if (!HASBIT(_display_opt, DO_SHOW_STATION_NAMES)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1658
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1659
	switch (vp->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1660
		case ZOOM_LVL_NORMAL:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1661
			x = x - vp->left + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1662
			y = y - vp->top  + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1663
			FOR_ALL_STATIONS(st) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1664
				if (y >= st->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1665
						y < st->sign.top + 12 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1666
						x >= st->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1667
						x < st->sign.left + st->sign.width_1) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1668
					ShowStationViewWindow(st->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1669
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1670
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1671
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1672
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1673
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1674
		case ZOOM_LVL_OUT_2X:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1675
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1676
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1677
			FOR_ALL_STATIONS(st) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1678
				if (y >= st->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1679
						y < st->sign.top + 24 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1680
						x >= st->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1681
						x < st->sign.left + st->sign.width_1 * 2) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1682
					ShowStationViewWindow(st->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1683
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1684
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1685
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1686
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1687
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1688
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1689
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1690
			x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1691
			y = ScaleByZoom(y - vp->top  + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1692
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1693
			FOR_ALL_STATIONS(st) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1694
				if (y >= st->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1695
						y < st->sign.top + ScaleByZoom(12, vp->zoom) &&
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1696
						x >= st->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1697
						x < st->sign.left + ScaleByZoom(st->sign.width_2, vp->zoom)) {
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1698
					ShowStationViewWindow(st->index);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1699
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1700
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1701
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1702
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1703
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1704
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1705
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1706
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1707
	return false;
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
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1710
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1711
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
  1712
{
4349
2fc39ff2626e (svn r6050) -Codechange: mass-renamed SignStruct -> Sign and ss -> si. Now functions and variables all match eachother
truelight
parents: 4346
diff changeset
  1713
	const Sign *si;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1714
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1715
	if (!HASBIT(_display_opt, DO_SHOW_SIGNS) || _current_player == PLAYER_SPECTATOR) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1716
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1717
	switch (vp->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1718
		case ZOOM_LVL_NORMAL:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1719
			x = x - vp->left + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1720
			y = y - vp->top  + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1721
			FOR_ALL_SIGNS(si) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1722
				if (y >= si->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1723
						y <  si->sign.top + 12 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1724
						x >= si->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1725
						x <  si->sign.left + si->sign.width_1) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1726
					ShowRenameSignWindow(si);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1727
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1728
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1729
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1730
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1731
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1732
		case ZOOM_LVL_OUT_2X:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1733
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1734
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1735
			FOR_ALL_SIGNS(si) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1736
				if (y >= si->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1737
						y <  si->sign.top + 24 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1738
						x >= si->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1739
						x <  si->sign.left + si->sign.width_1 * 2) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1740
					ShowRenameSignWindow(si);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1741
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1742
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1743
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1744
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1745
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1746
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1747
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1748
			x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1749
			y = ScaleByZoom(y - vp->top  + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1750
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1751
			FOR_ALL_SIGNS(si) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1752
				if (y >= si->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1753
						y <  si->sign.top + ScaleByZoom(12, vp->zoom) &&
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1754
						x >= si->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1755
						x <  si->sign.left + ScaleByZoom(si->sign.width_2, vp->zoom)) {
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1756
					ShowRenameSignWindow(si);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1757
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1758
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1759
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1760
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1761
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1762
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1763
	}
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
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1766
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1767
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1768
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1769
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
  1770
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1771
	const Waypoint *wp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1772
7087
b65f7298f106 (svn r9805) -Codechange: Use HASBIT() et al for display options bits.
peter1138
parents: 6987
diff changeset
  1773
	if (!HASBIT(_display_opt, DO_WAYPOINTS)) return false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1774
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1775
	switch (vp->zoom) {
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1776
		case ZOOM_LVL_NORMAL:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1777
			x = x - vp->left + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1778
			y = y - vp->top  + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1779
			FOR_ALL_WAYPOINTS(wp) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1780
				if (y >= wp->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1781
						y < wp->sign.top + 12 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1782
						x >= wp->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1783
						x < wp->sign.left + wp->sign.width_1) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1784
					ShowRenameWaypointWindow(wp);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1785
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1786
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1787
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1788
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1789
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1790
		case ZOOM_LVL_OUT_2X:
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1791
			x = (x - vp->left + 1) * 2 + vp->virtual_left;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1792
			y = (y - vp->top  + 1) * 2 + vp->virtual_top;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1793
			FOR_ALL_WAYPOINTS(wp) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1794
				if (y >= wp->sign.top &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1795
						y < wp->sign.top + 24 &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1796
						x >= wp->sign.left &&
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1797
						x < wp->sign.left + wp->sign.width_1 * 2) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1798
					ShowRenameWaypointWindow(wp);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1799
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1800
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1801
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1802
			break;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1803
7120
e31767effc16 (svn r9844) -Codechange: replace zoomlevel with an enum
truelight
parents: 7087
diff changeset
  1804
		case ZOOM_LVL_OUT_4X:
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1805
		case ZOOM_LVL_OUT_8X:
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1806
			x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1807
			y = ScaleByZoom(y - vp->top  + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top;
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1808
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1809
			FOR_ALL_WAYPOINTS(wp) {
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1810
				if (y >= wp->sign.top &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1811
						y < wp->sign.top + ScaleByZoom(12, vp->zoom) &&
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1812
						x >= wp->sign.left &&
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1813
						x < wp->sign.left + ScaleByZoom(wp->sign.width_2, vp->zoom)) {
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1814
					ShowRenameWaypointWindow(wp);
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1815
					return true;
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1816
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1817
			}
4471
4134f0452cd6 (svn r6256) if () cascades -> switch ()
tron
parents: 4444
diff changeset
  1818
			break;
7149
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1819
ba2798e551a3 (svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight
parents: 7122
diff changeset
  1820
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1821
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1822
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1823
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1824
}
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
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1827
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
  1828
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1829
	Point pt = TranslateXYToTileCoord(vp, x, y);
1977
4392ae3d8e31 (svn r2483) Replace almost 500 "uint tile" (and variants) with "TileIndex tile"
tron
parents: 1964
diff changeset
  1830
1980
9ea0c89fbb58 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  1831
	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
  1832
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1833
2662
42c11a1a0a4b (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
  1834
42c11a1a0a4b (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
  1835
static void SafeShowTrainViewWindow(const Vehicle* v)
42c11a1a0a4b (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
  1836
{
7993
76b0eb3e19c9 (svn r11011) -Fix [FS#1129]: GetFirstVehicleInChain did change the game state while being marked const.
rubidium
parents: 7982
diff changeset
  1837
	if (!IsFrontEngine(v)) v = v->First();
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7829
diff changeset
  1838
	ShowVehicleViewWindow(v);
2662
42c11a1a0a4b (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
  1839
}
42c11a1a0a4b (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
  1840
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
  1841
static void SafeShowRoadVehViewWindow(const Vehicle *v)
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
  1842
{
7993
76b0eb3e19c9 (svn r11011) -Fix [FS#1129]: GetFirstVehicleInChain did change the game state while being marked const.
rubidium
parents: 7982
diff changeset
  1843
	if (!IsRoadVehFront(v)) v = v->First();
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7829
diff changeset
  1844
	ShowVehicleViewWindow(v);
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
  1845
}
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
  1846
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1847
static void Nop(const Vehicle *v) {}
2662
42c11a1a0a4b (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
  1848
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1849
typedef void OnVehicleClickProc(const Vehicle *v);
2662
42c11a1a0a4b (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
  1850
static OnVehicleClickProc* const _on_vehicle_click_proc[] = {
42c11a1a0a4b (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
  1851
	SafeShowTrainViewWindow,
7353
716c6dd9322a (svn r10097) -Feature: Add support for articulated road vehicles, or callbacks 11 and 17 for
maedhros
parents: 7349
diff changeset
  1852
	SafeShowRoadVehViewWindow,
7982
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7829
diff changeset
  1853
	ShowVehicleViewWindow,
539e32cc37ce (svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium
parents: 7829
diff changeset
  1854
	ShowVehicleViewWindow,
2662
42c11a1a0a4b (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
  1855
	Nop, // Special vehicles
42c11a1a0a4b (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
  1856
	Nop  // Disaster vehicles
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1857
};
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1858
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1859
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
  1860
{
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1861
	const Vehicle *v;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1862
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1863
	if (CheckClickOnTown(vp, x, y)) return;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1864
	if (CheckClickOnStation(vp, x, y)) return;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1865
	if (CheckClickOnSign(vp, x, y)) return;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1866
	if (CheckClickOnWaypoint(vp, x, y)) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1867
	CheckClickOnLandscape(vp, x, y);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1868
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1869
	v = CheckClickOnVehicle(vp, x, y);
3809
cff6d5e916f7 (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
  1870
	if (v != NULL) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5137
diff changeset
  1871
		DEBUG(misc, 2, "Vehicle %d (index %d) at %p", v->unitnumber, v->index, v);
6206
67358999d80d (svn r8621) -Codechange: assigned new numbers to the VEH_(type) enum so that VEH_Train is 0, VEH_Road is 1 and so on
bjarni
parents: 6144
diff changeset
  1872
		_on_vehicle_click_proc[v->type](v);
3809
cff6d5e916f7 (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
  1873
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1874
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1875
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  1876
Vehicle *CheckMouseOverVehicle()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1877
{
4171
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1878
	const Window *w;
3fadda3afe70 (svn r5609) CodeChange : Apply coding style
belugas
parents: 4164
diff changeset
  1879
	const ViewPort *vp;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1880
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1881
	int x = _cursor.pos.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1882
	int y = _cursor.pos.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1883
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1884
	w = FindWindowFromPt(x, y);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1885
	if (w == NULL) return NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1886
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1887
	vp = IsPtInWindowViewport(w, x, y);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1888
	return (vp != NULL) ? CheckClickOnVehicle(vp, x, y) : NULL;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1889
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1890
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1891
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1892
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  1893
void PlaceObject()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1894
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1895
	Point pt;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1896
	Window *w;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  1897
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1898
	pt = GetTileBelowCursor();
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1899
	if (pt.x == -1) return;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1900
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1901
	if (_thd.place_mode == VHM_POINT) {
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1902
		pt.x += 8;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1903
		pt.y += 8;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1904
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1905
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1906
	_tile_fract_coords.x = pt.x & 0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1907
	_tile_fract_coords.y = pt.y & 0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1908
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1909
	w = GetCallbackWnd();
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1910
	if (w != NULL) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1911
		WindowEvent e;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1912
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1913
		e.event = WE_PLACE_OBJ;
4634
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  1914
		e.we.place.pt = pt;
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  1915
		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
  1916
		w->wndproc(w, &e);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1917
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1918
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1919
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
  1920
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
  1921
/* scrolls the viewport in a window to a given location */
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1922
bool ScrollWindowTo(int x , int y, Window *w, bool instant)
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
  1923
{
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
  1924
	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
  1925
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
  1926
	pt = MapXYZToViewport(w->viewport, x, y, GetSlopeZ(x, y));
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1927
	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
  1928
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1929
	if (WP(w, vp_d).dest_scrollpos_x == pt.x && WP(w, vp_d).dest_scrollpos_y == pt.y)
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1930
		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
  1931
7227
41a868cb2c8e (svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138
parents: 7226
diff changeset
  1932
	if (instant) {
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1933
		WP(w, vp_d).scrollpos_x = pt.x;
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1934
		WP(w, vp_d).scrollpos_y = pt.y;
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1935
	}
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1936
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1937
	WP(w, vp_d).dest_scrollpos_x = pt.x;
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1938
	WP(w, vp_d).dest_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
  1939
	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
  1940
}
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
  1941
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
  1942
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1943
bool ScrollMainWindowTo(int x, int y, bool instant)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1944
{
4339
f5e99218131a (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
  1945
	Window *w;
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1946
	bool res = ScrollWindowTo(x, y, FindWindowById(WC_MAIN_WINDOW, 0), instant);
4339
f5e99218131a (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
  1947
f5e99218131a (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
  1948
	/* If a user scrolls to a tile (via what way what so ever) and already is on
f5e99218131a (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
  1949
	 *  that tile (e.g.: pressed twice), move the smallmap to that location,
f5e99218131a (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
  1950
	 *  so you directly see where you are on the smallmap. */
f5e99218131a (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
  1951
f5e99218131a (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
  1952
	if (res) return res;
f5e99218131a (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
  1953
f5e99218131a (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
  1954
	w = FindWindowById(WC_SMALLMAP, 0);
f5e99218131a (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
  1955
	if (w == NULL) return res;
f5e99218131a (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
  1956
f5e99218131a (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
  1957
	SmallMapCenterOnCurrentPos(w);
f5e99218131a (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
  1958
f5e99218131a (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
  1959
	return res;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1960
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1961
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1962
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1963
bool ScrollMainWindowToTile(TileIndex tile, bool instant)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1964
{
7226
a8650d6ecb53 (svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138
parents: 7165
diff changeset
  1965
	return ScrollMainWindowTo(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, instant);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1966
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1967
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1968
void SetRedErrorSquare(TileIndex tile)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1969
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1970
	TileIndex old;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1971
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1972
	old = _thd.redsq;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1973
	_thd.redsq = tile;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1974
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1975
	if (tile != old) {
3281
0f3d836e35b1 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
  1976
		if (tile != 0) MarkTileDirtyByTile(tile);
0f3d836e35b1 (svn r3995) -Fix: Committed one file too much in 3992 (Thanks to Tron for pointing it out)
celestar
parents: 3279
diff changeset
  1977
		if (old  != 0) MarkTileDirtyByTile(old);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1978
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1979
}
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
void SetTileSelectSize(int w, int h)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1982
{
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1983
	_thd.new_size.x = w * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1984
	_thd.new_size.y = h * TILE_SIZE;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1985
	_thd.new_outersize.x = 0;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  1986
	_thd.new_outersize.y = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1987
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1988
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1989
void SetTileSelectBigSize(int ox, int oy, int sx, int sy)
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  1990
{
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1991
	_thd.offs.x = ox * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1992
	_thd.offs.y = oy * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1993
	_thd.new_outersize.x = sx * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  1994
	_thd.new_outersize.y = sy * TILE_SIZE;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1995
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  1996
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  1997
/** returns the best autorail highlight type from map coordinates */
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1998
static byte GetAutorailHT(int x, int y)
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  1999
{
2710
e144188c1fdb (svn r3254) - Fix: graphical glitch with autorail tool on a certain tile-type.
Darkvater
parents: 2676
diff changeset
  2000
	return HT_RAIL | _AutorailPiece[x & 0xF][y & 0xF];
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2001
}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2002
7574
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2003
/**
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2004
 * Updates tile highlighting for all cases.
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2005
 * Uses _thd.selstart and _thd.selend and _thd.place_mode (set elsewhere) to determine _thd.pos and _thd.size
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2006
 * Also drawstyle is determined. Uses _thd.new.* as a buffer and calls SetSelectionTilesDirty() twice,
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2007
 * Once for the old and once for the new selection.
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2008
 * _thd is TileHighlightData, found in viewport.h
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2009
 * Called by MouseLoop() in windows.cpp
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2010
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  2011
void UpdateTileSelection()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2012
{
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2013
	int x1;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2014
	int y1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2015
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2016
	_thd.new_drawstyle = 0;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2017
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2018
	if (_thd.place_mode == VHM_SPECIAL) {
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2019
		x1 = _thd.selend.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2020
		y1 = _thd.selend.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2021
		if (x1 != -1) {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2022
			int x2 = _thd.selstart.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2023
			int y2 = _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2024
			x1 &= ~0xF;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2025
			y1 &= ~0xF;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2026
6432
8fb778a7f2d7 (svn r8841) -Fix
tron
parents: 6401
diff changeset
  2027
			if (x1 >= x2) Swap(x1, x2);
8fb778a7f2d7 (svn r8841) -Fix
tron
parents: 6401
diff changeset
  2028
			if (y1 >= y2) Swap(y1, y2);
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2029
			_thd.new_pos.x = x1;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2030
			_thd.new_pos.y = y1;
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2031
			_thd.new_size.x = x2 - x1 + TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2032
			_thd.new_size.y = y2 - y1 + TILE_SIZE;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2033
			_thd.new_drawstyle = _thd.next_drawstyle;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2034
		}
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2035
	} else if (_thd.place_mode != VHM_NONE) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2036
		Point pt = GetTileBelowCursor();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2037
		x1 = pt.x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2038
		y1 = pt.y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2039
		if (x1 != -1) {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2040
			switch (_thd.place_mode) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2041
				case VHM_RECT:
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2042
					_thd.new_drawstyle = HT_RECT;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2043
					break;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2044
				case VHM_POINT:
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2045
					_thd.new_drawstyle = HT_POINT;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2046
					x1 += 8;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2047
					y1 += 8;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2048
					break;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2049
				case VHM_RAIL:
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2050
					_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
  2051
			}
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2052
			_thd.new_pos.x = x1 & ~0xF;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2053
			_thd.new_pos.y = y1 & ~0xF;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2054
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2055
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2056
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2057
	/* redraw selection */
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2058
	if (_thd.drawstyle != _thd.new_drawstyle ||
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2059
			_thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y ||
4539
0b13858554fb (svn r6368) -Fix [FS#136]: Station catchment area persists after switching tools. The
Darkvater
parents: 4523
diff changeset
  2060
			_thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y ||
7574
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2061
			_thd.outersize.x != _thd.new_outersize.x ||
0d76e3392fa4 (svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas
parents: 7565
diff changeset
  2062
			_thd.outersize.y != _thd.new_outersize.y) {
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2063
		/* clear the old selection? */
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2064
		if (_thd.drawstyle) SetSelectionTilesDirty();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2065
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2066
		_thd.drawstyle = _thd.new_drawstyle;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2067
		_thd.pos = _thd.new_pos;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2068
		_thd.size = _thd.new_size;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2069
		_thd.outersize = _thd.new_outersize;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2070
		_thd.dirty = 0xff;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2071
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2072
		/* draw the new selection? */
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2073
		if (_thd.new_drawstyle) SetSelectionTilesDirty();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2074
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2075
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2076
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2077
/** highlighting tiles while only going over them with the mouse */
7165
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2078
void VpStartPlaceSizing(TileIndex tile, byte method, byte process)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2079
{
7165
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2080
	_thd.select_method = method;
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2081
	_thd.select_proc   = process;
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2082
	_thd.selend.x = TileX(tile) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2083
	_thd.selstart.x = TileX(tile) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2084
	_thd.selend.y = TileY(tile) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2085
	_thd.selstart.y = TileY(tile) * TILE_SIZE;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2086
	if (_thd.place_mode == VHM_RECT) {
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2087
		_thd.place_mode = VHM_SPECIAL;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2088
		_thd.next_drawstyle = HT_RECT;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2089
	} else if (_thd.place_mode == VHM_RAIL) { // autorail one piece
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2090
		_thd.place_mode = VHM_SPECIAL;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2091
		_thd.next_drawstyle = _thd.drawstyle;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2092
	} else {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2093
		_thd.place_mode = VHM_SPECIAL;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2094
		_thd.next_drawstyle = HT_POINT;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2095
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2096
	_special_mouse_mode = WSM_SIZING;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2097
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2098
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2099
void VpSetPlaceSizingLimit(int limit)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2100
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2101
	_thd.sizelimit = limit;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2102
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2103
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2104
/**
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2105
* Highlights all tiles between a set of two tiles. Used in dock and tunnel placement
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2106
* @param from TileIndex of the first tile to highlight
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2107
* @param to TileIndex of the last tile to highlight */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2108
void VpSetPresizeRange(TileIndex from, TileIndex to)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2109
{
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
  2110
	uint64 distance = DistanceManhattan(from, to) + 1;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2111
3421
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2112
	_thd.selend.x = TileX(to) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2113
	_thd.selend.y = TileY(to) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2114
	_thd.selstart.x = TileX(from) * TILE_SIZE;
8ab76c47c72c (svn r4246) -Codechange. Replaced about 100 occurences of '16' by TILE_SIZE
celestar
parents: 3281
diff changeset
  2115
	_thd.selstart.y = TileY(from) * TILE_SIZE;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2116
	_thd.next_drawstyle = HT_RECT;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2117
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2118
	/* show measurement only if there is any length to speak of */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2119
	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
  2120
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2121
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  2122
static void VpStartPreSizing()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2123
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2124
	_thd.selend.x = -1;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2125
	_special_mouse_mode = WSM_PRESIZE;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2126
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2127
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2128
/** returns information about the 2x1 piece to be build.
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2129
 * The lower bits (0-3) are the track type. */
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2130
static byte Check2x1AutoRail(int mode)
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2131
{
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2132
	int fxpy = _tile_fract_coords.x + _tile_fract_coords.y;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2133
	int sxpy = (_thd.selend.x & 0xF) + (_thd.selend.y & 0xF);
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2134
	int fxmy = _tile_fract_coords.x - _tile_fract_coords.y;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2135
	int sxmy = (_thd.selend.x & 0xF) - (_thd.selend.y & 0xF);
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2136
2952
6a26eeda9679 (svn r3511) More whitespace ([FS#46] by Rubidium)
tron
parents: 2817
diff changeset
  2137
	switch (mode) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2138
	case 0: // end piece is lower right
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2139
		if (fxpy >= 20 && sxpy <= 12) { /*SwapSelection(); DoRailroadTrack(0); */return 3; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2140
		if (fxmy < -3 && sxmy > 3) {/* DoRailroadTrack(0); */return 5; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2141
		return 1;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2142
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2143
	case 1:
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2144
		if (fxmy > 3 && sxmy < -3) { /*SwapSelection(); DoRailroadTrack(0); */return 4; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2145
		if (fxpy <= 12 && sxpy >= 20) { /*DoRailroadTrack(0); */return 2; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2146
		return 1;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2147
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2148
	case 2:
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2149
		if (fxmy > 3 && sxmy < -3) { /*DoRailroadTrack(3);*/ return 4; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2150
		if (fxpy >= 20 && sxpy <= 12) { /*SwapSelection(); DoRailroadTrack(0); */return 3; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2151
		return 0;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2152
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2153
	case 3:
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2154
		if (fxmy < -3 && sxmy > 3) { /*SwapSelection(); DoRailroadTrack(3);*/ return 5; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2155
		if (fxpy <= 12 && sxpy >= 20) { /*DoRailroadTrack(0); */return 2; }
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2156
		return 0;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2157
	}
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2158
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2159
	return 0; // avoids compiler warnings
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2160
}
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2161
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2162
/** Check if the direction of start and end tile should be swapped based on
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2163
 * the dragging-style. Default directions are:
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2164
 * in the case of a line (HT_RAIL, HT_LINE):  DIR_NE, DIR_NW, DIR_N, DIR_E
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2165
 * in the case of a rect (HT_RECT, HT_POINT): DIR_S, DIR_E
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2166
 * For example dragging a rectangle area from south to north should be swapped to
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2167
 * north-south (DIR_S) to obtain the same results with less code. This is what
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2168
 * the return value signifies.
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2169
 * @param style HighLightStyle dragging style
6980
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6949
diff changeset
  2170
 * @param start_tile start tile of drag
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6949
diff changeset
  2171
 * @param end_tile end tile of drag
6b5dee376733 (svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas
parents: 6949
diff changeset
  2172
 * @return boolean value which when true means start/end should be swapped */
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2173
static bool SwapDirection(HighLightStyle style, TileIndex start_tile, TileIndex end_tile)
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2174
{
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2175
	uint start_x = TileX(start_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2176
	uint start_y = TileY(start_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2177
	uint end_x = TileX(end_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2178
	uint end_y = TileY(end_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2179
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2180
	switch (style & HT_DRAG_MASK) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2181
		case HT_RAIL:
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2182
		case HT_LINE: return (end_x > start_x || (end_x == start_x && end_y > start_y));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2183
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2184
		case HT_RECT:
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2185
		case HT_POINT: return (end_x != start_x && end_y < start_y);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2186
		default: NOT_REACHED();
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2187
	}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2188
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2189
	return false;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2190
}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2191
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2192
/** Calculates height difference between one tile and another
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2193
* Multiplies the result to suit the standard given by minimap - 50 meters high
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2194
* To correctly get the height difference we need the direction we are dragging
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2195
* in, as well as with what kind of tool we are dragging. For example a horizontal
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2196
* autorail tool that starts in bottom and ends at the top of a tile will need the
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6980
diff changeset
  2197
* maximum of SW, S and SE, N corners respectively. This is handled by the lookup table below
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2198
* See _tileoffs_by_dir in map.c for the direction enums if you can't figure out
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2199
* the values yourself.
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2200
* @param style HightlightStyle of drag. This includes direction and style (autorail, rect, etc.)
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2201
* @param distance amount of tiles dragged, important for horizontal/vertical drags
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2202
*        ignored for others
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2203
* @param start_tile, end_tile start and end tile of drag operation
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2204
* @return height difference between two tiles. Tile measurement tool utilizes
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2205
* this value in its tooltips */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2206
static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_tile, TileIndex end_tile)
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2207
{
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2208
	bool swap = SwapDirection(style, start_tile, end_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2209
	byte style_t;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2210
	uint h0, h1, ht; // start heigth, end height, and temp variable
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2211
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2212
	if (start_tile == end_tile) return 0;
5984
fbef81292ff9 (svn r8276) -Fix
tron
parents: 5924
diff changeset
  2213
	if (swap) Swap(start_tile, end_tile);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2214
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2215
	switch (style & HT_DRAG_MASK) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2216
		case HT_RECT: {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2217
			static const TileIndexDiffC heightdiff_area_by_dir[] = {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2218
				/* Start */ {1, 0}, /* Dragging east */ {0, 0}, /* Dragging south */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2219
				/* End   */ {0, 1}, /* Dragging east */ {1, 1}  /* Dragging south */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2220
			};
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2221
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2222
			/* In the case of an area we can determine whether we were dragging south or
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2223
			 * east by checking the X-coordinates of the tiles */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2224
			style_t = (byte)(TileX(end_tile) > TileX(start_tile));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2225
			start_tile = TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t]));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2226
			end_tile   = TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t]));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2227
		}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2228
		/* Fallthrough */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2229
		case HT_POINT:
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2230
			h0 = TileHeight(start_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2231
			h1 = TileHeight(end_tile);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2232
			break;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2233
		default: { /* All other types, this is mostly only line/autorail */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2234
			static const HighLightStyle flip_style_direction[] = {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2235
				HT_DIR_X, HT_DIR_Y, HT_DIR_HL, HT_DIR_HU, HT_DIR_VR, HT_DIR_VL
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2236
			};
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2237
			static const TileIndexDiffC heightdiff_line_by_dir[] = {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2238
				/* Start */ {1, 0}, {1, 1}, /* HT_DIR_X  */ {0, 1}, {1, 1}, /* HT_DIR_Y  */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2239
				/* Start */ {1, 0}, {0, 0}, /* HT_DIR_HU */ {1, 0}, {1, 1}, /* HT_DIR_HL */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2240
				/* Start */ {1, 0}, {1, 1}, /* HT_DIR_VL */ {0, 1}, {1, 1}, /* HT_DIR_VR */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2241
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2242
				/* Start */ {0, 1}, {0, 0}, /* HT_DIR_X  */ {1, 0}, {0, 0}, /* HT_DIR_Y  */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2243
				/* End   */ {0, 1}, {0, 0}, /* HT_DIR_HU */ {1, 1}, {0, 1}, /* HT_DIR_HL */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2244
				/* End   */ {1, 0}, {0, 0}, /* HT_DIR_VL */ {0, 0}, {0, 1}, /* HT_DIR_VR */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2245
			};
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2246
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2247
			distance %= 2; // we're only interested if the distance is even or uneven
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2248
			style &= HT_DIR_MASK;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2249
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2250
			/* To handle autorail, we do some magic to be able to use a lookup table.
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2251
			 * Firstly if we drag the other way around, we switch start&end, and if needed
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2252
			 * also flip the drag-position. Eg if it was on the left, and the distance is even
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2253
			 * that means the end, which is now the start is on the right */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2254
			if (swap && distance == 0) style = flip_style_direction[style];
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2255
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2256
			/* Use lookup table for start-tile based on HighLightStyle direction */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2257
			style_t = style * 2;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2258
			assert(style_t < lengthof(heightdiff_line_by_dir) - 13);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2259
			h0 = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t])));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2260
			ht = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1])));
5852
cb3f71b16e1a (svn r8055) -Codechange: Replace the different max, dmax, maxu whatever macros by a simple template function max(), that requires two arguments of the same type. While I'm at it change a variable called "max" to "maxval" in a function that calls max().
celestar
parents: 5838
diff changeset
  2261
			h0 = max(h0, ht);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2262
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2263
			/* Use lookup table for end-tile based on HighLightStyle direction
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2264
			 * flip around side (lower/upper, left/right) based on distance */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2265
			if (distance == 0) style_t = flip_style_direction[style] * 2;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2266
			assert(style_t < lengthof(heightdiff_line_by_dir) - 13);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2267
			h1 = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t])));
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2268
			ht = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1])));
5852
cb3f71b16e1a (svn r8055) -Codechange: Replace the different max, dmax, maxu whatever macros by a simple template function max(), that requires two arguments of the same type. While I'm at it change a variable called "max" to "maxval" in a function that calls max().
celestar
parents: 5838
diff changeset
  2269
			h1 = max(h1, ht);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2270
		} break;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2271
	}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2272
5984
fbef81292ff9 (svn r8276) -Fix
tron
parents: 5924
diff changeset
  2273
	if (swap) Swap(h0, h1);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2274
	/* Minimap shows height in intervals of 50 meters, let's do the same */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2275
	return (int)(h1 - h0) * 50;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2276
}
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2277
4885
c9fe8c52fd50 (svn r6822) -Fix r6821: add type for measure_strings_length[]
glx
parents: 4884
diff changeset
  2278
static const StringID measure_strings_length[] = {STR_NULL, STR_MEASURE_LENGTH, STR_MEASURE_LENGTH_HEIGHTDIFF};
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2279
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2280
/** while dragging */
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2281
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
  2282
{
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2283
	HighLightStyle b;
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2284
	uint w, h;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2285
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2286
	int dx = thd->selstart.x - (thd->selend.x & ~0xF);
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2287
	int dy = thd->selstart.y - (thd->selend.y & ~0xF);
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2288
	w = myabs(dx) + 16;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2289
	h = myabs(dy) + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2290
1980
9ea0c89fbb58 (svn r2486) Turn TILE_FROM_XY into an inline function and rename it to TileVirtXY
tron
parents: 1977
diff changeset
  2291
	if (TileVirtXY(thd->selstart.x, thd->selstart.y) == TileVirtXY(x, y)) { // check if we're only within one tile
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2292
		if (method == VPM_RAILDIRS) {
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2293
			b = GetAutorailHT(x, y);
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2294
		} else { // rect for autosignals on one tile
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2295
			b = HT_RECT;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2296
		}
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2297
	} else if (h == 16) { // Is this in X direction?
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2298
		if (dx == 16) { // 2x1 special handling
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2299
			b = (Check2x1AutoRail(3)) | HT_LINE;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2300
		} else if (dx == -16) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2301
			b = (Check2x1AutoRail(2)) | HT_LINE;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2302
		} else {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2303
			b = HT_LINE | HT_DIR_X;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2304
		}
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2305
		y = thd->selstart.y;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2306
	} else if (w == 16) { // Or Y direction?
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2307
		if (dy == 16) { // 2x1 special handling
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2308
			b = (Check2x1AutoRail(1)) | HT_LINE;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2309
		} else if (dy == -16) { // 2x1 other direction
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2310
			b = (Check2x1AutoRail(0)) | HT_LINE;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2311
		} else {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2312
			b = HT_LINE | HT_DIR_Y;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2313
		}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2314
		x = thd->selstart.x;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2315
	} else if (w > h * 2) { // still count as x dir?
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2316
		b = HT_LINE | HT_DIR_X;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2317
		y = thd->selstart.y;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2318
	} else if (h > w * 2) { // still count as y dir?
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2319
		b = HT_LINE | HT_DIR_Y;
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2320
		x = thd->selstart.x;
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2321
	} else { // complicated direction
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2322
		int d = w - h;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2323
		thd->selend.x = thd->selend.x & ~0xF;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2324
		thd->selend.y = thd->selend.y & ~0xF;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2325
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2326
		// four cases.
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2327
		if (x > thd->selstart.x) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2328
			if (y > thd->selstart.y) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2329
				// south
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2330
				if (d == 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2331
					b = (x & 0xF) > (y & 0xF) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2332
				} else if (d >= 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2333
					x = thd->selstart.x + h;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2334
					b = HT_LINE | HT_DIR_VL;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2335
					// return px == py || px == py + 16;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2336
				} else {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2337
					y = thd->selstart.y + w;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2338
					b = HT_LINE | HT_DIR_VR;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2339
				} // return px == py || px == py - 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2340
			} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2341
				// west
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2342
				if (d == 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2343
					b = (x & 0xF) + (y & 0xF) >= 0x10 ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2344
				} else if (d >= 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2345
					x = thd->selstart.x + h;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2346
					b = HT_LINE | HT_DIR_HL;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2347
				} else {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2348
					y = thd->selstart.y - w;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2349
					b = HT_LINE | HT_DIR_HU;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2350
				}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2351
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2352
		} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2353
			if (y > thd->selstart.y) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2354
				// east
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2355
				if (d == 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2356
					b = (x & 0xF) + (y & 0xF) >= 0x10 ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2357
				} else if (d >= 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2358
					x = thd->selstart.x - h;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2359
					b = HT_LINE | HT_DIR_HU;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2360
					// return px == -py || px == -py - 16;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2361
				} else {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2362
					y = thd->selstart.y + w;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2363
					b = HT_LINE | HT_DIR_HL;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2364
				} // return px == -py || px == -py + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2365
			} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2366
				// north
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2367
				if (d == 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2368
					b = (x & 0xF) > (y & 0xF) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2369
				} else if (d >= 0) {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2370
					x = thd->selstart.x - h;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2371
					b = HT_LINE | HT_DIR_VR;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2372
					// return px == py || px == py - 16;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2373
				} else {
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2374
					y = thd->selstart.y - w;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2375
					b = HT_LINE | HT_DIR_VL;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2376
				} //return px == py || px == py + 16;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2377
			}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2378
		}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2379
	}
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2380
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2381
	if (_patches.measure_tooltip) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2382
		TileIndex t0 = TileVirtXY(thd->selstart.x, thd->selstart.y);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2383
		TileIndex t1 = TileVirtXY(x, y);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2384
		uint distance = DistanceManhattan(t0, t1) + 1;
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2385
		byte index = 0;
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
  2386
		uint64 params[2];
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2387
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2388
		if (distance != 1) {
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2389
			int heightdiff = CalcHeightdiff(b, distance, t0, t1);
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2390
			/* If we are showing a tooltip for horizontal or vertical drags,
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2391
			 * 2 tiles have a length of 1. To bias towards the ceiling we add
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2392
			 * one before division. It feels more natural to count 3 lengths as 2 */
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2393
			if ((b & HT_DIR_MASK) != HT_DIR_X && (b & HT_DIR_MASK) != HT_DIR_Y) {
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2394
				distance = (distance + 1) / 2;
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2395
			}
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2396
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2397
			params[index++] = distance;
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2398
			if (heightdiff != 0) params[index++] = heightdiff;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2399
		}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2400
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2401
		GuiShowTooltipsWithArgs(measure_strings_length[index], index, params);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2402
	}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2403
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2404
	thd->selend.x = x;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2405
	thd->selend.y = y;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2406
	thd->next_drawstyle = b;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2407
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2408
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2409
/**
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2410
 * Selects tiles while dragging
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2411
 * @param x X coordinate of end of selection
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2412
 * @param y Y coordinate of end of selection
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2413
 * @param method modifies the way tiles are selected. Possible
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2414
 * methods are VPM_* in viewport.h */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2415
void VpSelectTilesWithMethod(int x, int y, int method)
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2416
{
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2417
	int sx, sy;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2418
	HighLightStyle style;
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2419
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2420
	if (x == -1) {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2421
		_thd.selend.x = -1;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2422
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2423
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2424
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2425
	/* 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
  2426
	if (method == VPM_RAILDIRS || method == VPM_SIGNALDIRS) {
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2427
		_thd.selend.x = x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2428
		_thd.selend.y = y;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2429
		CalcRaildirsDrawstyle(&_thd, x, y, method);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2430
		return;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2431
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2432
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2433
	if (_thd.next_drawstyle == HT_POINT) {
4799
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2434
		x += TILE_SIZE / 2;
a32af5dd7b6c (svn r6721) -Codechange: some comments, aligning, types and variable localization.
Darkvater
parents: 4634
diff changeset
  2435
		y += TILE_SIZE / 2;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2436
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2437
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2438
	sx = _thd.selstart.x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2439
	sy = _thd.selstart.y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2440
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2441
	switch (method) {
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2442
		case VPM_X_OR_Y: /* drag in X or Y direction */
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2443
			if (myabs(sy - y) < myabs(sx - x)) {
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2444
				y = sy;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2445
				style = HT_DIR_X;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2446
			} else {
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2447
				x = sx;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2448
				style = HT_DIR_Y;
4077
d3022f976946 (svn r5391) Miscellaneous, mostly bracing and whitespace, nothing spectacular
tron
parents: 4000
diff changeset
  2449
			}
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2450
			goto calc_heightdiff_single_direction;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2451
		case VPM_FIX_X: /* drag in Y direction */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2452
			x = sx;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2453
			style = HT_DIR_Y;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2454
			goto calc_heightdiff_single_direction;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2455
		case VPM_FIX_Y: /* drag in X direction */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2456
			y = sy;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2457
			style = HT_DIR_X;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2458
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2459
calc_heightdiff_single_direction:;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2460
			if (_patches.measure_tooltip) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2461
				TileIndex t0 = TileVirtXY(sx, sy);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2462
				TileIndex t1 = TileVirtXY(x, y);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2463
				uint distance = DistanceManhattan(t0, t1) + 1;
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2464
				byte index = 0;
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
  2465
				uint64 params[2];
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2466
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2467
				if (distance != 1) {
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2468
					/* With current code passing a HT_LINE style to calculate the height
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2469
					 * difference is enough. However if/when a point-tool is created
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2470
					 * with this method, function should be called with new_style (below)
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2471
					 * instead of HT_LINE | style case HT_POINT is handled specially
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2472
					 * new_style := (_thd.next_drawstyle & HT_RECT) ? HT_LINE | style : _thd.next_drawstyle; */
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2473
					int heightdiff = CalcHeightdiff(HT_LINE | style, 0, t0, t1);
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2474
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2475
					params[index++] = distance;
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2476
					if (heightdiff != 0) params[index++] = heightdiff;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2477
				}
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2478
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2479
				GuiShowTooltipsWithArgs(measure_strings_length[index], index, params);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2480
			} break;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2481
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2482
		case VPM_X_AND_Y_LIMITED: { /* drag an X by Y constrained rect area */
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2483
			int limit = (_thd.sizelimit - 1) * TILE_SIZE;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2484
			x = sx + clamp(x - sx, -limit, limit);
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2485
			y = sy + clamp(y - sy, -limit, limit);
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2486
			} /* Fallthrough */
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2487
		case VPM_X_AND_Y: { /* drag an X by Y area */
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2488
			if (_patches.measure_tooltip) {
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2489
				static const StringID measure_strings_area[] = {
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2490
					STR_NULL, STR_NULL, STR_MEASURE_AREA, STR_MEASURE_AREA_HEIGHTDIFF
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2491
				};
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2492
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2493
				TileIndex t0 = TileVirtXY(sx, sy);
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2494
				TileIndex t1 = TileVirtXY(x, y);
5838
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2495
				uint dx = delta(TileX(t0), TileX(t1)) + 1;
9c3129cb019b (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5835
diff changeset
  2496
				uint dy = delta(TileY(t0), TileY(t1)) + 1;
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2497
				byte index = 0;
7502
71f5d2c6a605 (svn r10262) -Fix (r10258): some places that needed to be changed to uint64 were hidden/forgotten, which caused memory corruptions and that in caused all kinds of assertions to trigger.
rubidium
parents: 7433
diff changeset
  2498
				uint64 params[3];
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2499
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2500
				/* If dragging an area (eg dynamite tool) and it is actually a single
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2501
				 * row/column, change the type to 'line' to get proper calculation for height */
4838
d7570b95d5f8 (svn r6764) -Fix (r6758): Wrong height difference calculated because invalid drag-type
Darkvater
parents: 4834
diff changeset
  2502
				style = _thd.next_drawstyle;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2503
				if (style & HT_RECT) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2504
					if (dx == 1) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2505
						style = HT_LINE | HT_DIR_Y;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2506
					} else if (dy == 1) {
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2507
						style = HT_LINE | HT_DIR_X;
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2508
					}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2509
				}
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2510
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2511
				if (dx != 1 || dy != 1) {
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2512
					int heightdiff = CalcHeightdiff(style, 0, t0, t1);
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2513
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2514
					params[index++] = dx;
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2515
					params[index++] = dy;
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2516
					if (heightdiff != 0) params[index++] = heightdiff;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2517
				}
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2518
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2519
				GuiShowTooltipsWithArgs(measure_strings_area[index], index, params);
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2520
			}
4884
895f06b87934 (svn r6821) -Codechange: For the measurement tool do not show the tooltip when the selection
Darkvater
parents: 4838
diff changeset
  2521
		break;
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2522
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2523
		}
4834
ddcf440d0ffd (svn r6758) -Feature: Add a measurement tool that will show dimensions and height
Darkvater
parents: 4799
diff changeset
  2524
		default: NOT_REACHED();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2525
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2526
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2527
	_thd.selend.x = x;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2528
	_thd.selend.y = y;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2529
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2530
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2531
/** while dragging */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  2532
bool VpHandlePlaceSizingDrag()
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2533
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2534
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2535
	WindowEvent e;
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2536
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2537
	if (_special_mouse_mode != WSM_SIZING) return true;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2538
7165
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2539
	e.we.place.select_method = _thd.select_method;
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2540
	e.we.place.select_proc   = _thd.select_proc;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2541
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2542
	/* stop drag mode if the window has been closed */
6987
b0f13039bda2 (svn r9672) -Cleanup: lots of coding style fixes around operands.
rubidium
parents: 6980
diff changeset
  2543
	w = FindWindowById(_thd.window_class, _thd.window_number);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2544
	if (w == NULL) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2545
		ResetObjectToPlace();
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2546
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2547
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2548
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2549
	/* 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
  2550
	if (_left_button_down) {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2551
		e.event = WE_PLACE_DRAG;
4634
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2552
		e.we.place.pt = GetTileBelowCursor();
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2553
		w->wndproc(w, &e);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2554
		return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2555
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2556
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2557
	/* mouse button released..
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2558
	 * 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
  2559
	_special_mouse_mode = WSM_NONE;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2560
	if (_thd.next_drawstyle == HT_RECT) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2561
		_thd.place_mode = VHM_RECT;
7165
37eb253f3c06 (svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros
parents: 7150
diff changeset
  2562
	} else if (e.we.place.select_method == VPM_SIGNALDIRS) { // some might call this a hack... -- Dominik
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2563
		_thd.place_mode = VHM_RECT;
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2564
	} else if (_thd.next_drawstyle & HT_LINE) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2565
		_thd.place_mode = VHM_RAIL;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2566
	} else if (_thd.next_drawstyle & HT_RAIL) {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2567
		_thd.place_mode = VHM_RAIL;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2568
	} else {
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2569
		_thd.place_mode = VHM_POINT;
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2570
	}
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2571
	SetTileSelectSize(1, 1);
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2572
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2573
	/* and call the mouseup event. */
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2574
	e.event = WE_PLACE_MOUSEUP;
4634
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2575
	e.we.place.pt = _thd.selend;
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2576
	e.we.place.tile = TileVirtXY(e.we.place.pt.x, e.we.place.pt.y);
897461a3e9ca (svn r6499) -Codechange: Finally, got "byte event" outside of the union WindowEvent, which is now a struct
belugas
parents: 4609
diff changeset
  2577
	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
  2578
	w->wndproc(w, &e);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2579
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2580
	return false;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2581
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2582
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  2583
void SetObjectToPlaceWnd(CursorID icon, SpriteID pal, byte mode, Window *w)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2584
{
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  2585
	SetObjectToPlace(icon, pal, mode, w->window_class, w->window_number);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2586
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2587
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2588
#include "table/animcursors.h"
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2589
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  2590
void SetObjectToPlace(CursorID icon, SpriteID pal, byte mode, WindowClass window_class, WindowNumber window_num)
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2591
{
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2592
	Window *w;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2593
6919
339210ecccd3 (svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas
parents: 6574
diff changeset
  2594
	/* undo clicking on button */
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2595
	if (_thd.place_mode != 0) {
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2596
		_thd.place_mode = 0;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2597
		w = FindWindowById(_thd.window_class, _thd.window_number);
2116
cdfc27b696b7 (svn r2626) static, const, misc.
tron
parents: 2109
diff changeset
  2598
		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
  2599
	}
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2600
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2601
	SetTileSelectSize(1, 1);
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2602
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2603
	_thd.make_square_red = false;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2604
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2605
	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
  2606
		mode = 0;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2607
		_special_mouse_mode = WSM_DRAGDROP;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2608
	} else {
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2609
		_special_mouse_mode = WSM_NONE;
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2610
	}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2611
1863
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2612
	_thd.place_mode = mode;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2613
	_thd.window_class = window_class;
610acc8bc189 (svn r2369) Remove _thd_ptr: It always holds the address of _thd
tron
parents: 1542
diff changeset
  2614
	_thd.window_number = window_num;
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2615
1070
bef634a62323 (svn r1571) Feature: Visually enhanced autorail placing
dominik
parents: 988
diff changeset
  2616
	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
  2617
		VpStartPreSizing();
193
0a7025304867 (svn r194) -Codechange: stripping trailing-spaces. Please keep this that way!
truelight
parents: 152
diff changeset
  2618
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2619
	if ( (int)icon < 0)
4334
75322a204d0c (svn r6035) -Revert r5900 which supposedly fixed an invalid warning caused by buggy MS software
Darkvater
parents: 4272
diff changeset
  2620
		SetAnimatedMouseCursor(_animcursors[~icon]);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2621
	else
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5853
diff changeset
  2622
		SetMouseCursor(icon, pal);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2623
}
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2624
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6443
diff changeset
  2625
void ResetObjectToPlace()
1093
e8d26c7dc42f (svn r1594) Convert all undefined parameter lists to (void) and add the appropriate warning flags in the Makefile
tron
parents: 1083
diff changeset
  2626
{
6144
5a0ffbf27ced (svn r8511) -Codechange: make WindowClass an enumerated value.
rubidium
parents: 5984
diff changeset
  2627
	SetObjectToPlace(SPR_CURSOR_MOUSE, PAL_NONE, VHM_NONE, WC_MAIN_WINDOW, 0);
0
29654efe3188 (svn r1) Import of revision 975 of old (crashed) SVN
truelight
parents:
diff changeset
  2628
}