Mercurial > hg > openttd
annotate src/viewport.cpp @ 13718:141a263aecc4 draft
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
author | frosch <frosch@openttd.org> |
---|---|
date | Sun, 22 Nov 2009 19:53:49 +0000 |
parents | 24547db62b5c |
children | 18cbb884f0a0 |
rev | line source |
---|---|
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1 /* $Id$ */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2 |
12778
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
3 /* |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
4 * This file is part of OpenTTD. |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
8 */ |
bc7926153e19
(svn r17248) -Fix: add GPL license notice where appropriate
rubidium <rubidium@openttd.org>
parents:
12708
diff
changeset
|
9 |
9111
d48433370037
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium <rubidium@openttd.org>
parents:
9082
diff
changeset
|
10 /** @file viewport.cpp Handling of all viewports. |
8957
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
11 * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
12 * \verbatim |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
13 * The in-game coordinate system looks like this * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
14 * * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
15 * ^ Z * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
16 * | * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
17 * | * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
18 * | * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
19 * | * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
20 * / \ * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
21 * / \ * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
22 * / \ * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
23 * / \ * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
24 * X < > Y * |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
25 * \endverbatim |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
26 */ |
6117
6def6ecb1bf7
(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 <belugas@openttd.org>
parents:
6106
diff
changeset
|
27 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
28 #include "stdafx.h" |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
29 #include "openttd.h" |
6453
666fc3ef3174
(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 <maedhros@openttd.org>
parents:
6448
diff
changeset
|
30 #include "landscape.h" |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
31 #include "viewport_func.h" |
8785
2a8950a812dc
(svn r12489) -Codechange: split station.h into station_base.h and station_func.h.
rubidium <rubidium@openttd.org>
parents:
8743
diff
changeset
|
32 #include "station_base.h" |
12475
c133b51890f4
(svn r16912) -Codechange: split waypoint.h in waypoint_base.h and waypoint_func.h
rubidium <rubidium@openttd.org>
parents:
12472
diff
changeset
|
33 #include "waypoint_base.h" |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
34 #include "town.h" |
8790
5ef0059ccfc0
(svn r12501) -Codechange: split signs.h.
rubidium <rubidium@openttd.org>
parents:
8785
diff
changeset
|
35 #include "signs_base.h" |
5ef0059ccfc0
(svn r12501) -Codechange: split signs.h.
rubidium <rubidium@openttd.org>
parents:
8785
diff
changeset
|
36 #include "signs_func.h" |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
37 #include "variables.h" |
10960
a4e5b5d2837c
(svn r15299) -Cleanup: remove many redundant includes
smatz <smatz@openttd.org>
parents:
10864
diff
changeset
|
38 #include "vehicle_base.h" |
7486
1af81beda3fb
(svn r10997) -Codechange: unify the vehicle view window. Patch by PhilSophus.
rubidium <rubidium@openttd.org>
parents:
7333
diff
changeset
|
39 #include "vehicle_gui.h" |
6937
b6cf3513b2c4
(svn r10190) -Codechange: merged renderer and blitter to one single class API: blitter
truelight <truelight@openttd.org>
parents:
6878
diff
changeset
|
40 #include "blitter/factory.hpp" |
7849
e6ee8bfd9045
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents:
7824
diff
changeset
|
41 #include "transparency.h" |
8114
2d6af5d7a142
(svn r11675) -Codechange: split the string types from the string functions.
rubidium <rubidium@openttd.org>
parents:
8106
diff
changeset
|
42 #include "strings_func.h" |
8123
c26c28875749
(svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium <rubidium@openttd.org>
parents:
8121
diff
changeset
|
43 #include "zoom_func.h" |
8144
d18c8a0bb638
(svn r11706) -Codechange: split vehicle.h and remove another bunch of useless includes.
rubidium <rubidium@openttd.org>
parents:
8139
diff
changeset
|
44 #include "vehicle_func.h" |
10208
39cf8eebfda5
(svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
rubidium <rubidium@openttd.org>
parents:
10207
diff
changeset
|
45 #include "company_func.h" |
12475
c133b51890f4
(svn r16912) -Codechange: split waypoint.h in waypoint_base.h and waypoint_func.h
rubidium <rubidium@openttd.org>
parents:
12472
diff
changeset
|
46 #include "waypoint_func.h" |
9117
453c3d26f4bc
(svn r12977) -Codechange: remove quite some redundant (duplicate) function declarations.
rubidium <rubidium@openttd.org>
parents:
9111
diff
changeset
|
47 #include "window_func.h" |
9127
428852b86d4d
(svn r12987) -Codechange: split viewport and tile selection.
rubidium <rubidium@openttd.org>
parents:
9117
diff
changeset
|
48 #include "tilehighlight_func.h" |
9274
85a62fb8608f
(svn r13140) -Codechange: move the gui-list-sorting out of window_gui.h so window_gui.h only needs to be included in *_gui.cpp.
rubidium <rubidium@openttd.org>
parents:
9273
diff
changeset
|
49 #include "window_gui.h" |
8946
402107c0562f
(svn r12734) -Codechange: use a vector instead of allocating memory in a big byte array for StringSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8925
diff
changeset
|
50 |
8264
2495310e220f
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents:
8254
diff
changeset
|
51 #include "table/sprites.h" |
2495310e220f
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents:
8254
diff
changeset
|
52 #include "table/strings.h" |
2495310e220f
(svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium <rubidium@openttd.org>
parents:
8254
diff
changeset
|
53 |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
54 PlaceProc *_place_proc; |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
55 Point _tile_fract_coords; |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
56 ZoomLevel _saved_scrollpos_zoom; |
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
57 |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
58 struct StringSpriteToDraw { |
11085
8da1855e9f14
(svn r15428) -Codechange: consistently use colour instead of having both color and colour.
rubidium <rubidium@openttd.org>
parents:
11082
diff
changeset
|
59 StringID string; |
8da1855e9f14
(svn r15428) -Codechange: consistently use colour instead of having both color and colour.
rubidium <rubidium@openttd.org>
parents:
11082
diff
changeset
|
60 uint16 colour; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
61 int32 x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
62 int32 y; |
7006
933d3ee6d37d
(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 <rubidium@openttd.org>
parents:
6937
diff
changeset
|
63 uint64 params[2]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
64 uint16 width; |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
65 }; |
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
66 |
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
67 struct TileSpriteToDraw { |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
68 SpriteID image; |
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
69 SpriteID pal; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
70 const SubSprite *sub; ///< only draw a rectangular part of the sprite |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
71 int32 x; ///< screen X coordinate of sprite |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
72 int32 y; ///< screen Y coordinate of sprite |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
73 }; |
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
74 |
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
75 struct ChildScreenSpriteToDraw { |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
76 SpriteID image; |
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
77 SpriteID pal; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
78 const SubSprite *sub; ///< only draw a rectangular part of the sprite |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
79 int32 x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
80 int32 y; |
9534
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
81 int next; ///< next child to draw (-1 at the end) |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
82 }; |
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
83 |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
84 /** Parent sprite that should be drawn */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
85 struct ParentSpriteToDraw { |
7569
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
86 SpriteID image; ///< sprite to draw |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
87 SpriteID pal; ///< palette to use |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
88 const SubSprite *sub; ///< only draw a rectangular part of the sprite |
7569
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
89 |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
90 int32 x; ///< screen X coordinate of sprite |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
91 int32 y; ///< screen Y coordinate of sprite |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
92 |
7569
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
93 int32 left; ///< minimal screen X coordinate of sprite (= x + sprite->x_offs), reference point for child sprites |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
94 int32 top; ///< minimal screen Y coordinate of sprite (= y + sprite->y_offs), reference point for child sprites |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
95 |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
96 int32 xmin; ///< minimal world X coordinate of bounding box |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
97 int32 xmax; ///< maximal world X coordinate of bounding box |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
98 int32 ymin; ///< minimal world Y coordinate of bounding box |
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
99 int32 ymax; ///< maximal world Y coordinate of bounding box |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
100 int zmin; ///< minimal world Z coordinate of bounding box |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
101 int zmax; ///< maximal world Z coordinate of bounding box |
7569
326049261489
(svn r11094) -Documentation: Add comments on viewport structures and change an obscure variable name to something a little more meaningfull.
belugas <belugas@openttd.org>
parents:
7545
diff
changeset
|
102 |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
103 int first_child; ///< the first child to draw. |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
104 bool comparison_done; ///< Used during sprite sorting: true if sprite has been compared with all other sprites |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
105 }; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
106 |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
107 /** Enumeration of multi-part foundations */ |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
108 enum FoundationPart { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
109 FOUNDATION_PART_NONE = 0xFF, ///< Neither foundation nor groundsprite drawn yet. |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
110 FOUNDATION_PART_NORMAL = 0, ///< First part (normal foundation or no foundation) |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
111 FOUNDATION_PART_HALFTILE = 1, ///< Second part (halftile foundation) |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
112 FOUNDATION_PART_END |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
113 }; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
114 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
115 /** Mode of "sprite combining" |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
116 * @see StartSpriteCombine |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
117 */ |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
118 enum SpriteCombineMode { |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
119 SPRITE_COMBINE_NONE, ///< Every #AddSortableSpriteToDraw start its own bounding box |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
120 SPRITE_COMBINE_PENDING, ///< %Sprite combining will start with the next unclipped sprite. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
121 SPRITE_COMBINE_ACTIVE, ///< %Sprite combining is active. #AddSortableSpriteToDraw outputs child sprites. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
122 }; |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
123 |
8949
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
124 typedef SmallVector<TileSpriteToDraw, 64> TileSpriteToDrawVector; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
125 typedef SmallVector<StringSpriteToDraw, 4> StringSpriteToDrawVector; |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
126 typedef SmallVector<ParentSpriteToDraw, 64> ParentSpriteToDrawVector; |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
127 typedef SmallVector<ParentSpriteToDraw*, 64> ParentSpriteToSortVector; |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
128 typedef SmallVector<ChildScreenSpriteToDraw, 16> ChildScreenSpriteToDrawVector; |
8946
402107c0562f
(svn r12734) -Codechange: use a vector instead of allocating memory in a big byte array for StringSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8925
diff
changeset
|
129 |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
130 /** Data structure storing rendering information */ |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
131 struct ViewportDrawer { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
132 DrawPixelInfo dpi; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
133 |
8946
402107c0562f
(svn r12734) -Codechange: use a vector instead of allocating memory in a big byte array for StringSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8925
diff
changeset
|
134 StringSpriteToDrawVector string_sprites_to_draw; |
8947
20e58270e32d
(svn r12735) -Codechange: use a vector instead of allocating memory in a byte array for TileSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8946
diff
changeset
|
135 TileSpriteToDrawVector tile_sprites_to_draw; |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
136 ParentSpriteToDrawVector parent_sprites_to_draw; |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
137 ParentSpriteToSortVector parent_sprites_to_sort; ///< Parent sprite pointer array used for sorting |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
138 ChildScreenSpriteToDrawVector child_screen_sprites_to_draw; |
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
139 |
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
140 int *last_child; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
141 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
142 SpriteCombineMode combine_sprites; ///< Current mode of "sprite combining". @see StartSpriteCombine |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
143 |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
144 int foundation[FOUNDATION_PART_END]; ///< Foundation sprites (index into parent_sprites_to_draw). |
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
145 FoundationPart foundation_part; ///< Currently active foundation for ground sprite drawing. |
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
146 int *last_foundation_child[FOUNDATION_PART_END]; ///< Tail of ChildSprite list of the foundations. (index into child_screen_sprites_to_draw) |
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
147 Point foundation_offset[FOUNDATION_PART_END]; ///< Pixeloffset for ground sprites on the foundations. |
6248
0789677a15a0
(svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium <rubidium@openttd.org>
parents:
6247
diff
changeset
|
148 }; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
149 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
150 static ViewportDrawer _vd; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
151 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
152 TileHighlightData _thd; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
153 static TileInfo *_cur_ti; |
8979
e6dbe6d84c32
(svn r12771) -Codechange: remove more from variables.h.
rubidium <rubidium@openttd.org>
parents:
8969
diff
changeset
|
154 bool _draw_bounding_boxes = false; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
155 |
11375
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
156 static Point MapXYZToViewport(const ViewPort *vp, int x, int y, int z) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
157 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
158 Point p = RemapCoords(x, y, z); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
159 p.x -= vp->virtual_width / 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
160 p.y -= vp->virtual_height / 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
161 return p; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
162 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
163 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
164 void DeleteWindowViewport(Window *w) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
165 { |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
166 free(w->viewport); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
167 w->viewport = NULL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
168 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
169 |
8992
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
170 /** |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
171 * Initialize viewport of the window for use. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
172 * @param w Window to use/display the viewport in |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
173 * @param x Offset of left edge of viewport with respect to left edge window \a w |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
174 * @param y Offset of top edge of viewport with respect to top edge window \a w |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
175 * @param width Width of the viewport |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
176 * @param height Height of the viewport |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
177 * @param follow_flags Flags controlling the viewport. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
178 * - If bit 31 is set, the lower 16 bits are the vehicle that the viewport should follow. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
179 * - If bit 31 is clear, it is a tile position. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
180 * @param zoom Zoomlevel to display |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
181 */ |
8994
e4c3087abbde
(svn r12789) -Codechange: rename AssignWindowViewport to InitializeWindowViewport because the viewport is now part of the window struct. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8992
diff
changeset
|
182 void InitializeWindowViewport(Window *w, int x, int y, |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
183 int width, int height, uint32 follow_flags, ZoomLevel zoom) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
184 { |
8957
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
185 assert(w->viewport == NULL); |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
186 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
187 ViewportData *vp = CallocT<ViewportData>(1); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
188 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
189 vp->left = x + w->left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
190 vp->top = y + w->top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
191 vp->width = width; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
192 vp->height = height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
193 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
194 vp->zoom = zoom; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
195 |
6654
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
196 vp->virtual_width = ScaleByZoom(width, zoom); |
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
197 vp->virtual_height = ScaleByZoom(height, zoom); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
198 |
8957
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
199 Point pt; |
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
200 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
201 if (follow_flags & 0x80000000) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
202 const Vehicle *veh; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
203 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
204 vp->follow_vehicle = (VehicleID)(follow_flags & 0xFFFF); |
11922
0a4b63f3f3c3
(svn r16325) -Codechange: replace GetPoolItem(index) by PoolItem::Get(index)
smatz <smatz@openttd.org>
parents:
11765
diff
changeset
|
205 veh = Vehicle::Get(vp->follow_vehicle); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
206 pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
207 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
208 uint x = TileX(follow_flags) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
209 uint y = TileY(follow_flags) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
210 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
211 vp->follow_vehicle = INVALID_VEHICLE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
212 pt = MapXYZToViewport(vp, x, y, GetSlopeZ(x, y)); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
213 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
214 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
215 vp->scrollpos_x = pt.x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
216 vp->scrollpos_y = pt.y; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
217 vp->dest_scrollpos_x = pt.x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
218 vp->dest_scrollpos_y = pt.y; |
6730
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
219 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
220 w->viewport = vp; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
221 vp->virtual_left = 0;//pt.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
222 vp->virtual_top = 0;//pt.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
223 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
224 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
225 static Point _vp_move_offs; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
226 |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
227 static void DoSetViewportPosition(const Window *w, int left, int top, int width, int height) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
228 { |
10614
48b9085d5b21
(svn r14905) -Fix (r14899): in some corner cases already freed memory could be read.
rubidium <rubidium@openttd.org>
parents:
10610
diff
changeset
|
229 FOR_ALL_WINDOWS_FROM_BACK_FROM(w, w) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
230 if (left + width > w->left && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
231 w->left + w->width > left && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
232 top + height > w->top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
233 w->top + w->height > top) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
234 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
235 if (left < w->left) { |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
236 DoSetViewportPosition(w, left, top, w->left - left, height); |
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
237 DoSetViewportPosition(w, left + (w->left - left), top, width - (w->left - left), height); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
238 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
239 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
240 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
241 if (left + width > w->left + w->width) { |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
242 DoSetViewportPosition(w, left, top, (w->left + w->width - left), height); |
13175
3f4cc2986131
(svn r17682) -Codechange: remove erroneous space before some commas
rubidium <rubidium@openttd.org>
parents:
13034
diff
changeset
|
243 DoSetViewportPosition(w, left + (w->left + w->width - left), top, width - (w->left + w->width - left), height); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
244 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
245 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
246 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
247 if (top < w->top) { |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
248 DoSetViewportPosition(w, left, top, width, (w->top - top)); |
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
249 DoSetViewportPosition(w, left, top + (w->top - top), width, height - (w->top - top)); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
250 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
251 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
252 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
253 if (top + height > w->top + w->height) { |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
254 DoSetViewportPosition(w, left, top, width, (w->top + w->height - top)); |
13175
3f4cc2986131
(svn r17682) -Codechange: remove erroneous space before some commas
rubidium <rubidium@openttd.org>
parents:
13034
diff
changeset
|
255 DoSetViewportPosition(w, left, top + (w->top + w->height - top), width, height - (w->top + w->height - top)); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
256 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
257 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
258 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
259 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
260 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
261 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
262 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
263 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
264 int xo = _vp_move_offs.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
265 int yo = _vp_move_offs.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
266 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
267 if (abs(xo) >= width || abs(yo) >= height) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
268 /* fully_outside */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
269 RedrawScreenRect(left, top, left + width, top + height); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
270 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
271 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
272 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
273 GfxScroll(left, top, width, height, xo, yo); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
274 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
275 if (xo > 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
276 RedrawScreenRect(left, top, xo + left, top + height); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
277 left += xo; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
278 width -= xo; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
279 } else if (xo < 0) { |
10642
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
280 RedrawScreenRect(left + width + xo, top, left + width, top + height); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
281 width += xo; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
282 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
283 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
284 if (yo > 0) { |
10642
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
285 RedrawScreenRect(left, top, width + left, top + yo); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
286 } else if (yo < 0) { |
10642
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
287 RedrawScreenRect(left, top + height + yo, width + left, top + height); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
288 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
289 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
290 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
291 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
292 static void SetViewportPosition(Window *w, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
293 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
294 ViewPort *vp = w->viewport; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
295 int old_left = vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
296 int old_top = vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
297 int i; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
298 int left, top, width, height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
299 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
300 vp->virtual_left = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
301 vp->virtual_top = y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
302 |
7905
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
303 /* viewport is bound to its left top corner, so it must be rounded down (UnScaleByZoomLower) |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
304 * else glitch described in FS#1412 will happen (offset by 1 pixel with zoom level > NORMAL) |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
305 */ |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
306 old_left = UnScaleByZoomLower(old_left, vp->zoom); |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
307 old_top = UnScaleByZoomLower(old_top, vp->zoom); |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
308 x = UnScaleByZoomLower(x, vp->zoom); |
63c86d0b97e7
(svn r11456) -Fix [FS#1412] (r10070): Viewport is bound to its top-left corner
smatz <smatz@openttd.org>
parents:
7889
diff
changeset
|
309 y = UnScaleByZoomLower(y, vp->zoom); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
310 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
311 old_left -= x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
312 old_top -= y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
313 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
314 if (old_top == 0 && old_left == 0) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
315 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
316 _vp_move_offs.x = old_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
317 _vp_move_offs.y = old_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
318 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
319 left = vp->left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
320 top = vp->top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
321 width = vp->width; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
322 height = vp->height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
323 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
324 if (left < 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
325 width += left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
326 left = 0; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
327 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
328 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
329 i = left + width - _screen.width; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
330 if (i >= 0) width -= i; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
331 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
332 if (width > 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
333 if (top < 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
334 height += top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
335 top = 0; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
336 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
337 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
338 i = top + height - _screen.height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
339 if (i >= 0) height -= i; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
340 |
10610
1d2aeaa16ec6
(svn r14899) -Feature: remove the window limit, but leave a configurable limit on the number of non-sticky non-vital windows.
rubidium <rubidium@openttd.org>
parents:
10600
diff
changeset
|
341 if (height > 0) DoSetViewportPosition(w->z_front, left, top, width, height); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
342 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
343 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
344 |
8992
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
345 /** |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
346 * Is a xy position inside the viewport of the window? |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
347 * @param w Window to examine its viewport |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
348 * @param x X coordinate of the xy position |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
349 * @param y Y coordinate of the xy position |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
350 * @return Pointer to the viewport if the xy position is in the viewport of the window, |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
351 * otherwise \c NULL is returned. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
352 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
353 ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
354 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
355 ViewPort *vp = w->viewport; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
356 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
357 if (vp != NULL && |
8562
f539be5f3bd3
(svn r12140) -Codechange: A bit of code style fixes(Geektoo).
belugas <belugas@openttd.org>
parents:
8473
diff
changeset
|
358 IsInsideMM(x, vp->left, vp->left + vp->width) && |
7954
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
359 IsInsideMM(y, vp->top, vp->top + vp->height)) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
360 return vp; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
361 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
362 return NULL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
363 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
364 |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
365 /** |
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
366 * Translate screen coordinate in a viewport to a tile coordinate |
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
367 * @param vp Viewport that contains the (\a x, \a y) screen coordinate |
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
368 * @param x Screen x coordinate |
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
369 * @param y Screen y coordinate |
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
370 * @return Tile coordinate */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
371 static Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
372 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
373 Point pt; |
10642
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
374 int a, b; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
375 uint z; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
376 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
377 if ( (uint)(x -= vp->left) >= (uint)vp->width || |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
378 (uint)(y -= vp->top) >= (uint)vp->height) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
379 Point pt = {-1, -1}; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
380 return pt; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
381 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
382 |
6626
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
383 x = (ScaleByZoom(x, vp->zoom) + vp->virtual_left) >> 2; |
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
384 y = (ScaleByZoom(y, vp->zoom) + vp->virtual_top) >> 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
385 |
10642
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
386 a = y - x; |
29bc871ff8d1
(svn r14944) -Cleanup: add spaces around some operators
rubidium <rubidium@openttd.org>
parents:
10626
diff
changeset
|
387 b = y + x; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
388 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
389 /* we need to move variables in to the valid range, as the |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
390 * GetTileZoomCenterWindow() function can call here with invalid x and/or y, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
391 * when the user tries to zoom out along the sides of the map */ |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
392 a = Clamp(a, -4 * TILE_SIZE, (int)(MapMaxX() * TILE_SIZE) - 1); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
393 b = Clamp(b, -4 * TILE_SIZE, (int)(MapMaxY() * TILE_SIZE) - 1); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
394 |
7764
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
395 /* (a, b) is the X/Y-world coordinate that belongs to (x,y) if the landscape would be completely flat on height 0. |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
396 * Now find the Z-world coordinate by fix point iteration. |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
397 * This is a bit tricky because the tile height is non-continuous at foundations. |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
398 * The clicked point should be approached from the back, otherwise there are regions that are not clickable. |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
399 * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
400 * So give it a z-malus of 4 in the first iterations. |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
401 */ |
4cdd7ef382fe
(svn r11313) -Codechange: prepare several pieces of code so the can handle some new slopes. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7726
diff
changeset
|
402 z = 0; |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
403 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
404 int min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
405 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
406 for (int i = 0; i < 5; i++) z = GetSlopeZ(Clamp(a + (int)max(z, 4u) - 4, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + (int)max(z, 4u) - 4, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
407 for (uint malus = 3; malus > 0; malus--) z = GetSlopeZ(Clamp(a + (int)max(z, malus) - (int)malus, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + (int)max(z, malus) - (int)malus, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
408 for (int i = 0; i < 5; i++) z = GetSlopeZ(Clamp(a + (int)z, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + (int)z, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
409 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
410 pt.x = Clamp(a + (int)z, min_coord, MapMaxX() * TILE_SIZE - 1); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
411 pt.y = Clamp(b + (int)z, min_coord, MapMaxY() * TILE_SIZE - 1); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
412 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
413 return pt; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
414 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
415 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
416 /* When used for zooming, check area below current coordinates (x,y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
417 * and return the tile of the zoomed out/in position (zoom_x, zoom_y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
418 * when you just want the tile, make x = zoom_x and y = zoom_y */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
419 static Point GetTileFromScreenXY(int x, int y, int zoom_x, int zoom_y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
420 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
421 Window *w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
422 ViewPort *vp; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
423 Point pt; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
424 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
425 if ( (w = FindWindowFromPt(x, y)) != NULL && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
426 (vp = IsPtInWindowViewport(w, x, y)) != NULL) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
427 return TranslateXYToTileCoord(vp, zoom_x, zoom_y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
428 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
429 pt.y = pt.x = -1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
430 return pt; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
431 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
432 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
433 Point GetTileBelowCursor() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
434 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
435 return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, _cursor.pos.x, _cursor.pos.y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
436 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
437 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
438 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
439 Point GetTileZoomCenterWindow(bool in, Window * w) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
440 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
441 int x, y; |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
442 ViewPort *vp = w->viewport; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
443 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
444 if (in) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
445 x = ((_cursor.pos.x - vp->left) >> 1) + (vp->width >> 2); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
446 y = ((_cursor.pos.y - vp->top) >> 1) + (vp->height >> 2); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
447 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
448 x = vp->width - (_cursor.pos.x - vp->left); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
449 y = vp->height - (_cursor.pos.y - vp->top); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
450 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
451 /* Get the tile below the cursor and center on the zoomed-out center */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
452 return GetTileFromScreenXY(_cursor.pos.x, _cursor.pos.y, x + vp->left, y + vp->top); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
453 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
454 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
455 /** Update the status of the zoom-buttons according to the zoom-level |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
456 * of the viewport. This will update their status and invalidate accordingly |
6443
bc27521ccac0
(svn r9580) -Documentation: Correction of doxygen function declarations
belugas <belugas@openttd.org>
parents:
6427
diff
changeset
|
457 * @param w Window pointer to the window that has the zoom buttons |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
458 * @param vp pointer to the viewport whose zoom-level the buttons represent |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
459 * @param widget_zoom_in widget index for window with zoom-in button |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
460 * @param widget_zoom_out widget index for window with zoom-out button */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
461 void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
462 { |
7997
d109780d515b
(svn r11555) -Codechange: use the new members introduced in r11551.
rubidium <rubidium@openttd.org>
parents:
7970
diff
changeset
|
463 w->SetWidgetDisabledState(widget_zoom_in, vp->zoom == ZOOM_LVL_MIN); |
13034
6eb3f749890a
(svn r17532) -Codechange: Rename several Invalidate functions to SetDirty for more consistency and distinguishability.
frosch <frosch@openttd.org>
parents:
13012
diff
changeset
|
464 w->SetWidgetDirty(widget_zoom_in); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
465 |
7997
d109780d515b
(svn r11555) -Codechange: use the new members introduced in r11551.
rubidium <rubidium@openttd.org>
parents:
7970
diff
changeset
|
466 w->SetWidgetDisabledState(widget_zoom_out, vp->zoom == ZOOM_LVL_MAX); |
13034
6eb3f749890a
(svn r17532) -Codechange: Rename several Invalidate functions to SetDirty for more consistency and distinguishability.
frosch <frosch@openttd.org>
parents:
13012
diff
changeset
|
467 w->SetWidgetDirty(widget_zoom_out); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
468 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
469 |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
470 /** |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
471 * Draws a ground sprite at a specific world-coordinate. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
472 * |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
473 * @param image the image to draw. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
474 * @param pal the provided palette. |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
475 * @param x position x (world coordinates) of the sprite. |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
476 * @param y position y (world coordinates) of the sprite. |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
477 * @param z position z (world coordinates) of the sprite. |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
478 * @param sub Only draw a part of the sprite. |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
479 * @param extra_offs_x Pixel X offset for the sprite position. |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
480 * @param extra_offs_y Pixel Y offset for the sprite position. |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
481 * |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
482 */ |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
483 void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z, const SubSprite *sub, int extra_offs_x, int extra_offs_y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
484 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
485 assert((image & SPRITE_MASK) < MAX_SPRITES); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
486 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
487 TileSpriteToDraw *ts = _vd.tile_sprites_to_draw.Append(); |
8949
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
488 ts->image = image; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
489 ts->pal = pal; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
490 ts->sub = sub; |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
491 Point pt = RemapCoords(x, y, z); |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
492 ts->x = pt.x + extra_offs_x; |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
493 ts->y = pt.y + extra_offs_y; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
494 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
495 |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
496 /** |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
497 * Adds a child sprite to the active foundation. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
498 * |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
499 * The pixel offset of the sprite relative to the ParentSprite is the sum of the offset passed to OffsetGroundSprite() and extra_offs_?. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
500 * |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
501 * @param image the image to draw. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
502 * @param pal the provided palette. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
503 * @param sub Only draw a part of the sprite. |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
504 * @param foundation_part Foundation part. |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
505 * @param extra_offs_x Pixel X offset for the sprite position. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
506 * @param extra_offs_y Pixel Y offset for the sprite position. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
507 */ |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
508 static void AddChildSpriteToFoundation(SpriteID image, SpriteID pal, const SubSprite *sub, FoundationPart foundation_part, int extra_offs_x, int extra_offs_y) |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
509 { |
7954
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
510 assert(IsInsideMM(foundation_part, 0, FOUNDATION_PART_END)); |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
511 assert(_vd.foundation[foundation_part] != -1); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
512 Point offs = _vd.foundation_offset[foundation_part]; |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
513 |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
514 /* Change the active ChildSprite list to the one of the foundation */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
515 int *old_child = _vd.last_child; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
516 _vd.last_child = _vd.last_foundation_child[foundation_part]; |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
517 |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
518 AddChildSpriteScreen(image, pal, offs.x + extra_offs_x, offs.y + extra_offs_y, false, sub); |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
519 |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
520 /* Switch back to last ChildSprite list */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
521 _vd.last_child = old_child; |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
522 } |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
523 |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
524 /** |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
525 * Draws a ground sprite for the current tile. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
526 * If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
527 * |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
528 * @param image the image to draw. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
529 * @param pal the provided palette. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
530 * @param sub Only draw a part of the sprite. |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
531 * @param extra_offs_x Pixel X offset for the sprite position. |
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
532 * @param extra_offs_y Pixel Y offset for the sprite position. |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
533 */ |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
534 void DrawGroundSprite(SpriteID image, SpriteID pal, const SubSprite *sub, int extra_offs_x, int extra_offs_y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
535 { |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
536 /* Switch to first foundation part, if no foundation was drawn */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
537 if (_vd.foundation_part == FOUNDATION_PART_NONE) _vd.foundation_part = FOUNDATION_PART_NORMAL; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
538 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
539 if (_vd.foundation[_vd.foundation_part] != -1) { |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
540 AddChildSpriteToFoundation(image, pal, sub, _vd.foundation_part, extra_offs_x, extra_offs_y); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
541 } else { |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
542 DrawGroundSpriteAt(image, pal, _cur_ti->x, _cur_ti->y, _cur_ti->z, sub, extra_offs_x, extra_offs_y); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
543 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
544 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
545 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
546 |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
547 /** |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
548 * Called when a foundation has been drawn for the current tile. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
549 * Successive ground sprites for the current tile will be drawn as child sprites of the "foundation"-ParentSprite, not as TileSprites. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
550 * |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
551 * @param x sprite x-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
552 * @param y sprite y-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
553 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
554 void OffsetGroundSprite(int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
555 { |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
556 /* Switch to next foundation part */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
557 switch (_vd.foundation_part) { |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
558 case FOUNDATION_PART_NONE: |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
559 _vd.foundation_part = FOUNDATION_PART_NORMAL; |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
560 break; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
561 case FOUNDATION_PART_NORMAL: |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
562 _vd.foundation_part = FOUNDATION_PART_HALFTILE; |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
563 break; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
564 default: NOT_REACHED(); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
565 } |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
566 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
567 /* _vd.last_child == NULL if foundation sprite was clipped by the viewport bounds */ |
9553
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
568 if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = _vd.parent_sprites_to_draw.Length() - 1; |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
569 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
570 _vd.foundation_offset[_vd.foundation_part].x = x; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
571 _vd.foundation_offset[_vd.foundation_part].y = y; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
572 _vd.last_foundation_child[_vd.foundation_part] = _vd.last_child; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
573 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
574 |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
575 /** |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
576 * Adds a child sprite to a parent sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
577 * In contrast to "AddChildSpriteScreen()" the sprite position is in world coordinates |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
578 * |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
579 * @param image the image to draw. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
580 * @param pal the provided palette. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
581 * @param x position x of the sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
582 * @param y position y of the sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
583 * @param z position z of the sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
584 * @param sub Only draw a part of the sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
585 */ |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
586 static void AddCombinedSprite(SpriteID image, SpriteID pal, int x, int y, byte z, const SubSprite *sub) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
587 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
588 Point pt = RemapCoords(x, y, z); |
10647
592ae9307430
(svn r14949) -Cleanup: pointer coding style
rubidium <rubidium@openttd.org>
parents:
10645
diff
changeset
|
589 const Sprite *spr = GetSprite(image & SPRITE_MASK, ST_NORMAL); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
590 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
591 if (pt.x + spr->x_offs >= _vd.dpi.left + _vd.dpi.width || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
592 pt.x + spr->x_offs + spr->width <= _vd.dpi.left || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
593 pt.y + spr->y_offs >= _vd.dpi.top + _vd.dpi.height || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
594 pt.y + spr->y_offs + spr->height <= _vd.dpi.top) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
595 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
596 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
597 const ParentSpriteToDraw *pstd = _vd.parent_sprites_to_draw.End() - 1; |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
598 AddChildSpriteScreen(image, pal, pt.x - pstd->left, pt.y - pstd->top, false, sub); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
599 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
600 |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
601 /** Draw a (transparent) sprite at given coordinates with a given bounding box. |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
602 * 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. |
7617
efa2262af59e
(svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
603 * Bounding boxes with bb_offset_x == w or bb_offset_y == h or bb_offset_z == dz are allowed and produce thin slices. |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
604 * |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
605 * @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 |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
606 * defined by the sprite offset in the grf file. |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
607 * However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset. |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
608 * |
7617
efa2262af59e
(svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
609 * @pre w >= bb_offset_x, h >= bb_offset_y, dz >= bb_offset_z. Else w, h or dz are ignored. |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
610 * |
7333
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
611 * @param image the image to combine and draw, |
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
612 * @param pal the provided palette, |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
613 * @param x position X (world) of the sprite, |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
614 * @param y position Y (world) of the sprite, |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
615 * @param w bounding box extent towards positive X (world), |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
616 * @param h bounding box extent towards positive Y (world), |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
617 * @param dz bounding box extent towards positive Z (world), |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
618 * @param z position Z (world) of the sprite, |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
619 * @param transparent if true, switch the palette between the provided palette and the transparent palette, |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
620 * @param bb_offset_x bounding box extent towards negative X (world), |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
621 * @param bb_offset_y bounding box extent towards negative Y (world), |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
622 * @param bb_offset_z bounding box extent towards negative Z (world) |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
623 * @param sub Only draw a part of the sprite. |
7333
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
624 */ |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
625 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, const SubSprite *sub) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
626 { |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
627 int32 left, right, top, bottom; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
628 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
629 assert((image & SPRITE_MASK) < MAX_SPRITES); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
630 |
7333
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
631 /* make the sprites transparent with the right palette */ |
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
632 if (transparent) { |
7931
44ff7a6d801f
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents:
7929
diff
changeset
|
633 SetBit(image, PALETTE_MODIFIER_TRANSPARENT); |
7333
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
634 pal = PALETTE_TO_TRANSPARENT; |
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
635 } |
7110c41ab174
(svn r10696) -Codechange: remove duplication of the "make sprite transparent" code.
rubidium <rubidium@openttd.org>
parents:
7321
diff
changeset
|
636 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
637 if (_vd.combine_sprites == SPRITE_COMBINE_ACTIVE) { |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
638 AddCombinedSprite(image, pal, x, y, z, sub); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
639 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
640 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
641 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
642 _vd.last_child = NULL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
643 |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
644 Point pt = RemapCoords(x, y, z); |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
645 int tmp_left, tmp_top, tmp_x = pt.x, tmp_y = pt.y; |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
646 |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
647 /* Compute screen extents of sprite */ |
7601
b5ee57f72673
(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 <rubidium@openttd.org>
parents:
7580
diff
changeset
|
648 if (image == SPR_EMPTY_BOUNDING_BOX) { |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
649 left = tmp_left = RemapCoords(x + w , y + bb_offset_y, z + bb_offset_z).x; |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
650 right = RemapCoords(x + bb_offset_x, y + h , z + bb_offset_z).x + 1; |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
651 top = tmp_top = RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz ).y; |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
652 bottom = RemapCoords(x + w , y + h , z + bb_offset_z).y + 1; |
7601
b5ee57f72673
(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 <rubidium@openttd.org>
parents:
7580
diff
changeset
|
653 } else { |
10056
7867701f63e4
(svn r14223) -Codechange: make GetSprite aware of the 4 different types of sprites: fonts, recolour, mapgen and normal sprites.
rubidium <rubidium@openttd.org>
parents:
10055
diff
changeset
|
654 const Sprite *spr = GetSprite(image & SPRITE_MASK, ST_NORMAL); |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
655 left = tmp_left = (pt.x += spr->x_offs); |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
656 right = (pt.x + spr->width ); |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
657 top = tmp_top = (pt.y += spr->y_offs); |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
658 bottom = (pt.y + spr->height); |
7601
b5ee57f72673
(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 <rubidium@openttd.org>
parents:
7580
diff
changeset
|
659 } |
8562
f539be5f3bd3
(svn r12140) -Codechange: A bit of code style fixes(Geektoo).
belugas <belugas@openttd.org>
parents:
8473
diff
changeset
|
660 |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
661 if (_draw_bounding_boxes && (image != SPR_EMPTY_BOUNDING_BOX)) { |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
662 /* Compute maximal extents of sprite and it's bounding box */ |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
663 left = min(left , RemapCoords(x + w , y + bb_offset_y, z + bb_offset_z).x); |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
664 right = max(right , RemapCoords(x + bb_offset_x, y + h , z + bb_offset_z).x + 1); |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
665 top = min(top , RemapCoords(x + bb_offset_x, y + bb_offset_y, z + dz ).y); |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
666 bottom = max(bottom, RemapCoords(x + w , y + h , z + bb_offset_z).y + 1); |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
667 } |
8562
f539be5f3bd3
(svn r12140) -Codechange: A bit of code style fixes(Geektoo).
belugas <belugas@openttd.org>
parents:
8473
diff
changeset
|
668 |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
669 /* Do not add the sprite to the viewport, if it is outside */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
670 if (left >= _vd.dpi.left + _vd.dpi.width || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
671 right <= _vd.dpi.left || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
672 top >= _vd.dpi.top + _vd.dpi.height || |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
673 bottom <= _vd.dpi.top) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
674 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
675 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
676 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
677 ParentSpriteToDraw *ps = _vd.parent_sprites_to_draw.Append(); |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
678 ps->x = tmp_x; |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
679 ps->y = tmp_y; |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
680 |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
681 ps->left = tmp_left; |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
682 ps->top = tmp_top; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
683 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
684 ps->image = image; |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
685 ps->pal = pal; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
686 ps->sub = sub; |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
687 ps->xmin = x + bb_offset_x; |
7617
efa2262af59e
(svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
688 ps->xmax = x + max(bb_offset_x, w) - 1; |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
689 |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
690 ps->ymin = y + bb_offset_y; |
7617
efa2262af59e
(svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
691 ps->ymax = y + max(bb_offset_y, h) - 1; |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
692 |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
693 ps->zmin = z + bb_offset_z; |
7617
efa2262af59e
(svn r11147) -Fix [FS#1247] (r11105): reallow bounding boxes with x/y/z-extent 0. Some NewGRFs need them. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7601
diff
changeset
|
694 ps->zmax = z + max(bb_offset_z, dz) - 1; |
7580
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
695 |
8ae764721b47
(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 <rubidium@openttd.org>
parents:
7579
diff
changeset
|
696 ps->comparison_done = false; |
9534
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
697 ps->first_child = -1; |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
698 |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
699 _vd.last_child = &ps->first_child; |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
700 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
701 if (_vd.combine_sprites == SPRITE_COMBINE_PENDING) _vd.combine_sprites = SPRITE_COMBINE_ACTIVE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
702 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
703 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
704 /** |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
705 * Starts a block of sprites, which are "combined" into a single bounding box. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
706 * |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
707 * Subsequent calls to #AddSortableSpriteToDraw will be drawn into the same bounding box. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
708 * That is: The first sprite that is not clipped by the viewport defines the bounding box, and |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
709 * the following sprites will be child sprites to that one. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
710 * |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
711 * That implies: |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
712 * - The drawing order is definite. No other sprites will be sorted between those of the block. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
713 * - You have to provide a valid bounding box for all sprites, |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
714 * as you won't know which one is the first non-clipped one. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
715 * Preferable you use the same bounding box for all. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
716 * - You cannot use #AddChildSpriteScreen inside the block, as its result will be indefinite. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
717 * |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
718 * The block is terminated by #EndSpriteCombine. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
719 * |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
720 * You cannot nest "combined" blocks. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
721 */ |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
722 void StartSpriteCombine() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
723 { |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
724 assert(_vd.combine_sprites == SPRITE_COMBINE_NONE); |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
725 _vd.combine_sprites = SPRITE_COMBINE_PENDING; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
726 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
727 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
728 /** |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
729 * Terminates a block of sprites started by #StartSpriteCombine. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
730 * Take a look there for details. |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
731 */ |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
732 void EndSpriteCombine() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
733 { |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
734 assert(_vd.combine_sprites != SPRITE_COMBINE_NONE); |
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
735 _vd.combine_sprites = SPRITE_COMBINE_NONE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
736 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
737 |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
738 /** |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
739 * Add a child sprite to a parent sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
740 * |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
741 * @param image the image to draw. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
742 * @param pal the provided palette. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
743 * @param x sprite x-offset (screen coordinates) relative to parent sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
744 * @param y sprite y-offset (screen coordinates) relative to parent sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
745 * @param transparent if true, switch the palette between the provided palette and the transparent palette, |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
746 * @param sub Only draw a part of the sprite. |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
747 */ |
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
748 void AddChildSpriteScreen(SpriteID image, SpriteID pal, int x, int y, bool transparent, const SubSprite *sub) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
749 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
750 assert((image & SPRITE_MASK) < MAX_SPRITES); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
751 |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
752 /* If the ParentSprite was clipped by the viewport bounds, do not draw the ChildSprites either */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
753 if (_vd.last_child == NULL) return; |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
754 |
7659
03747e97c53b
(svn r11190) -Fix: make snowy roofs of (newgrf) houses also transparent.
rubidium <rubidium@openttd.org>
parents:
7643
diff
changeset
|
755 /* make the sprites transparent with the right palette */ |
03747e97c53b
(svn r11190) -Fix: make snowy roofs of (newgrf) houses also transparent.
rubidium <rubidium@openttd.org>
parents:
7643
diff
changeset
|
756 if (transparent) { |
7931
44ff7a6d801f
(svn r11484) -Codechange: Remove the doubled function SetBitT and rename the remaining to fit with the naming style
skidd13 <skidd13@openttd.org>
parents:
7929
diff
changeset
|
757 SetBit(image, PALETTE_MODIFIER_TRANSPARENT); |
7659
03747e97c53b
(svn r11190) -Fix: make snowy roofs of (newgrf) houses also transparent.
rubidium <rubidium@openttd.org>
parents:
7643
diff
changeset
|
758 pal = PALETTE_TO_TRANSPARENT; |
03747e97c53b
(svn r11190) -Fix: make snowy roofs of (newgrf) houses also transparent.
rubidium <rubidium@openttd.org>
parents:
7643
diff
changeset
|
759 } |
03747e97c53b
(svn r11190) -Fix: make snowy roofs of (newgrf) houses also transparent.
rubidium <rubidium@openttd.org>
parents:
7643
diff
changeset
|
760 |
9553
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
761 *_vd.last_child = _vd.child_screen_sprites_to_draw.Length(); |
9534
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
762 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
763 ChildScreenSpriteToDraw *cs = _vd.child_screen_sprites_to_draw.Append(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
764 cs->image = image; |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
765 cs->pal = pal; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
766 cs->sub = sub; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
767 cs->x = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
768 cs->y = y; |
9534
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
769 cs->next = -1; |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
770 |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
771 /* Append the sprite to the active ChildSprite list. |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
772 * If the active ParentSprite is a foundation, update last_foundation_child as well. |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
773 * Note: ChildSprites of foundations are NOT sequential in the vector, as selection sprites are added at last. */ |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
774 if (_vd.last_foundation_child[0] == _vd.last_child) _vd.last_foundation_child[0] = &cs->next; |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
775 if (_vd.last_foundation_child[1] == _vd.last_child) _vd.last_foundation_child[1] = &cs->next; |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
776 _vd.last_child = &cs->next; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
777 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
778 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
779 /* Returns a StringSpriteToDraw */ |
11085
8da1855e9f14
(svn r15428) -Codechange: consistently use colour instead of having both color and colour.
rubidium <rubidium@openttd.org>
parents:
11082
diff
changeset
|
780 void AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2, uint16 colour, uint16 width) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
781 { |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
782 StringSpriteToDraw *ss = _vd.string_sprites_to_draw.Append(); |
8949
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
783 ss->string = string; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
784 ss->x = x; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
785 ss->y = y; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
786 ss->params[0] = params_1; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
787 ss->params[1] = params_2; |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
788 ss->width = width; |
11085
8da1855e9f14
(svn r15428) -Codechange: consistently use colour instead of having both color and colour.
rubidium <rubidium@openttd.org>
parents:
11082
diff
changeset
|
789 ss->colour = colour; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
790 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
791 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
792 |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
793 /** |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
794 * Draws sprites between ground sprite and everything above. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
795 * |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
796 * The sprite is either drawn as TileSprite or as ChildSprite of the active foundation. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
797 * |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
798 * @param image the image to draw. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
799 * @param pal the provided palette. |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
800 * @param ti TileInfo Tile that is being drawn |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
801 * @param z_offset Z offset relative to the groundsprite. Only used for the sprite position, not for sprite sorting. |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
802 * @param foundation_part Foundation part the sprite belongs to. |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
803 */ |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
804 static void DrawSelectionSprite(SpriteID image, SpriteID pal, const TileInfo *ti, int z_offset, FoundationPart foundation_part) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
805 { |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
806 /* FIXME: This is not totally valid for some autorail highlights, that extent over the edges of the tile. */ |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
807 if (_vd.foundation[foundation_part] == -1) { |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
808 /* draw on real ground */ |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
809 DrawGroundSpriteAt(image, pal, ti->x, ti->y, ti->z + z_offset); |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
810 } else { |
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
811 /* draw on top of foundation */ |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
812 AddChildSpriteToFoundation(image, pal, NULL, foundation_part, 0, -z_offset); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
813 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
814 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
815 |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
816 /** |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
817 * Draws a selection rectangle on a tile. |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
818 * |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
819 * @param ti TileInfo Tile that is being drawn |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
820 * @param pal Palette to apply. |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
821 */ |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
822 static void DrawTileSelectionRect(const TileInfo *ti, SpriteID pal) |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
823 { |
10815
8966b7fa7a24
(svn r15150) -Fix: Don't highlight tiles outside the visible map.
Yexo <Yexo@openttd.org>
parents:
10732
diff
changeset
|
824 if (!IsValidTile(ti->tile)) return; |
8966b7fa7a24
(svn r15150) -Fix: Don't highlight tiles outside the visible map.
Yexo <Yexo@openttd.org>
parents:
10732
diff
changeset
|
825 |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
826 SpriteID sel; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
827 if (IsHalftileSlope(ti->tileh)) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
828 Corner halftile_corner = GetHalftileSlopeCorner(ti->tileh); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
829 SpriteID sel2 = SPR_HALFTILE_SELECTION_FLAT + halftile_corner; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
830 DrawSelectionSprite(sel2, pal, ti, 7 + TILE_HEIGHT, FOUNDATION_PART_HALFTILE); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
831 |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
832 Corner opposite_corner = OppositeCorner(halftile_corner); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
833 if (IsSteepSlope(ti->tileh)) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
834 sel = SPR_HALFTILE_SELECTION_DOWN; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
835 } else { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
836 sel = ((ti->tileh & SlopeWithOneCornerRaised(opposite_corner)) != 0 ? SPR_HALFTILE_SELECTION_UP : SPR_HALFTILE_SELECTION_FLAT); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
837 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
838 sel += opposite_corner; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
839 } else { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
840 sel = SPR_SELECT_TILE + _tileh_to_sprite[ti->tileh]; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
841 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
842 DrawSelectionSprite(sel, pal, ti, 7, FOUNDATION_PART_NORMAL); |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
843 } |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
844 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
845 static bool IsPartOfAutoLine(int px, int py) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
846 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
847 px -= _thd.selstart.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
848 py -= _thd.selstart.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
849 |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
850 if ((_thd.drawstyle & ~HT_DIR_MASK) != HT_LINE) return false; |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
851 |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
852 switch (_thd.drawstyle & HT_DIR_MASK) { |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
853 case HT_DIR_X: return py == 0; // x direction |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
854 case HT_DIR_Y: return px == 0; // y direction |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
855 case HT_DIR_HU: return px == -py || px == -py - 16; // horizontal upper |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
856 case HT_DIR_HL: return px == -py || px == -py + 16; // horizontal lower |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
857 case HT_DIR_VL: return px == py || px == py + 16; // vertival left |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
858 case HT_DIR_VR: return px == py || px == py - 16; // vertical right |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
859 default: |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
860 NOT_REACHED(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
861 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
862 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
863 |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
864 /* [direction][side] */ |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
865 static const HighLightStyle _autorail_type[6][2] = { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
866 { HT_DIR_X, HT_DIR_X }, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
867 { HT_DIR_Y, HT_DIR_Y }, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
868 { HT_DIR_HU, HT_DIR_HL }, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
869 { HT_DIR_HL, HT_DIR_HU }, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
870 { HT_DIR_VL, HT_DIR_VR }, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
871 { HT_DIR_VR, HT_DIR_VL } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
872 }; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
873 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
874 #include "table/autorail.h" |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
875 |
7078
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
876 /** |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
877 * Draws autorail highlights. |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
878 * |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
879 * @param *ti TileInfo Tile that is being drawn |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
880 * @param autorail_type Offset into _AutorailTilehSprite[][] |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
881 */ |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
882 static void DrawAutorailSelection(const TileInfo *ti, uint autorail_type) |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
883 { |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
884 SpriteID image; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
885 SpriteID pal; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
886 int offset; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
887 |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
888 FoundationPart foundation_part = FOUNDATION_PART_NORMAL; |
8413
5c456105e68a
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch <frosch@openttd.org>
parents:
8270
diff
changeset
|
889 Slope autorail_tileh = RemoveHalftileSlope(ti->tileh); |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
890 if (IsHalftileSlope(ti->tileh)) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
891 static const uint _lower_rail[4] = { 5U, 2U, 4U, 3U }; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
892 Corner halftile_corner = GetHalftileSlopeCorner(ti->tileh); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
893 if (autorail_type != _lower_rail[halftile_corner]) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
894 foundation_part = FOUNDATION_PART_HALFTILE; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
895 /* Here we draw the highlights of the "three-corners-raised"-slope. That looks ok to me. */ |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
896 autorail_tileh = SlopeWithThreeCornersRaised(OppositeCorner(halftile_corner)); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
897 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
898 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
899 |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
900 offset = _AutorailTilehSprite[autorail_tileh][autorail_type]; |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
901 if (offset >= 0) { |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
902 image = SPR_AUTORAIL_BASE + offset; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
903 pal = PAL_NONE; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
904 } else { |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
905 image = SPR_AUTORAIL_BASE - offset; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
906 pal = PALETTE_SEL_TILE_RED; |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
907 } |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
908 |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
909 DrawSelectionSprite(image, _thd.make_square_red ? PALETTE_SEL_TILE_RED : pal, ti, 7, foundation_part); |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
910 } |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
911 |
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
912 /** |
7078
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
913 * Checks if the specified tile is selected and if so draws selection using correct selectionstyle. |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
914 * @param *ti TileInfo Tile that is being drawn |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
915 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
916 static void DrawTileSelection(const TileInfo *ti) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
917 { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
918 /* Draw a red error square? */ |
10816
35b3e8e25590
(svn r15151) -Fix: tile 0 can now be highlighted as error tile
Yexo <Yexo@openttd.org>
parents:
10815
diff
changeset
|
919 bool is_redsq = _thd.redsq == ti->tile; |
8743
d6d6bbb8da9c
(svn r12439) -Fix [FS#1871]: do not 'disable' the drawing of autorail overlays when the tile is 'error'-marked (red pulsating selection). Patch by Icosikai.
rubidium <rubidium@openttd.org>
parents:
8585
diff
changeset
|
920 if (is_redsq) DrawTileSelectionRect(ti, PALETTE_TILE_RED_PULSATING); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
921 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
922 /* no selection active? */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
923 if (_thd.drawstyle == 0) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
924 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
925 /* Inside the inner area? */ |
7954
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
926 if (IsInsideBS(ti->x, _thd.pos.x, _thd.size.x) && |
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
927 IsInsideBS(ti->y, _thd.pos.y, _thd.size.y)) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
928 if (_thd.drawstyle & HT_RECT) { |
8743
d6d6bbb8da9c
(svn r12439) -Fix [FS#1871]: do not 'disable' the drawing of autorail overlays when the tile is 'error'-marked (red pulsating selection). Patch by Icosikai.
rubidium <rubidium@openttd.org>
parents:
8585
diff
changeset
|
929 if (!is_redsq) DrawTileSelectionRect(ti, _thd.make_square_red ? PALETTE_SEL_TILE_RED : PAL_NONE); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
930 } else if (_thd.drawstyle & HT_POINT) { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
931 /* Figure out the Z coordinate for the single dot. */ |
7726
9f29ddfd8351
(svn r11261) -Codechange: Draw selection sprites (HT_RECT, HT_POINT, HT_RAIL) on foundations as ChildSprite of the foundation, not as single ParentSprite. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7681
diff
changeset
|
932 byte z = 0; |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
933 FoundationPart foundation_part = FOUNDATION_PART_NORMAL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
934 if (ti->tileh & SLOPE_N) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
935 z += TILE_HEIGHT; |
8413
5c456105e68a
(svn r11983) -Codechange: Add some helper functions for slopes and use them.
frosch <frosch@openttd.org>
parents:
8270
diff
changeset
|
936 if (RemoveHalftileSlope(ti->tileh) == SLOPE_STEEP_N) z += TILE_HEIGHT; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
937 } |
7769
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
938 if (IsHalftileSlope(ti->tileh)) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
939 Corner halftile_corner = GetHalftileSlopeCorner(ti->tileh); |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
940 if ((halftile_corner == CORNER_W) || (halftile_corner == CORNER_E)) z += TILE_HEIGHT; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
941 if (halftile_corner != CORNER_S) { |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
942 foundation_part = FOUNDATION_PART_HALFTILE; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
943 if (IsSteepSlope(ti->tileh)) z -= TILE_HEIGHT; |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
944 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
945 } |
ca89a62f72e1
(svn r11318) -Codechange: add the actual support for drawing selections on halftiles, r11316 just added the things needed to load the sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7764
diff
changeset
|
946 DrawSelectionSprite(_cur_dpi->zoom <= ZOOM_LVL_DETAIL ? SPR_DOT : SPR_DOT_SMALL, PAL_NONE, ti, z, foundation_part); |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
947 } else if (_thd.drawstyle & HT_RAIL) { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
948 /* autorail highlight piece under cursor */ |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
949 HighLightStyle type = _thd.drawstyle & HT_DIR_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
950 assert(type < HT_DIR_END); |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
951 DrawAutorailSelection(ti, _autorail_type[type][0]); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
952 } else if (IsPartOfAutoLine(ti->x, ti->y)) { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
953 /* autorail highlighting long line */ |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
954 HighLightStyle dir = _thd.drawstyle & HT_DIR_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
955 uint side; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
956 |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
957 if (dir == HT_DIR_X || dir == HT_DIR_Y) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
958 side = 0; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
959 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
960 TileIndex start = TileVirtXY(_thd.selstart.x, _thd.selstart.y); |
7970
c49c1607b294
(svn r11526) -Codechange: Rename the function delta fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7954
diff
changeset
|
961 side = Delta(Delta(TileX(start), TileX(ti->tile)), Delta(TileY(start), TileY(ti->tile))); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
962 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
963 |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
964 DrawAutorailSelection(ti, _autorail_type[dir][side]); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
965 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
966 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
967 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
968 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
969 /* Check if it's inside the outer area? */ |
8743
d6d6bbb8da9c
(svn r12439) -Fix [FS#1871]: do not 'disable' the drawing of autorail overlays when the tile is 'error'-marked (red pulsating selection). Patch by Icosikai.
rubidium <rubidium@openttd.org>
parents:
8585
diff
changeset
|
970 if (!is_redsq && _thd.outersize.x && |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
971 _thd.size.x < _thd.size.x + _thd.outersize.x && |
7954
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
972 IsInsideBS(ti->x, _thd.pos.x + _thd.offs.x, _thd.size.x + _thd.outersize.x) && |
38bb7c45688f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7951
diff
changeset
|
973 IsInsideBS(ti->y, _thd.pos.y + _thd.offs.y, _thd.size.y + _thd.outersize.y)) { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
974 /* Draw a blue rect. */ |
7679
9e222b8c9065
(svn r11210) -Codechange: unify the way that selection sprites are drawn. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7659
diff
changeset
|
975 DrawTileSelectionRect(ti, PALETTE_SEL_TILE_BLUE); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
976 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
977 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
978 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
979 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
980 static void ViewportAddLandscape() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
981 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
982 int x, y, width, height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
983 TileInfo ti; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
984 bool direction; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
985 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
986 _cur_ti = &ti; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
987 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
988 /* Transform into tile coordinates and round to closest full tile */ |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
989 x = ((_vd.dpi.top >> 1) - (_vd.dpi.left >> 2)) & ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
990 y = ((_vd.dpi.top >> 1) + (_vd.dpi.left >> 2) - TILE_SIZE) & ~TILE_UNIT_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
991 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
992 /* determine size of area */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
993 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
994 Point pt = RemapCoords(x, y, 241); |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
995 width = (_vd.dpi.left + _vd.dpi.width - pt.x + 95) >> 6; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
996 height = (_vd.dpi.top + _vd.dpi.height - pt.y) >> 5 << 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
997 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
998 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
999 assert(width > 0); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1000 assert(height > 0); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1001 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1002 direction = false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1003 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1004 do { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1005 int width_cur = width; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1006 int x_cur = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1007 int y_cur = y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1008 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1009 do { |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1010 TileType tt = MP_VOID; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1011 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1012 ti.x = x_cur; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1013 ti.y = y_cur; |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1014 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1015 ti.z = 0; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1016 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1017 ti.tileh = SLOPE_FLAT; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1018 ti.tile = INVALID_TILE; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1019 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1020 if (0 <= x_cur && x_cur < (int)MapMaxX() * TILE_SIZE && |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1021 0 <= y_cur && y_cur < (int)MapMaxY() * TILE_SIZE) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1022 TileIndex tile = TileVirtXY(x_cur, y_cur); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1023 |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1024 if (!_settings_game.construction.freeform_edges || (TileX(tile) != 0 && TileY(tile) != 0)) { |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1025 if (x_cur == ((int)MapMaxX() - 1) * TILE_SIZE || y_cur == ((int)MapMaxY() - 1) * TILE_SIZE) { |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1026 uint maxh = max<uint>(TileHeight(tile), 1); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1027 for (uint h = 0; h < maxh; h++) { |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1028 DrawGroundSpriteAt(SPR_SHADOW_CELL, PAL_NONE, ti.x, ti.y, h * TILE_HEIGHT); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1029 } |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1030 } |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1031 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1032 ti.tile = tile; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1033 ti.tileh = GetTileSlope(tile, &ti.z); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1034 tt = GetTileType(tile); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1035 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1036 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1037 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1038 _vd.foundation_part = FOUNDATION_PART_NONE; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1039 _vd.foundation[0] = -1; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1040 _vd.foundation[1] = -1; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1041 _vd.last_foundation_child[0] = NULL; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1042 _vd.last_foundation_child[1] = NULL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1043 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1044 _tile_type_procs[tt]->draw_tile_proc(&ti); |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1045 |
10864
e10213483b43
(svn r15199) -Fix (r15190): The south point of the south-most tile wasn't highlighted during terraforming.
Yexo <Yexo@openttd.org>
parents:
10855
diff
changeset
|
1046 if ((x_cur == (int)MapMaxX() * TILE_SIZE && IsInsideMM(y_cur, 0, MapMaxY() * TILE_SIZE + 1)) || |
e10213483b43
(svn r15199) -Fix (r15190): The south point of the south-most tile wasn't highlighted during terraforming.
Yexo <Yexo@openttd.org>
parents:
10855
diff
changeset
|
1047 (y_cur == (int)MapMaxY() * TILE_SIZE && IsInsideMM(x_cur, 0, MapMaxX() * TILE_SIZE + 1))) { |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1048 TileIndex tile = TileVirtXY(x_cur, y_cur); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1049 ti.tile = tile; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1050 ti.tileh = GetTileSlope(tile, &ti.z); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1051 tt = GetTileType(tile); |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1052 } |
10815
8966b7fa7a24
(svn r15150) -Fix: Don't highlight tiles outside the visible map.
Yexo <Yexo@openttd.org>
parents:
10732
diff
changeset
|
1053 if (ti.tile != INVALID_TILE) DrawTileSelection(&ti); |
10855
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1054 |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1055 y_cur += 0x10; |
7881d9cd55ab
(svn r15190) -Feature: Allow terraforming of the tiles at the edges of the map.
Yexo <Yexo@openttd.org>
parents:
10816
diff
changeset
|
1056 x_cur -= 0x10; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1057 } while (--width_cur); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1058 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1059 if ((direction ^= 1) != 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1060 y += 0x10; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1061 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1062 x += 0x10; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1063 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1064 } while (--height); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1065 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1066 |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1067 /** |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1068 * Add a string to draw in the viewport |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1069 * @param dpi current viewport area |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1070 * @param sign sign position and dimension |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1071 * @param string_normal String for normal and 2x zoom level |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1072 * @param string_small String for 4x and 8x zoom level |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1073 * @param string_small_shadow Shadow string for 4x and 8x zoom level; or STR_NULL if no shadow |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1074 * @param colour colour of the sign background; or 0 if transparent |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1075 */ |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1076 static void ViewportAddString(const DrawPixelInfo *dpi, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, uint64 params_1, uint64 params_2, uint16 colour = 0) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1077 { |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1078 int left = dpi->left; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1079 int top = dpi->top; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1080 int right = left + dpi->width; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1081 int bottom = top + dpi->height; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1082 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1083 switch (dpi->zoom) { |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1084 case ZOOM_LVL_NORMAL: |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1085 if (bottom > sign->top && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1086 top < sign->top + 12 && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1087 right > sign->left && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1088 left < sign->left + sign->width_normal) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1089 AddStringToDraw(sign->left + 1, sign->top + 1, string_normal, params_1, params_2, colour, colour != 0 ? sign->width_normal : 0); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1090 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1091 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1092 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1093 case ZOOM_LVL_OUT_2X: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1094 right += 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1095 bottom += 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1096 |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1097 if (bottom > sign->top && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1098 top < sign->top + 24 && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1099 right > sign->left && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1100 left < sign->left + sign->width_normal * 2) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1101 AddStringToDraw(sign->left + 1, sign->top + 1, string_normal, params_1, params_2, colour, colour != 0 ? sign->width_normal : 0); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1102 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1103 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1104 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1105 case ZOOM_LVL_OUT_4X: |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1106 case ZOOM_LVL_OUT_8X: |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1107 right += ScaleByZoom(1, dpi->zoom); |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1108 bottom += ScaleByZoom(1, dpi->zoom) + 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1109 |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1110 if (bottom > sign->top && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1111 top < sign->top + ScaleByZoom(12, dpi->zoom) && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1112 right > sign->left && |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1113 left < sign->left + ScaleByZoom(sign->width_small, dpi->zoom)) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1114 int shadow_offset = 0; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1115 if (string_small_shadow != STR_NULL) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1116 shadow_offset = 4; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1117 AddStringToDraw(sign->left + 1 + shadow_offset, sign->top + 1, string_small_shadow, params_1, params_2); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1118 } |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1119 AddStringToDraw(sign->left + 1, sign->top + 1 - shadow_offset, string_small, params_1, params_2, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1120 colour, colour != 0 ? sign->width_small | 0x8000 : 0); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1121 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1122 break; |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1123 |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1124 default: NOT_REACHED(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1125 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1126 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1127 |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1128 static void ViewportAddTownNames(DrawPixelInfo *dpi) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1129 { |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1130 if (!HasBit(_display_opt, DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU) return; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1131 |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1132 const Town *t; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1133 FOR_ALL_TOWNS(t) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1134 ViewportAddString(dpi, &t->sign, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1135 _settings_client.gui.population_in_label ? STR_VIEWPORT_TOWN_POP : STR_VIEWPORT_TOWN, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1136 STR_VIEWPORT_TOWN_TINY_WHITE, STR_VIEWPORT_TOWN_TINY_BLACK, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1137 t->index, t->population); |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1138 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1139 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1140 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1141 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1142 static void ViewportAddStationNames(DrawPixelInfo *dpi) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1143 { |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1144 if (!(HasBit(_display_opt, DO_SHOW_STATION_NAMES) || HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)) || _game_mode == GM_MENU) return; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1145 |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1146 const BaseStation *st; |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1147 FOR_ALL_BASE_STATIONS(st) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1148 /* Check whether the base station is a station or a waypoint */ |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1149 bool is_station = Station::IsExpected(st); |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1150 |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1151 /* Don't draw if the display options are disabled */ |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1152 if (!HasBit(_display_opt, is_station ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES)) continue; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1153 |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1154 ViewportAddString(dpi, &st->sign, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1155 is_station ? STR_VIEWPORT_STATION : STR_VIEWPORT_WAYPOINT, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1156 (is_station ? STR_VIEWPORT_STATION : STR_VIEWPORT_WAYPOINT) + 1, STR_NULL, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1157 st->index, st->facilities, (st->owner == OWNER_NONE || !st->IsInUse()) ? 0xE : _company_colours[st->owner]); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1158 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1159 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1160 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1161 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1162 static void ViewportAddSigns(DrawPixelInfo *dpi) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1163 { |
8806
104bbcae351d
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents:
8798
diff
changeset
|
1164 /* Signs are turned off or are invisible */ |
104bbcae351d
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents:
8798
diff
changeset
|
1165 if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS)) return; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1166 |
13718
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1167 const Sign *si; |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1168 FOR_ALL_SIGNS(si) { |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1169 ViewportAddString(dpi, &si->sign, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1170 STR_WHITE_SIGN, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1171 IsTransparencySet(TO_SIGNS) ? STR_VIEWPORT_SIGN_SMALL_WHITE : STR_VIEWPORT_SIGN_SMALL_BLACK, STR_NULL, |
141a263aecc4
(svn r18243) -Codechange: Deduplicate code wrt. drawing signs and station/town names.
frosch <frosch@openttd.org>
parents:
13454
diff
changeset
|
1172 si->index, 0, (si->owner == OWNER_NONE) ? 14 : _company_colours[si->owner]); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1173 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1174 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1175 |
12341
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1176 /** |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1177 * Update the position of the viewport sign. |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1178 * @param center the (preferred) center of the viewport sign |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1179 * @param top the new top of the sign |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1180 * @param str the string to show in the sign |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1181 */ |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1182 void ViewportSign::UpdatePosition(int center, int top, StringID str) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1183 { |
12395
c2eb8db929f0
(svn r16825) -Codechange: unify dirtying when updating the viewport signs.
rubidium <rubidium@openttd.org>
parents:
12345
diff
changeset
|
1184 if (this->width_normal != 0) this->MarkDirty(); |
c2eb8db929f0
(svn r16825) -Codechange: unify dirtying when updating the viewport signs.
rubidium <rubidium@openttd.org>
parents:
12345
diff
changeset
|
1185 |
12341
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1186 this->top = top; |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1187 |
561291e41257
(svn r16761) -Codechange: make UpdateViewportSignPos(ition) a class function of ViewportSign
rubidium <rubidium@openttd.org>
parents:
12122
diff
changeset
|
1188 char buffer[DRAW_STRING_BUFFER]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1189 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1190 GetString(buffer, str, lastof(buffer)); |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1191 this->width_normal = GetStringBoundingBox(buffer).width; |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1192 this->left = center - this->width_normal / 2; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1193 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1194 /* zoomed out version */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1195 _cur_fontsize = FS_SMALL; |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1196 this->width_small = GetStringBoundingBox(buffer).width; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1197 _cur_fontsize = FS_NORMAL; |
12395
c2eb8db929f0
(svn r16825) -Codechange: unify dirtying when updating the viewport signs.
rubidium <rubidium@openttd.org>
parents:
12345
diff
changeset
|
1198 |
c2eb8db929f0
(svn r16825) -Codechange: unify dirtying when updating the viewport signs.
rubidium <rubidium@openttd.org>
parents:
12345
diff
changeset
|
1199 this->MarkDirty(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1200 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1201 |
12344
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1202 /** |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1203 * Mark the sign dirty in all viewports. |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1204 * |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1205 * @ingroup dirty |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1206 */ |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1207 void ViewportSign::MarkDirty() const |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1208 { |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1209 /* We use ZOOM_LVL_MAX here, as every viewport can have an other zoom, |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1210 * and there is no way for us to know which is the biggest. So make the |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1211 * biggest area dirty, and we are safe for sure. */ |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1212 MarkAllViewportsDirty( |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1213 this->left - 6, |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1214 this->top - 3, |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1215 this->left + ScaleByZoom(this->width_normal + 12, ZOOM_LVL_MAX), |
12344
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1216 this->top + ScaleByZoom(12, ZOOM_LVL_MAX)); |
1e953af1fb5f
(svn r16764) -Codechange: unify the way viewport signs are marked dirty
rubidium <rubidium@openttd.org>
parents:
12341
diff
changeset
|
1217 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1218 |
8947
20e58270e32d
(svn r12735) -Codechange: use a vector instead of allocating memory in a byte array for TileSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8946
diff
changeset
|
1219 static void ViewportDrawTileSprites(const TileSpriteToDrawVector *tstdv) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1220 { |
8949
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
1221 const TileSpriteToDraw *tsend = tstdv->End(); |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
1222 for (const TileSpriteToDraw *ts = tstdv->Begin(); ts != tsend; ++ts) { |
12115
6318d41ef9ef
(svn r16528) -Fix [FS#2959]: Draw PBS reservation as groundsprite resp. childsprite of foundation/bridgehead.
frosch <frosch@openttd.org>
parents:
11922
diff
changeset
|
1223 DrawSprite(ts->image, ts->pal, ts->x, ts->y, ts->sub); |
8947
20e58270e32d
(svn r12735) -Codechange: use a vector instead of allocating memory in a byte array for TileSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8946
diff
changeset
|
1224 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1225 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1226 |
10233
63a58f4b2607
(svn r14461) -Document: add some doxygen comments (Albert)
rubidium <rubidium@openttd.org>
parents:
10216
diff
changeset
|
1227 /** Sort parent sprites pointer array */ |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1228 static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1229 { |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1230 ParentSpriteToDraw **psdvend = psdv->End(); |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1231 ParentSpriteToDraw **psd = psdv->Begin(); |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1232 while (psd != psdvend) { |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1233 ParentSpriteToDraw *ps = *psd; |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1234 |
8950
1e8449e9c1ec
(svn r12738) -Fix (r12736): some sprites could be left unsorted
smatz <smatz@openttd.org>
parents:
8949
diff
changeset
|
1235 if (ps->comparison_done) { |
1e8449e9c1ec
(svn r12738) -Fix (r12736): some sprites could be left unsorted
smatz <smatz@openttd.org>
parents:
8949
diff
changeset
|
1236 psd++; |
1e8449e9c1ec
(svn r12738) -Fix (r12736): some sprites could be left unsorted
smatz <smatz@openttd.org>
parents:
8949
diff
changeset
|
1237 continue; |
1e8449e9c1ec
(svn r12738) -Fix (r12736): some sprites could be left unsorted
smatz <smatz@openttd.org>
parents:
8949
diff
changeset
|
1238 } |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1239 |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1240 ps->comparison_done = true; |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1241 |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1242 for (ParentSpriteToDraw **psd2 = psd + 1; psd2 != psdvend; psd2++) { |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1243 ParentSpriteToDraw *ps2 = *psd2; |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1244 |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1245 if (ps2->comparison_done) continue; |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1246 |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1247 /* Decide which comparator to use, based on whether the bounding |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1248 * boxes overlap |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1249 */ |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1250 if (ps->xmax >= ps2->xmin && ps->xmin <= ps2->xmax && // overlap in X? |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1251 ps->ymax >= ps2->ymin && ps->ymin <= ps2->ymax && // overlap in Y? |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1252 ps->zmax >= ps2->zmin && ps->zmin <= ps2->zmax) { // overlap in Z? |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1253 /* Use X+Y+Z as the sorting order, so sprites closer to the bottom of |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1254 * the screen and with higher Z elevation, are drawn in front. |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1255 * Here X,Y,Z are the coordinates of the "center of mass" of the sprite, |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1256 * i.e. X=(left+right)/2, etc. |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1257 * However, since we only care about order, don't actually divide / 2 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1258 */ |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1259 if (ps->xmin + ps->xmax + ps->ymin + ps->ymax + ps->zmin + ps->zmax <= |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1260 ps2->xmin + ps2->xmax + ps2->ymin + ps2->ymax + ps2->zmin + ps2->zmax) { |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1261 continue; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1262 } |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1263 } else { |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1264 /* We only change the order, if it is definite. |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1265 * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap. |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1266 * That is: If one partial order says ps behind ps2, do not change the order. |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1267 */ |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1268 if (ps->xmax < ps2->xmin || |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1269 ps->ymax < ps2->ymin || |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1270 ps->zmax < ps2->zmin) { |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1271 continue; |
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1272 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1273 } |
8948
6b08c7cd7921
(svn r12736) -Codechange: a (small) touch of coding style in viewport.cpp.
rubidium <rubidium@openttd.org>
parents:
8947
diff
changeset
|
1274 |
10196
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1275 /* Move ps2 in front of ps */ |
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1276 ParentSpriteToDraw *temp = ps2; |
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1277 for (ParentSpriteToDraw **psd3 = psd2; psd3 > psd; psd3--) { |
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1278 *psd3 = *(psd3 - 1); |
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1279 } |
d44af18ae6c7
(svn r14409) -Codechange: Simplify a loop and correct a comment.
frosch <frosch@openttd.org>
parents:
10056
diff
changeset
|
1280 *psd = temp; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1281 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1282 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1283 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1284 |
8952
2a7a810979e0
(svn r12740) -Codechange: use a vector instead of allocating memory in a byte array for ChildScreenSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8951
diff
changeset
|
1285 static void ViewportDrawParentSprites(const ParentSpriteToSortVector *psd, const ChildScreenSpriteToDrawVector *csstdv) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1286 { |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1287 const ParentSpriteToDraw * const *psd_end = psd->End(); |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1288 for (const ParentSpriteToDraw * const *it = psd->Begin(); it != psd_end; it++) { |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1289 const ParentSpriteToDraw *ps = *it; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
1290 if (ps->image != SPR_EMPTY_BOUNDING_BOX) DrawSprite(ps->image, ps->pal, ps->x, ps->y, ps->sub); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1291 |
9534
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
1292 int child_idx = ps->first_child; |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
1293 while (child_idx >= 0) { |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
1294 const ChildScreenSpriteToDraw *cs = csstdv->Get(child_idx); |
564d5fd5a247
(svn r13538) -Fix (r12740)[FS#2087]: ChildSprites of foundations are not necessarily consecutive.
frosch <frosch@openttd.org>
parents:
9510
diff
changeset
|
1295 child_idx = cs->next; |
7681
7ab16079f91b
(svn r11212) -Codechange: add support for drawing parts of sprites. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7679
diff
changeset
|
1296 DrawSprite(cs->image, cs->pal, ps->left + cs->x, ps->top + cs->y, cs->sub); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1297 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1298 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1299 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1300 |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1301 /** |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1302 * Draws the bounding boxes of all ParentSprites |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1303 * @param psd Array of ParentSprites |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1304 */ |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1305 static void ViewportDrawBoundingBoxes(const ParentSpriteToSortVector *psd) |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1306 { |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1307 const ParentSpriteToDraw * const *psd_end = psd->End(); |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1308 for (const ParentSpriteToDraw * const *it = psd->Begin(); it != psd_end; it++) { |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1309 const ParentSpriteToDraw *ps = *it; |
7643
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1310 Point pt1 = RemapCoords(ps->xmax + 1, ps->ymax + 1, ps->zmax + 1); // top front corner |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1311 Point pt2 = RemapCoords(ps->xmin , ps->ymax + 1, ps->zmax + 1); // top left corner |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1312 Point pt3 = RemapCoords(ps->xmax + 1, ps->ymin , ps->zmax + 1); // top right corner |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1313 Point pt4 = RemapCoords(ps->xmax + 1, ps->ymax + 1, ps->zmin ); // bottom front corner |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1314 |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1315 DrawBox( pt1.x, pt1.y, |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1316 pt2.x - pt1.x, pt2.y - pt1.y, |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1317 pt3.x - pt1.x, pt3.y - pt1.y, |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1318 pt4.x - pt1.x, pt4.y - pt1.y); |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1319 } |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1320 } |
5dadd473fda6
(svn r11174) -Codechange: add possibility to show the bounding boxes of sprites using CTRL-B so one can get a better understanding of the used bounding boxes to fix the glitches that still exist. Patch by frosch.
rubidium <rubidium@openttd.org>
parents:
7617
diff
changeset
|
1321 |
8946
402107c0562f
(svn r12734) -Codechange: use a vector instead of allocating memory in a big byte array for StringSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8925
diff
changeset
|
1322 static void ViewportDrawStrings(DrawPixelInfo *dpi, const StringSpriteToDrawVector *sstdv) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1323 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1324 DrawPixelInfo dp; |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1325 ZoomLevel zoom; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1326 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1327 _cur_dpi = &dp; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1328 dp = *dpi; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1329 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1330 zoom = dp.zoom; |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1331 dp.zoom = ZOOM_LVL_NORMAL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1332 |
6654
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
1333 dp.left = UnScaleByZoom(dp.left, zoom); |
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
1334 dp.top = UnScaleByZoom(dp.top, zoom); |
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
1335 dp.width = UnScaleByZoom(dp.width, zoom); |
860f3e5f70ec
(svn r9885) -Fix r9846: some last bitshifts with zoom-levels that were forgotten
truelight <truelight@openttd.org>
parents:
6653
diff
changeset
|
1336 dp.height = UnScaleByZoom(dp.height, zoom); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1337 |
8949
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
1338 const StringSpriteToDraw *ssend = sstdv->End(); |
36b54e6eec1e
(svn r12737) -Codechange: Replace vector with a cut down class to allocate space as necessary. This avoids copying data around for vector's push_back() function.
peter1138 <peter1138@openttd.org>
parents:
8948
diff
changeset
|
1339 for (const StringSpriteToDraw *ss = sstdv->Begin(); ss != ssend; ++ss) { |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1340 TextColour colour = TC_BLACK; |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1341 bool small = HasBit(ss->width, 15); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1342 int w = GB(ss->width, 0, 15); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1343 int x = UnScaleByZoom(ss->x, zoom); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1344 int y = UnScaleByZoom(ss->y, zoom); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1345 int bottom = y + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1346 |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1347 SetDParam(0, ss->params[0]); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1348 SetDParam(1, ss->params[1]); |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1349 |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1350 if (w != 0) { |
8806
104bbcae351d
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents:
8798
diff
changeset
|
1351 /* Do not draw signs nor station names if they are set invisible */ |
12632
e41943276802
(svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
rubidium <rubidium@openttd.org>
parents:
12546
diff
changeset
|
1352 if (IsInvisibilitySet(TO_SIGNS) && ss->string != STR_WHITE_SIGN) continue; |
8806
104bbcae351d
(svn r12547) -Feature: invisibility options to make objects invisible instead of transparent
smatz <smatz@openttd.org>
parents:
8798
diff
changeset
|
1353 |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1354 /* if we didn't draw a rectangle, or if transparant building is on, |
13454
24547db62b5c
(svn r17963) -Codechange: some documentation style
rubidium <rubidium@openttd.org>
parents:
13186
diff
changeset
|
1355 * draw the text in the colour the rectangle would have */ |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1356 if (IsTransparencySet(TO_SIGNS) && ss->string != STR_WHITE_SIGN) { |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1357 /* Real colours need the IS_PALETTE_COLOUR flag |
13454
24547db62b5c
(svn r17963) -Codechange: some documentation style
rubidium <rubidium@openttd.org>
parents:
13186
diff
changeset
|
1358 * otherwise colours from _string_colourmap are assumed. */ |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1359 colour = (TextColour)_colour_gradient[ss->colour][6] | IS_PALETTE_COLOUR; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1360 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1361 |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1362 /* Draw the rectangle if 'tranparent station signs' is off, |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1363 * or if we are drawing a general text sign (STR_WHITE_SIGN) */ |
12632
e41943276802
(svn r17075) -Codechange: rename ~750 strings to be more uniform with their relatives
rubidium <rubidium@openttd.org>
parents:
12546
diff
changeset
|
1364 if (!IsTransparencySet(TO_SIGNS) || ss->string == STR_WHITE_SIGN) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1365 DrawFrameRect( |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1366 x - 1, y - 1, x + 1 + w, bottom, (Colours)ss->colour, |
7849
e6ee8bfd9045
(svn r11399) -Feature(ette): transparency settings can now be saved and thus remembered.
belugas <belugas@openttd.org>
parents:
7824
diff
changeset
|
1367 IsTransparencySet(TO_SIGNS) ? FR_TRANSPARENT : FR_NONE |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1368 ); |
6427
2437ed7b277c
(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 <peter1138@openttd.org>
parents:
6423
diff
changeset
|
1369 } |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1370 |
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1371 if (small) y -= 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1372 } else { |
11466
e3ea1ff8eb75
(svn r15824) -Fix: determine the actual length of the strings to draw in the viewport
rubidium <rubidium@openttd.org>
parents:
11446
diff
changeset
|
1373 char buffer[DRAW_STRING_BUFFER]; |
e3ea1ff8eb75
(svn r15824) -Fix: determine the actual length of the strings to draw in the viewport
rubidium <rubidium@openttd.org>
parents:
11446
diff
changeset
|
1374 GetString(buffer, ss->string, lastof(buffer)); |
e3ea1ff8eb75
(svn r15824) -Fix: determine the actual length of the strings to draw in the viewport
rubidium <rubidium@openttd.org>
parents:
11446
diff
changeset
|
1375 w = GetStringBoundingBox(buffer).width; |
e3ea1ff8eb75
(svn r15824) -Fix: determine the actual length of the strings to draw in the viewport
rubidium <rubidium@openttd.org>
parents:
11446
diff
changeset
|
1376 } |
11446
188e18645591
(svn r15804) -Fix (r15796): viewport strings weren't properly 'rendered'.
rubidium <rubidium@openttd.org>
parents:
11375
diff
changeset
|
1377 |
13012
fbc1bbc180f9
(svn r17506) -Fix [FS#3191]: signs partly drawn out of the rectangle in 4/8x zoom out.
rubidium <rubidium@openttd.org>
parents:
12778
diff
changeset
|
1378 DrawString(x, x + w - 1, y, ss->string, colour, SA_CENTER); |
8947
20e58270e32d
(svn r12735) -Codechange: use a vector instead of allocating memory in a byte array for TileSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8946
diff
changeset
|
1379 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1380 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1381 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1382 void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1383 { |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1384 DrawPixelInfo *old_dpi = _cur_dpi; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1385 _cur_dpi = &_vd.dpi; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1386 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1387 _vd.dpi.zoom = vp->zoom; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1388 int mask = ScaleByZoom(-1, vp->zoom); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1389 |
12546
53d056f3a161
(svn r16984) -Codechange: Document and assertify (Start|End)SpriteCombine.
frosch <frosch@openttd.org>
parents:
12523
diff
changeset
|
1390 _vd.combine_sprites = SPRITE_COMBINE_NONE; |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1391 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1392 _vd.dpi.width = (right - left) & mask; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1393 _vd.dpi.height = (bottom - top) & mask; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1394 _vd.dpi.left = left & mask; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1395 _vd.dpi.top = top & mask; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1396 _vd.dpi.pitch = old_dpi->pitch; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1397 _vd.last_child = NULL; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1398 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1399 int x = UnScaleByZoom(_vd.dpi.left - (vp->virtual_left & mask), vp->zoom) + vp->left; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1400 int y = UnScaleByZoom(_vd.dpi.top - (vp->virtual_top & mask), vp->zoom) + vp->top; |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1401 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1402 _vd.dpi.dst_ptr = BlitterFactoryBase::GetCurrentBlitter()->MoveTo(old_dpi->dst_ptr, x - old_dpi->left, y - old_dpi->top); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1403 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1404 ViewportAddLandscape(); |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1405 ViewportAddVehicles(&_vd.dpi); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1406 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1407 ViewportAddTownNames(&_vd.dpi); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1408 ViewportAddStationNames(&_vd.dpi); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1409 ViewportAddSigns(&_vd.dpi); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1410 |
9847
cc5c11ce4280
(svn r13991) -Codechange: draw text effects after all other signs
smatz <smatz@openttd.org>
parents:
9781
diff
changeset
|
1411 DrawTextEffects(&_vd.dpi); |
cc5c11ce4280
(svn r13991) -Codechange: draw text effects after all other signs
smatz <smatz@openttd.org>
parents:
9781
diff
changeset
|
1412 |
9553
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1413 if (_vd.tile_sprites_to_draw.Length() != 0) ViewportDrawTileSprites(&_vd.tile_sprites_to_draw); |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1414 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1415 ParentSpriteToDraw *psd_end = _vd.parent_sprites_to_draw.End(); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1416 for (ParentSpriteToDraw *it = _vd.parent_sprites_to_draw.Begin(); it != psd_end; it++) { |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1417 *_vd.parent_sprites_to_sort.Append() = it; |
8951
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1418 } |
231bd4dd1f98
(svn r12739) -Codechange: use a vector instead of allocating memory in a byte array for ParentSpriteToDraw.
rubidium <rubidium@openttd.org>
parents:
8950
diff
changeset
|
1419 |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1420 ViewportSortParentSprites(&_vd.parent_sprites_to_sort); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1421 ViewportDrawParentSprites(&_vd.parent_sprites_to_sort, &_vd.child_screen_sprites_to_draw); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1422 |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1423 if (_draw_bounding_boxes) ViewportDrawBoundingBoxes(&_vd.parent_sprites_to_sort); |
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1424 |
9553
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1425 if (_vd.string_sprites_to_draw.Length() != 0) ViewportDrawStrings(&_vd.dpi, &_vd.string_sprites_to_draw); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1426 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1427 _cur_dpi = old_dpi; |
8953
0f3c6c845c6f
(svn r12741) -Codechange: do not allocate the viewport drawer each time on the stack, but only once and reuse this.
rubidium <rubidium@openttd.org>
parents:
8952
diff
changeset
|
1428 |
9553
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1429 _vd.string_sprites_to_draw.Clear(); |
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1430 _vd.tile_sprites_to_draw.Clear(); |
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1431 _vd.parent_sprites_to_draw.Clear(); |
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1432 _vd.parent_sprites_to_sort.Clear(); |
0069339d03bf
(svn r13573) -Codechange: Use smallvec class functions instead of class members
skidd13 <skidd13@openttd.org>
parents:
9534
diff
changeset
|
1433 _vd.child_screen_sprites_to_draw.Clear(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1434 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1435 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
1436 /** Make sure we don't draw a too big area at a time. |
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
1437 * If we do, the sprite memory will overflow. */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1438 static void ViewportDrawChk(const ViewPort *vp, int left, int top, int right, int bottom) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1439 { |
6626
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
1440 if (ScaleByZoom(bottom - top, vp->zoom) * ScaleByZoom(right - left, vp->zoom) > 180000) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1441 if ((bottom - top) > (right - left)) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1442 int t = (top + bottom) >> 1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1443 ViewportDrawChk(vp, left, top, right, t); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1444 ViewportDrawChk(vp, left, t, right, bottom); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1445 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1446 int t = (left + right) >> 1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1447 ViewportDrawChk(vp, left, top, t, bottom); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1448 ViewportDrawChk(vp, t, top, right, bottom); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1449 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1450 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1451 ViewportDoDraw(vp, |
6626
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
1452 ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left, |
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
1453 ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top, |
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
1454 ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left, |
f940341a80f0
(svn r9846) -Codechange: introduced ZOOM_LVL_MIN and ZOOM_LVL_MAX for the obvious reasons
truelight <truelight@openttd.org>
parents:
6624
diff
changeset
|
1455 ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1456 ); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1457 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1458 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1459 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1460 static inline void ViewportDraw(const ViewPort *vp, int left, int top, int right, int bottom) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1461 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1462 if (right <= vp->left || bottom <= vp->top) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1463 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1464 if (left >= vp->left + vp->width) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1465 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1466 if (left < vp->left) left = vp->left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1467 if (right > vp->left + vp->width) right = vp->left + vp->width; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1468 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1469 if (top >= vp->top + vp->height) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1470 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1471 if (top < vp->top) top = vp->top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1472 if (bottom > vp->top + vp->height) bottom = vp->top + vp->height; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1473 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1474 ViewportDrawChk(vp, left, top, right, bottom); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1475 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1476 |
10238
12805d675e85
(svn r14466) -Doc: remove some obsolete parameters, fix a few parameter names in comments and add a little more doxygen documentation.
rubidium <rubidium@openttd.org>
parents:
10233
diff
changeset
|
1477 /** |
12805d675e85
(svn r14466) -Doc: remove some obsolete parameters, fix a few parameter names in comments and add a little more doxygen documentation.
rubidium <rubidium@openttd.org>
parents:
10233
diff
changeset
|
1478 * Draw the viewport of this window. |
12805d675e85
(svn r14466) -Doc: remove some obsolete parameters, fix a few parameter names in comments and add a little more doxygen documentation.
rubidium <rubidium@openttd.org>
parents:
10233
diff
changeset
|
1479 */ |
9273
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1480 void Window::DrawViewport() const |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1481 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1482 DrawPixelInfo *dpi = _cur_dpi; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1483 |
9273
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1484 dpi->left += this->left; |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1485 dpi->top += this->top; |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1486 |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1487 ViewportDraw(this->viewport, dpi->left, dpi->top, dpi->left + dpi->width, dpi->top + dpi->height); |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1488 |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1489 dpi->left -= this->left; |
72a6d2e60834
(svn r13139) -Codechange: move DrawWindowWidgets and DrawWindowViewport to the Window class and remove Window from their naming.
rubidium <rubidium@openttd.org>
parents:
9244
diff
changeset
|
1490 dpi->top -= this->top; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1491 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1492 |
7069
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1493 static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y) |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1494 { |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1495 /* Centre of the viewport is hot spot */ |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1496 x += vp->virtual_width / 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1497 y += vp->virtual_height / 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1498 |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1499 /* Convert viewport coordinates to map coordinates |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1500 * Calculation is scaled by 4 to avoid rounding errors */ |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1501 int vx = -x + y * 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1502 int vy = x + y * 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1503 |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1504 /* clamp to size of map */ |
7922
ff1975ced735
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13 <skidd13@openttd.org>
parents:
7918
diff
changeset
|
1505 vx = Clamp(vx, 0, MapMaxX() * TILE_SIZE * 4); |
ff1975ced735
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13 <skidd13@openttd.org>
parents:
7918
diff
changeset
|
1506 vy = Clamp(vy, 0, MapMaxY() * TILE_SIZE * 4); |
7069
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1507 |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1508 /* Convert map coordinates to viewport coordinates */ |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1509 x = (-vx + vy) / 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1510 y = ( vx + vy) / 4; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1511 |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1512 /* Remove centreing */ |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1513 x -= vp->virtual_width / 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1514 y -= vp->virtual_height / 2; |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1515 } |
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1516 |
12523
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1517 /** |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1518 * Update the viewport position being displayed. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1519 * @param w %Window owning the viewport. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1520 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1521 void UpdateViewportPosition(Window *w) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1522 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1523 const ViewPort *vp = w->viewport; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1524 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1525 if (w->viewport->follow_vehicle != INVALID_VEHICLE) { |
11922
0a4b63f3f3c3
(svn r16325) -Codechange: replace GetPoolItem(index) by PoolItem::Get(index)
smatz <smatz@openttd.org>
parents:
11765
diff
changeset
|
1526 const Vehicle *veh = Vehicle::Get(w->viewport->follow_vehicle); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1527 Point pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1528 |
10645
d20b89e45634
(svn r14947) -Fix [FS#2519]: vehicle following did not update the location from where to smooth scroll, thus any new viewport center would smooth scroll from the location where you were just before you started following the vehicle
rubidium <rubidium@openttd.org>
parents:
10642
diff
changeset
|
1529 w->viewport->scrollpos_x = pt.x; |
d20b89e45634
(svn r14947) -Fix [FS#2519]: vehicle following did not update the location from where to smooth scroll, thus any new viewport center would smooth scroll from the location where you were just before you started following the vehicle
rubidium <rubidium@openttd.org>
parents:
10642
diff
changeset
|
1530 w->viewport->scrollpos_y = pt.y; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1531 SetViewportPosition(w, pt.x, pt.y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1532 } else { |
7069
6de5150e902f
(svn r10334) -Fix [FS#937]: with smooth scrolling enabled, the viewport destination was not clamped to the map
peter1138 <peter1138@openttd.org>
parents:
7056
diff
changeset
|
1533 /* Ensure the destination location is within the map */ |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1534 ClampViewportToMap(vp, w->viewport->dest_scrollpos_x, w->viewport->dest_scrollpos_y); |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1535 |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1536 int delta_x = w->viewport->dest_scrollpos_x - w->viewport->scrollpos_x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1537 int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y; |
6730
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
1538 |
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
1539 if (delta_x != 0 || delta_y != 0) { |
9413
512ea64da840
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents:
9410
diff
changeset
|
1540 if (_settings_client.gui.smooth_scroll) { |
6731
5b13b47b071c
(svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138 <peter1138@openttd.org>
parents:
6730
diff
changeset
|
1541 int max_scroll = ScaleByMapSize1D(512); |
5b13b47b071c
(svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138 <peter1138@openttd.org>
parents:
6730
diff
changeset
|
1542 /* Not at our desired positon yet... */ |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1543 w->viewport->scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll); |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1544 w->viewport->scrollpos_y += Clamp(delta_y / 4, -max_scroll, max_scroll); |
6731
5b13b47b071c
(svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138 <peter1138@openttd.org>
parents:
6730
diff
changeset
|
1545 } else { |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1546 w->viewport->scrollpos_x = w->viewport->dest_scrollpos_x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1547 w->viewport->scrollpos_y = w->viewport->dest_scrollpos_y; |
6731
5b13b47b071c
(svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138 <peter1138@openttd.org>
parents:
6730
diff
changeset
|
1548 } |
6730
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
1549 } |
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
1550 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1551 ClampViewportToMap(vp, w->viewport->scrollpos_x, w->viewport->scrollpos_y); |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1552 |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1553 SetViewportPosition(w, w->viewport->scrollpos_x, w->viewport->scrollpos_y); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1554 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1555 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1556 |
7545
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1557 /** |
8992
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1558 * Marks a viewport as dirty for repaint if it displays (a part of) the area the needs to be repainted. |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1559 * @param vp The viewport to mark as dirty |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1560 * @param left Left edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1561 * @param top Top edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1562 * @param right Right edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1563 * @param bottom Bottom edge of area to repaint |
7545
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1564 * @ingroup dirty |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1565 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1566 static void MarkViewportDirty(const ViewPort *vp, int left, int top, int right, int bottom) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1567 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1568 right -= vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1569 if (right <= 0) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1570 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1571 bottom -= vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1572 if (bottom <= 0) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1573 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1574 left = max(0, left - vp->virtual_left); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1575 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1576 if (left >= vp->virtual_width) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1577 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1578 top = max(0, top - vp->virtual_top); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1579 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1580 if (top >= vp->virtual_height) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1581 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1582 SetDirtyBlocks( |
10549
dd9cc2c7c5be
(svn r14806) -Fix: MarkAllViewportsDirty() didn't mark dirty whole area when zoomed out, visible by aircraft leaving trails sometimes
smatz <smatz@openttd.org>
parents:
10532
diff
changeset
|
1583 UnScaleByZoomLower(left, vp->zoom) + vp->left, |
dd9cc2c7c5be
(svn r14806) -Fix: MarkAllViewportsDirty() didn't mark dirty whole area when zoomed out, visible by aircraft leaving trails sometimes
smatz <smatz@openttd.org>
parents:
10532
diff
changeset
|
1584 UnScaleByZoomLower(top, vp->zoom) + vp->top, |
dd9cc2c7c5be
(svn r14806) -Fix: MarkAllViewportsDirty() didn't mark dirty whole area when zoomed out, visible by aircraft leaving trails sometimes
smatz <smatz@openttd.org>
parents:
10532
diff
changeset
|
1585 UnScaleByZoom(right, vp->zoom) + vp->left + 1, |
dd9cc2c7c5be
(svn r14806) -Fix: MarkAllViewportsDirty() didn't mark dirty whole area when zoomed out, visible by aircraft leaving trails sometimes
smatz <smatz@openttd.org>
parents:
10532
diff
changeset
|
1586 UnScaleByZoom(bottom, vp->zoom) + vp->top + 1 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1587 ); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1588 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1589 |
8992
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1590 /** |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1591 * Mark all viewports that display an area as dirty (in need of repaint). |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1592 * @param left Left edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1593 * @param top Top edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1594 * @param right Right edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1595 * @param bottom Bottom edge of area to repaint |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1596 * @ingroup dirty |
c0e03990caf0
(svn r12787) -Documentation: add/fix documentation of some functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
8979
diff
changeset
|
1597 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1598 void MarkAllViewportsDirty(int left, int top, int right, int bottom) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1599 { |
10597
b9297d5178c0
(svn r14880) -Codechange: make it clear which way the FOR_ALL_WINDOWS goes (from back to front or vice versa) and make it iterate over the Window* instead of Window**.
rubidium <rubidium@openttd.org>
parents:
10571
diff
changeset
|
1600 Window *w; |
b9297d5178c0
(svn r14880) -Codechange: make it clear which way the FOR_ALL_WINDOWS goes (from back to front or vice versa) and make it iterate over the Window* instead of Window**.
rubidium <rubidium@openttd.org>
parents:
10571
diff
changeset
|
1601 FOR_ALL_WINDOWS_FROM_BACK(w) { |
b9297d5178c0
(svn r14880) -Codechange: make it clear which way the FOR_ALL_WINDOWS goes (from back to front or vice versa) and make it iterate over the Window* instead of Window**.
rubidium <rubidium@openttd.org>
parents:
10571
diff
changeset
|
1602 ViewPort *vp = w->viewport; |
8957
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
1603 if (vp != NULL) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1604 assert(vp->width != 0); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1605 MarkViewportDirty(vp, left, top, right, bottom); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1606 } |
8957
484f482e54fa
(svn r12749) -Codechange: store the viewport information in the windows that have a viewport instead of one global array with a viewport for each window, even when they do not use the viewport.
rubidium <rubidium@openttd.org>
parents:
8953
diff
changeset
|
1607 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1608 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1609 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1610 void MarkTileDirtyByTile(TileIndex tile) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1611 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1612 Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, GetTileZ(tile)); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1613 MarkAllViewportsDirty( |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1614 pt.x - 31, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1615 pt.y - 122, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1616 pt.x - 31 + 67, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1617 pt.y - 122 + 154 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1618 ); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1619 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1620 |
7545
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1621 /** |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1622 * Marks the selected tiles as dirty. |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1623 * |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1624 * This function marks the selected tiles as dirty for repaint |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1625 * |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1626 * @ingroup dirty |
a84d70ad7876
(svn r11065) -Documentation [FS#1186]: of the dirty marking/repainting subsystem. Patch by Progman.
rubidium <rubidium@openttd.org>
parents:
7497
diff
changeset
|
1627 */ |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
1628 static void SetSelectionTilesDirty() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1629 { |
11756
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1630 int x_start = _thd.pos.x; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1631 int y_start = _thd.pos.y; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1632 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1633 int x_size = _thd.size.x; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1634 int y_size = _thd.size.y; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1635 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1636 if (_thd.outersize.x != 0) { |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1637 x_size += _thd.outersize.x; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1638 x_start += _thd.offs.x; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1639 y_size += _thd.outersize.y; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1640 y_start += _thd.offs.y; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1641 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1642 |
11756
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1643 x_size -= TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1644 y_size -= TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1645 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1646 assert(x_size >= 0); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1647 assert(y_size >= 0); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1648 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1649 int x_end = Clamp(x_start + x_size, 0, MapSizeX() * TILE_SIZE - TILE_SIZE); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1650 int y_end = Clamp(y_start + y_size, 0, MapSizeY() * TILE_SIZE - TILE_SIZE); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1651 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1652 x_start = Clamp(x_start, 0, MapSizeX() * TILE_SIZE - TILE_SIZE); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1653 y_start = Clamp(y_start, 0, MapSizeY() * TILE_SIZE - TILE_SIZE); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1654 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1655 /* make sure everything is multiple of TILE_SIZE */ |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1656 assert((x_end | y_end | x_start | y_start) % TILE_SIZE == 0); |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1657 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1658 /* How it works: |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1659 * Suppose we have to mark dirty rectangle of 3x4 tiles: |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1660 * x |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1661 * xxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1662 * xxxxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1663 * xxxxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1664 * xxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1665 * x |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1666 * This algorithm marks dirty columns of tiles, so it is done in 3+4-1 steps: |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1667 * 1) x 2) x |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1668 * xxx Oxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1669 * Oxxxx xOxxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1670 * xxxxx Oxxxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1671 * xxx xxx |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1672 * x x |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1673 * And so forth... |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1674 */ |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1675 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1676 int top_x = x_end; // coordinates of top dirty tile |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1677 int top_y = y_start; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1678 int bot_x = top_x; // coordinates of bottom dirty tile |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1679 int bot_y = top_y; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1680 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1681 do { |
11756
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1682 Point top = RemapCoords2(top_x, top_y); // topmost dirty point |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1683 Point bot = RemapCoords2(bot_x + TILE_SIZE - 1, bot_y + TILE_SIZE - 1); // bottommost point |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1684 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1685 /* the 'x' coordinate of 'top' and 'bot' is the same (and always in the same distance from tile middle), |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1686 * tile height/slope affects only the 'y' on-screen coordinate! */ |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1687 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1688 int l = top.x - (TILE_PIXELS - 2); // 'x' coordinate of left side of dirty rectangle |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1689 int t = top.y; // 'y' coordinate of top side -//- |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1690 int r = top.x + (TILE_PIXELS - 2); // right side of dirty rectangle |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1691 int b = bot.y; // bottom -//- |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1692 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1693 static const int OVERLAY_WIDTH = 4; // part of selection sprites is drawn outside the selected area |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1694 |
12122
d530190c9171
(svn r16536) -Fix (r16535): W != S
frosch <frosch@openttd.org>
parents:
12121
diff
changeset
|
1695 /* For halftile foundations on SLOPE_STEEP_S the sprite extents some more towards the top */ |
12121
da26b364cc6a
(svn r16535) -Fix (r16146): In one case a too small portion of the screen was marked dirty, when (un-)drawing selections.
frosch <frosch@openttd.org>
parents:
12115
diff
changeset
|
1696 MarkAllViewportsDirty(l - OVERLAY_WIDTH, t - OVERLAY_WIDTH - TILE_HEIGHT, r + OVERLAY_WIDTH, b + OVERLAY_WIDTH); |
11756
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1697 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1698 /* haven't we reached the topmost tile yet? */ |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1699 if (top_x != x_start) { |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1700 top_x -= TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1701 } else { |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1702 top_y += TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1703 } |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1704 |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1705 /* the way the bottom tile changes is different when we reach the bottommost tile */ |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1706 if (bot_y != y_end) { |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1707 bot_y += TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1708 } else { |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1709 bot_x -= TILE_SIZE; |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1710 } |
49713788741d
(svn r16146) -Codechange: use faster algorithm in SetSelectionTilesDirty(). Up to 1000 times faster when large area is selected
smatz <smatz@openttd.org>
parents:
11746
diff
changeset
|
1711 } while (bot_x >= top_x); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1712 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1713 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1714 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1715 void SetSelectionRed(bool b) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1716 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1717 _thd.make_square_red = b; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1718 SetSelectionTilesDirty(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1719 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1720 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1721 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1722 static bool CheckClickOnTown(const ViewPort *vp, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1723 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1724 const Town *t; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1725 |
7928
4e8dfd103163
(svn r11481) -Codechange: Rename the HASBIT function to fit with the naming style
skidd13 <skidd13@openttd.org>
parents:
7923
diff
changeset
|
1726 if (!HasBit(_display_opt, DO_SHOW_TOWN_NAMES)) return false; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1727 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1728 switch (vp->zoom) { |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1729 case ZOOM_LVL_NORMAL: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1730 x = x - vp->left + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1731 y = y - vp->top + vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1732 FOR_ALL_TOWNS(t) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1733 if (y >= t->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1734 y < t->sign.top + 12 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1735 x >= t->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1736 x < t->sign.left + t->sign.width_normal) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1737 ShowTownViewWindow(t->index); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1738 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1739 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1740 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1741 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1742 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1743 case ZOOM_LVL_OUT_2X: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1744 x = (x - vp->left + 1) * 2 + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1745 y = (y - vp->top + 1) * 2 + vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1746 FOR_ALL_TOWNS(t) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1747 if (y >= t->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1748 y < t->sign.top + 24 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1749 x >= t->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1750 x < t->sign.left + t->sign.width_normal * 2) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1751 ShowTownViewWindow(t->index); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1752 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1753 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1754 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1755 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1756 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1757 case ZOOM_LVL_OUT_4X: |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1758 case ZOOM_LVL_OUT_8X: |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1759 x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1760 y = ScaleByZoom(y - vp->top + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1761 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1762 FOR_ALL_TOWNS(t) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1763 if (y >= t->sign.top && |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1764 y < t->sign.top + ScaleByZoom(12, vp->zoom) && |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1765 x >= t->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1766 x < t->sign.left + ScaleByZoom(t->sign.width_small, vp->zoom)) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1767 ShowTownViewWindow(t->index); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1768 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1769 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1770 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1771 break; |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1772 |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1773 default: NOT_REACHED(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1774 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1775 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1776 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1777 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1778 |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1779 static bool ClickOnStation(const BaseStation *st) |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1780 { |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1781 /* Check whether the base station is a station or a waypoint */ |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1782 bool is_station = Station::IsExpected(st); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1783 |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1784 /* Don't draw if the display options are disabled */ |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1785 if (!HasBit(_display_opt, is_station ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES)) return false; |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1786 |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1787 if (is_station) { |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1788 ShowStationViewWindow(st->index); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1789 } else { |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1790 ShowWaypointWindow(Waypoint::From(st)); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1791 } |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1792 return true; |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1793 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1794 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1795 static bool CheckClickOnStation(const ViewPort *vp, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1796 { |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1797 if (!(HasBit(_display_opt, DO_SHOW_STATION_NAMES) || HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)) || IsInvisibilitySet(TO_SIGNS)) { |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1798 return false; |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1799 } |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1800 |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1801 const BaseStation *st; |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1802 bool ret = false; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1803 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1804 switch (vp->zoom) { |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1805 case ZOOM_LVL_NORMAL: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1806 x = x - vp->left + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1807 y = y - vp->top + vp->virtual_top; |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1808 FOR_ALL_BASE_STATIONS(st) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1809 if (y >= st->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1810 y < st->sign.top + 12 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1811 x >= st->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1812 x < st->sign.left + st->sign.width_normal) { |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1813 ret = ClickOnStation(st); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1814 if (ret) break; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1815 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1816 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1817 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1818 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1819 case ZOOM_LVL_OUT_2X: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1820 x = (x - vp->left + 1) * 2 + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1821 y = (y - vp->top + 1) * 2 + vp->virtual_top; |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1822 FOR_ALL_BASE_STATIONS(st) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1823 if (y >= st->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1824 y < st->sign.top + 24 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1825 x >= st->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1826 x < st->sign.left + st->sign.width_normal * 2) { |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1827 ret = ClickOnStation(st); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1828 if (ret) break; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1829 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1830 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1831 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1832 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1833 case ZOOM_LVL_OUT_4X: |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1834 case ZOOM_LVL_OUT_8X: |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1835 x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1836 y = ScaleByZoom(y - vp->top + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1837 |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1838 FOR_ALL_BASE_STATIONS(st) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1839 if (y >= st->sign.top && |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1840 y < st->sign.top + ScaleByZoom(12, vp->zoom) && |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1841 x >= st->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1842 x < st->sign.left + ScaleByZoom(st->sign.width_small, vp->zoom)) { |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1843 ret = ClickOnStation(st); |
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1844 if (ret) break; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1845 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1846 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1847 break; |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1848 |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1849 default: NOT_REACHED(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1850 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1851 |
12513
7f4fa8992bbc
(svn r16950) -Codechange: unduplicate waypoint + station sign drawing
rubidium <rubidium@openttd.org>
parents:
12512
diff
changeset
|
1852 return ret; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1853 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1854 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1855 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1856 static bool CheckClickOnSign(const ViewPort *vp, int x, int y) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1857 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1858 const Sign *si; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1859 |
10207
c54d140df948
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents:
10196
diff
changeset
|
1860 /* Signs are turned off, or they are transparent and invisibility is ON, or company is a spectator */ |
c54d140df948
(svn r14421) -Codechange: rename all player variables/types to company *or* client so it is immediatelly clear which one you are working with.
rubidium <rubidium@openttd.org>
parents:
10196
diff
changeset
|
1861 if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS) || _current_company == COMPANY_SPECTATOR) return false; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1862 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1863 switch (vp->zoom) { |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1864 case ZOOM_LVL_NORMAL: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1865 x = x - vp->left + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1866 y = y - vp->top + vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1867 FOR_ALL_SIGNS(si) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1868 if (y >= si->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1869 y < si->sign.top + 12 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1870 x >= si->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1871 x < si->sign.left + si->sign.width_normal) { |
9510
e5653305882a
(svn r13501) -Feature(tte): ctrl+click on sign you own to remove it (Osai, planetmaker)
smatz <smatz@openttd.org>
parents:
9413
diff
changeset
|
1872 HandleClickOnSign(si); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1873 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1874 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1875 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1876 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1877 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1878 case ZOOM_LVL_OUT_2X: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1879 x = (x - vp->left + 1) * 2 + vp->virtual_left; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1880 y = (y - vp->top + 1) * 2 + vp->virtual_top; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1881 FOR_ALL_SIGNS(si) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1882 if (y >= si->sign.top && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1883 y < si->sign.top + 24 && |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1884 x >= si->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1885 x < si->sign.left + si->sign.width_normal * 2) { |
9510
e5653305882a
(svn r13501) -Feature(tte): ctrl+click on sign you own to remove it (Osai, planetmaker)
smatz <smatz@openttd.org>
parents:
9413
diff
changeset
|
1886 HandleClickOnSign(si); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1887 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1888 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1889 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1890 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1891 |
6624
bf5d7b24a7ab
(svn r9844) -Codechange: replace zoomlevel with an enum
truelight <truelight@openttd.org>
parents:
6591
diff
changeset
|
1892 case ZOOM_LVL_OUT_4X: |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1893 case ZOOM_LVL_OUT_8X: |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1894 x = ScaleByZoom(x - vp->left + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_left; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1895 y = ScaleByZoom(y - vp->top + ScaleByZoom(1, vp->zoom) - 1, vp->zoom) + vp->virtual_top; |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1896 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1897 FOR_ALL_SIGNS(si) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1898 if (y >= si->sign.top && |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1899 y < si->sign.top + ScaleByZoom(12, vp->zoom) && |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1900 x >= si->sign.left && |
12345
18e28102018f
(svn r16765) -Codechange: give ViewportSign's width_1 and width_2 more self explaining names
rubidium <rubidium@openttd.org>
parents:
12344
diff
changeset
|
1901 x < si->sign.left + ScaleByZoom(si->sign.width_small, vp->zoom)) { |
9510
e5653305882a
(svn r13501) -Feature(tte): ctrl+click on sign you own to remove it (Osai, planetmaker)
smatz <smatz@openttd.org>
parents:
9413
diff
changeset
|
1902 HandleClickOnSign(si); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1903 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1904 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1905 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1906 break; |
6653
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1907 |
cbe12394f776
(svn r9884) -Feature: 2 new zoom-out levels: 8 times and 16 times
truelight <truelight@openttd.org>
parents:
6626
diff
changeset
|
1908 default: NOT_REACHED(); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1909 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1910 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1911 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1912 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1913 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1914 |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1915 static bool CheckClickOnLandscape(const ViewPort *vp, int x, int y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1916 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1917 Point pt = TranslateXYToTileCoord(vp, x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1918 |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1919 if (pt.x != -1) return ClickTile(TileVirtXY(pt.x, pt.y)); |
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1920 return true; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1921 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1922 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1923 |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1924 bool HandleViewportClicked(const ViewPort *vp, int x, int y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1925 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1926 const Vehicle *v; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1927 |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1928 if (CheckClickOnTown(vp, x, y)) return true; |
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1929 if (CheckClickOnStation(vp, x, y)) return true; |
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1930 if (CheckClickOnSign(vp, x, y)) return true; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1931 CheckClickOnLandscape(vp, x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1932 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1933 v = CheckClickOnVehicle(vp, x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1934 if (v != NULL) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1935 DEBUG(misc, 2, "Vehicle %d (index %d) at %p", v->unitnumber, v->index, v); |
10600
2c78f89aa7e9
(svn r14884) -Codechange: simplify code responsible for opening vehicle view windows
smatz <smatz@openttd.org>
parents:
10597
diff
changeset
|
1936 if (IsCompanyBuildableVehicleType(v)) ShowVehicleViewWindow(v->First()); |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1937 return true; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1938 } |
10532
d33755b6159a
(svn r14789) -Feature: allow scrolling with the left mouse button pressed (if enabled). Primarily useful for systems with touch screen (aapo)
rubidium <rubidium@openttd.org>
parents:
10238
diff
changeset
|
1939 return CheckClickOnLandscape(vp, x, y); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1940 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1941 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
1942 Vehicle *CheckMouseOverVehicle() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1943 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1944 const Window *w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1945 const ViewPort *vp; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1946 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1947 int x = _cursor.pos.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1948 int y = _cursor.pos.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1949 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1950 w = FindWindowFromPt(x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1951 if (w == NULL) return NULL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1952 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1953 vp = IsPtInWindowViewport(w, x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1954 return (vp != NULL) ? CheckClickOnVehicle(vp, x, y) : NULL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1955 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1956 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1957 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1958 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
1959 void PlaceObject() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1960 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1961 Point pt; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1962 Window *w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1963 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1964 pt = GetTileBelowCursor(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1965 if (pt.x == -1) return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1966 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
1967 if (_thd.place_mode == HT_POINT) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1968 pt.x += 8; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1969 pt.y += 8; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1970 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1971 |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
1972 _tile_fract_coords.x = pt.x & TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
1973 _tile_fract_coords.y = pt.y & TILE_UNIT_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1974 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1975 w = GetCallbackWnd(); |
9166
45b1388fe9ba
(svn r13029) -Codechange: more work in the road to getting the WP macros and byte[WINDOW_CUSTOM_SIZE] removed. This step changes the event handling to work directly on the Window class instead of via a function pointer and big switches while keeping backward compatability while we're rewriting the Windows to the new scheme.
rubidium <rubidium@openttd.org>
parents:
9147
diff
changeset
|
1976 if (w != NULL) w->OnPlaceObject(pt, TileVirtXY(pt.x, pt.y)); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1977 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1978 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1979 |
12523
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1980 /** Scrolls the viewport in a window to a given location. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1981 * @param x Desired x location of the map to scroll to (world coordinate). |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1982 * @param y Desired y location of the map to scroll to (world coordinate). |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1983 * @param z Desired z location of the map to scroll to (world coordinate). Use \c -1 to scroll to the height of the map at the \a x, \a y location. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1984 * @param w %Window containing the viewport. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1985 * @param instant Jump to the location instead of slowly moving to it. |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1986 * @return Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position). |
499566607266
(svn r16960) -Doc: Added some viewport and vehicle type doxygen strings.
alberth <alberth@openttd.org>
parents:
12513
diff
changeset
|
1987 */ |
11375
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
1988 bool ScrollWindowTo(int x, int y, int z, Window *w, bool instant) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1989 { |
8473
75c79ef760e8
(svn r12044) -Fix [FS#1741]: crash when centering on a vehicle (aircraft) that is outside of the map.
rubidium <rubidium@openttd.org>
parents:
8413
diff
changeset
|
1990 /* The slope cannot be acquired outside of the map, so make sure we are always within the map. */ |
11375
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
1991 if (z == -1) z = GetSlopeZ(Clamp(x, 0, MapSizeX() * TILE_SIZE - 1), Clamp(y, 0, MapSizeY() * TILE_SIZE - 1)); |
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
1992 |
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
1993 Point pt = MapXYZToViewport(w->viewport, x, y, z); |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1994 w->viewport->follow_vehicle = INVALID_VEHICLE; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1995 |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
1996 if (w->viewport->dest_scrollpos_x == pt.x && w->viewport->dest_scrollpos_y == pt.y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1997 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
1998 |
6731
5b13b47b071c
(svn r9963) -Fix (r9962): 'smooth_scroll' patch setting was ignored (always on) in some places.
peter1138 <peter1138@openttd.org>
parents:
6730
diff
changeset
|
1999 if (instant) { |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
2000 w->viewport->scrollpos_x = pt.x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
2001 w->viewport->scrollpos_y = pt.y; |
6730
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
2002 } |
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
2003 |
9184
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
2004 w->viewport->dest_scrollpos_x = pt.x; |
a7020e34c67b
(svn r13047) -Codechange: remove vp_d
glx <glx@openttd.org>
parents:
9166
diff
changeset
|
2005 w->viewport->dest_scrollpos_y = pt.y; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2006 return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2007 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2008 |
6730
0b56358a0e3d
(svn r9962) -Feature: Add smooth viewport scrolling. This must be enabled with patch setting 'smooth_scroll'
peter1138 <peter1138@openttd.org>
parents:
6669
diff
changeset
|
2009 bool ScrollMainWindowToTile(TileIndex tile, bool instant) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2010 { |
11375
1d342902ac94
(svn r15725) -Fix: centering on a vehicle didn't respect its z coordinate
smatz <smatz@openttd.org>
parents:
11368
diff
changeset
|
2011 return ScrollMainWindowTo(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, -1, instant); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2012 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2013 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2014 void SetRedErrorSquare(TileIndex tile) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2015 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2016 TileIndex old; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2017 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2018 old = _thd.redsq; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2019 _thd.redsq = tile; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2020 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2021 if (tile != old) { |
10816
35b3e8e25590
(svn r15151) -Fix: tile 0 can now be highlighted as error tile
Yexo <Yexo@openttd.org>
parents:
10815
diff
changeset
|
2022 if (tile != INVALID_TILE) MarkTileDirtyByTile(tile); |
35b3e8e25590
(svn r15151) -Fix: tile 0 can now be highlighted as error tile
Yexo <Yexo@openttd.org>
parents:
10815
diff
changeset
|
2023 if (old != INVALID_TILE) MarkTileDirtyByTile(old); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2024 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2025 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2026 |
12708
f1e888f0b9e1
(svn r17171) -Doc: Additions and corrections of various doxygen strings.
alberth <alberth@openttd.org>
parents:
12632
diff
changeset
|
2027 /** Highlight \a w by \a h tiles at the cursor. |
f1e888f0b9e1
(svn r17171) -Doc: Additions and corrections of various doxygen strings.
alberth <alberth@openttd.org>
parents:
12632
diff
changeset
|
2028 * @param w Width of the highlighted tiles rectangle. |
f1e888f0b9e1
(svn r17171) -Doc: Additions and corrections of various doxygen strings.
alberth <alberth@openttd.org>
parents:
12632
diff
changeset
|
2029 * @param h Height of the highlighted tiles rectangle. |
f1e888f0b9e1
(svn r17171) -Doc: Additions and corrections of various doxygen strings.
alberth <alberth@openttd.org>
parents:
12632
diff
changeset
|
2030 */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2031 void SetTileSelectSize(int w, int h) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2032 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2033 _thd.new_size.x = w * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2034 _thd.new_size.y = h * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2035 _thd.new_outersize.x = 0; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2036 _thd.new_outersize.y = 0; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2037 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2038 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2039 void SetTileSelectBigSize(int ox, int oy, int sx, int sy) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2040 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2041 _thd.offs.x = ox * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2042 _thd.offs.y = oy * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2043 _thd.new_outersize.x = sx * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2044 _thd.new_outersize.y = sy * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2045 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2046 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2047 /** returns the best autorail highlight type from map coordinates */ |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2048 static HighLightStyle GetAutorailHT(int x, int y) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2049 { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2050 return HT_RAIL | _autorail_piece[x & TILE_UNIT_MASK][y & TILE_UNIT_MASK]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2051 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2052 |
7078
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2053 /** |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2054 * Updates tile highlighting for all cases. |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2055 * Uses _thd.selstart and _thd.selend and _thd.place_mode (set elsewhere) to determine _thd.pos and _thd.size |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2056 * Also drawstyle is determined. Uses _thd.new.* as a buffer and calls SetSelectionTilesDirty() twice, |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2057 * Once for the old and once for the new selection. |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2058 * _thd is TileHighlightData, found in viewport.h |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2059 */ |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
2060 void UpdateTileSelection() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2061 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2062 int x1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2063 int y1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2064 |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2065 _thd.new_drawstyle = HT_NONE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2066 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2067 if (_thd.place_mode == HT_SPECIAL) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2068 x1 = _thd.selend.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2069 y1 = _thd.selend.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2070 if (x1 != -1) { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2071 int x2 = _thd.selstart.x & ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2072 int y2 = _thd.selstart.y & ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2073 x1 &= ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2074 y1 &= ~TILE_UNIT_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2075 |
6106 | 2076 if (x1 >= x2) Swap(x1, x2); |
2077 if (y1 >= y2) Swap(y1, y2); | |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2078 _thd.new_pos.x = x1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2079 _thd.new_pos.y = y1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2080 _thd.new_size.x = x2 - x1 + TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2081 _thd.new_size.y = y2 - y1 + TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2082 _thd.new_drawstyle = _thd.next_drawstyle; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2083 } |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2084 } else if (_thd.place_mode != HT_NONE) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2085 Point pt = GetTileBelowCursor(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2086 x1 = pt.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2087 y1 = pt.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2088 if (x1 != -1) { |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2089 switch (_thd.place_mode & HT_DRAG_MASK) { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2090 case HT_RECT: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2091 _thd.new_drawstyle = HT_RECT; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2092 break; |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2093 case HT_POINT: |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2094 _thd.new_drawstyle = HT_POINT; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2095 x1 += TILE_SIZE / 2; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2096 y1 += TILE_SIZE / 2; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2097 break; |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2098 case HT_RAIL: |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2099 /* Draw one highlighted tile in any direction */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2100 _thd.new_drawstyle = GetAutorailHT(pt.x, pt.y); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2101 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2102 case HT_LINE: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2103 switch (_thd.place_mode & HT_DIR_MASK) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2104 case HT_DIR_X: _thd.new_drawstyle = HT_LINE | HT_DIR_X; break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2105 case HT_DIR_Y: _thd.new_drawstyle = HT_LINE | HT_DIR_Y; break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2106 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2107 case HT_DIR_HU: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2108 case HT_DIR_HL: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2109 _thd.new_drawstyle = (pt.x & TILE_UNIT_MASK) + (pt.y & TILE_UNIT_MASK) <= TILE_SIZE ? HT_LINE | HT_DIR_HU : HT_LINE | HT_DIR_HL; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2110 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2111 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2112 case HT_DIR_VL: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2113 case HT_DIR_VR: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2114 _thd.new_drawstyle = (pt.x & TILE_UNIT_MASK) > (pt.y & TILE_UNIT_MASK) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2115 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2116 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2117 default: NOT_REACHED(); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2118 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2119 _thd.selstart.x = x1 & ~TILE_UNIT_MASK; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2120 _thd.selstart.y = y1 & ~TILE_UNIT_MASK; |
7918
7a122ebfa7cf
(svn r11471) -Codechange: one more variable retyped to enum ViewportHighlightMode
smatz <smatz@openttd.org>
parents:
7912
diff
changeset
|
2121 break; |
7a122ebfa7cf
(svn r11471) -Codechange: one more variable retyped to enum ViewportHighlightMode
smatz <smatz@openttd.org>
parents:
7912
diff
changeset
|
2122 default: |
7a122ebfa7cf
(svn r11471) -Codechange: one more variable retyped to enum ViewportHighlightMode
smatz <smatz@openttd.org>
parents:
7912
diff
changeset
|
2123 NOT_REACHED(); |
7a122ebfa7cf
(svn r11471) -Codechange: one more variable retyped to enum ViewportHighlightMode
smatz <smatz@openttd.org>
parents:
7912
diff
changeset
|
2124 break; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2125 } |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2126 _thd.new_pos.x = x1 & ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2127 _thd.new_pos.y = y1 & ~TILE_UNIT_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2128 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2129 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2130 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2131 /* redraw selection */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2132 if (_thd.drawstyle != _thd.new_drawstyle || |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2133 _thd.pos.x != _thd.new_pos.x || _thd.pos.y != _thd.new_pos.y || |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2134 _thd.size.x != _thd.new_size.x || _thd.size.y != _thd.new_size.y || |
7078
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2135 _thd.outersize.x != _thd.new_outersize.x || |
c4d51d528cd2
(svn r10343) -Cleanup: Add documentation of functions and code-style fix.
belugas <belugas@openttd.org>
parents:
7069
diff
changeset
|
2136 _thd.outersize.y != _thd.new_outersize.y) { |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2137 /* clear the old selection? */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2138 if (_thd.drawstyle) SetSelectionTilesDirty(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2139 |
11072
19fd43d5975d
(svn r15413) -Fix [FS#2529/2533]: inconsistencies between station and bridge building w.r.t. tile selection and when the window should be closed.
rubidium <rubidium@openttd.org>
parents:
10960
diff
changeset
|
2140 _thd.drawstyle = _thd.new_drawstyle; |
19fd43d5975d
(svn r15413) -Fix [FS#2529/2533]: inconsistencies between station and bridge building w.r.t. tile selection and when the window should be closed.
rubidium <rubidium@openttd.org>
parents:
10960
diff
changeset
|
2141 _thd.pos = _thd.new_pos; |
19fd43d5975d
(svn r15413) -Fix [FS#2529/2533]: inconsistencies between station and bridge building w.r.t. tile selection and when the window should be closed.
rubidium <rubidium@openttd.org>
parents:
10960
diff
changeset
|
2142 _thd.size = _thd.new_size; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2143 _thd.outersize = _thd.new_outersize; |
11072
19fd43d5975d
(svn r15413) -Fix [FS#2529/2533]: inconsistencies between station and bridge building w.r.t. tile selection and when the window should be closed.
rubidium <rubidium@openttd.org>
parents:
10960
diff
changeset
|
2144 _thd.dirty = 0xff; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2145 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2146 /* draw the new selection? */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2147 if (_thd.new_drawstyle) SetSelectionTilesDirty(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2148 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2149 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2150 |
9781
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2151 /** Displays the measurement tooltips when selecting multiple tiles |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2152 * @param str String to be displayed |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2153 * @param paramcount number of params to deal with |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2154 * @param params (optional) up to 5 pieces of additional information that may be added to a tooltip |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2155 */ |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2156 static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[]) |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2157 { |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2158 if (!_settings_client.gui.measure_tooltip) return; |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2159 GuiShowTooltips(str, paramcount, params, true); |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2160 } |
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2161 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2162 /** highlighting tiles while only going over them with the mouse */ |
9147
6c9755fab091
(svn r13009) -Codechange: move more tile highlighting related functions/types to tilehighlight_*.h.
rubidium <rubidium@openttd.org>
parents:
9127
diff
changeset
|
2163 void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2164 { |
6669
66456dace92f
(svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros <maedhros@openttd.org>
parents:
6654
diff
changeset
|
2165 _thd.select_method = method; |
66456dace92f
(svn r9900) -Codechange: Separate the variables for how to highlight a land area and what to do with it afterwards.
maedhros <maedhros@openttd.org>
parents:
6654
diff
changeset
|
2166 _thd.select_proc = process; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2167 _thd.selend.x = TileX(tile) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2168 _thd.selstart.x = TileX(tile) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2169 _thd.selend.y = TileY(tile) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2170 _thd.selstart.y = TileY(tile) * TILE_SIZE; |
7912
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2171 |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2172 /* Needed so several things (road, autoroad, bridges, ...) are placed correctly. |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2173 * In effect, placement starts from the centre of a tile |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2174 */ |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2175 if (method == VPM_X_OR_Y || method == VPM_FIX_X || method == VPM_FIX_Y) { |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2176 _thd.selend.x += TILE_SIZE / 2; |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2177 _thd.selend.y += TILE_SIZE / 2; |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2178 _thd.selstart.x += TILE_SIZE / 2; |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2179 _thd.selstart.y += TILE_SIZE / 2; |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2180 } |
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2181 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2182 if (_thd.place_mode == HT_RECT) { |
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2183 _thd.place_mode = HT_SPECIAL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2184 _thd.next_drawstyle = HT_RECT; |
11746
5078e0598a60
(svn r16136) -Fix (r16095)[FS#2858]: sometimes autorail wouldn't work; seems to be primarily for OSX users though
rubidium <rubidium@openttd.org>
parents:
11730
diff
changeset
|
2185 } else if (_thd.place_mode & (HT_RAIL | HT_LINE)) { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2186 _thd.place_mode = HT_SPECIAL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2187 _thd.next_drawstyle = _thd.drawstyle; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2188 } else { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2189 _thd.place_mode = HT_SPECIAL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2190 _thd.next_drawstyle = HT_POINT; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2191 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2192 _special_mouse_mode = WSM_SIZING; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2193 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2194 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2195 void VpSetPlaceSizingLimit(int limit) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2196 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2197 _thd.sizelimit = limit; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2198 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2199 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2200 /** |
11361
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2201 * Highlights all tiles between a set of two tiles. Used in dock and tunnel placement |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2202 * @param from TileIndex of the first tile to highlight |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2203 * @param to TileIndex of the last tile to highlight */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2204 void VpSetPresizeRange(TileIndex from, TileIndex to) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2205 { |
7006
933d3ee6d37d
(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 <rubidium@openttd.org>
parents:
6937
diff
changeset
|
2206 uint64 distance = DistanceManhattan(from, to) + 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2207 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2208 _thd.selend.x = TileX(to) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2209 _thd.selend.y = TileY(to) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2210 _thd.selstart.x = TileX(from) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2211 _thd.selstart.y = TileY(from) * TILE_SIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2212 _thd.next_drawstyle = HT_RECT; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2213 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2214 /* show measurement only if there is any length to speak of */ |
9781
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2215 if (distance > 1) ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2216 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2217 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
2218 static void VpStartPreSizing() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2219 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2220 _thd.selend.x = -1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2221 _special_mouse_mode = WSM_PRESIZE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2222 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2223 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2224 /** returns information about the 2x1 piece to be build. |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2225 * The lower bits (0-3) are the track type. */ |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2226 static HighLightStyle Check2x1AutoRail(int mode) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2227 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2228 int fxpy = _tile_fract_coords.x + _tile_fract_coords.y; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2229 int sxpy = (_thd.selend.x & TILE_UNIT_MASK) + (_thd.selend.y & TILE_UNIT_MASK); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2230 int fxmy = _tile_fract_coords.x - _tile_fract_coords.y; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2231 int sxmy = (_thd.selend.x & TILE_UNIT_MASK) - (_thd.selend.y & TILE_UNIT_MASK); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2232 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2233 switch (mode) { |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2234 default: NOT_REACHED(); |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2235 case 0: // end piece is lower right |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2236 if (fxpy >= 20 && sxpy <= 12) return HT_DIR_HL; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2237 if (fxmy < -3 && sxmy > 3) return HT_DIR_VR; |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2238 return HT_DIR_Y; |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2239 |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2240 case 1: |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2241 if (fxmy > 3 && sxmy < -3) return HT_DIR_VL; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2242 if (fxpy <= 12 && sxpy >= 20) return HT_DIR_HU; |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2243 return HT_DIR_Y; |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2244 |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2245 case 2: |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2246 if (fxmy > 3 && sxmy < -3) return HT_DIR_VL; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2247 if (fxpy >= 20 && sxpy <= 12) return HT_DIR_HL; |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2248 return HT_DIR_X; |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2249 |
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2250 case 3: |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2251 if (fxmy < -3 && sxmy > 3) return HT_DIR_VR; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2252 if (fxpy <= 12 && sxpy >= 20) return HT_DIR_HU; |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2253 return HT_DIR_X; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2254 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2255 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2256 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2257 /** Check if the direction of start and end tile should be swapped based on |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2258 * the dragging-style. Default directions are: |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2259 * in the case of a line (HT_RAIL, HT_LINE): DIR_NE, DIR_NW, DIR_N, DIR_E |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2260 * in the case of a rect (HT_RECT, HT_POINT): DIR_S, DIR_E |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2261 * For example dragging a rectangle area from south to north should be swapped to |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2262 * north-south (DIR_S) to obtain the same results with less code. This is what |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2263 * the return value signifies. |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2264 * @param style HighLightStyle dragging style |
6484
17fdaec13730
(svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas <belugas@openttd.org>
parents:
6453
diff
changeset
|
2265 * @param start_tile start tile of drag |
17fdaec13730
(svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas <belugas@openttd.org>
parents:
6453
diff
changeset
|
2266 * @param end_tile end tile of drag |
17fdaec13730
(svn r9665) -Documentation: Doxygen corrections,errors, corrections of corrections...
belugas <belugas@openttd.org>
parents:
6453
diff
changeset
|
2267 * @return boolean value which when true means start/end should be swapped */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2268 static bool SwapDirection(HighLightStyle style, TileIndex start_tile, TileIndex end_tile) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2269 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2270 uint start_x = TileX(start_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2271 uint start_y = TileY(start_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2272 uint end_x = TileX(end_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2273 uint end_y = TileY(end_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2274 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2275 switch (style & HT_DRAG_MASK) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2276 case HT_RAIL: |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2277 case HT_LINE: return (end_x > start_x || (end_x == start_x && end_y > start_y)); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2278 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2279 case HT_RECT: |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2280 case HT_POINT: return (end_x != start_x && end_y < start_y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2281 default: NOT_REACHED(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2282 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2283 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2284 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2285 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2286 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2287 /** Calculates height difference between one tile and another |
11361
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2288 * Multiplies the result to suit the standard given by minimap - 50 meters high |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2289 * To correctly get the height difference we need the direction we are dragging |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2290 * in, as well as with what kind of tool we are dragging. For example a horizontal |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2291 * autorail tool that starts in bottom and ends at the top of a tile will need the |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2292 * maximum of SW, S and SE, N corners respectively. This is handled by the lookup table below |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2293 * See _tileoffs_by_dir in map.c for the direction enums if you can't figure out |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2294 * the values yourself. |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2295 * @param style HightlightStyle of drag. This includes direction and style (autorail, rect, etc.) |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2296 * @param distance amount of tiles dragged, important for horizontal/vertical drags |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2297 * ignored for others |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2298 * @param start_tile, end_tile start and end tile of drag operation |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2299 * @return height difference between two tiles. Tile measurement tool utilizes |
02313cc6114e
(svn r15711) -Codechange: lots of whitespace cleanup/fixes
rubidium <rubidium@openttd.org>
parents:
11239
diff
changeset
|
2300 * this value in its tooltips */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2301 static int CalcHeightdiff(HighLightStyle style, uint distance, TileIndex start_tile, TileIndex end_tile) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2302 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2303 bool swap = SwapDirection(style, start_tile, end_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2304 byte style_t; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2305 uint h0, h1, ht; // start heigth, end height, and temp variable |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2306 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2307 if (start_tile == end_tile) return 0; |
5733 | 2308 if (swap) Swap(start_tile, end_tile); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2309 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2310 switch (style & HT_DRAG_MASK) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2311 case HT_RECT: { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2312 static const TileIndexDiffC heightdiff_area_by_dir[] = { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2313 /* Start */ {1, 0}, /* Dragging east */ {0, 0}, // Dragging south |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2314 /* End */ {0, 1}, /* Dragging east */ {1, 1} // Dragging south |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2315 }; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2316 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2317 /* In the case of an area we can determine whether we were dragging south or |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2318 * east by checking the X-coordinates of the tiles */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2319 style_t = (byte)(TileX(end_tile) > TileX(start_tile)); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2320 start_tile = TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_area_by_dir[style_t])); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2321 end_tile = TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_area_by_dir[2 + style_t])); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2322 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2323 /* Fallthrough */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2324 case HT_POINT: |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2325 h0 = TileHeight(start_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2326 h1 = TileHeight(end_tile); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2327 break; |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2328 default: { // All other types, this is mostly only line/autorail |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2329 static const HighLightStyle flip_style_direction[] = { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2330 HT_DIR_X, HT_DIR_Y, HT_DIR_HL, HT_DIR_HU, HT_DIR_VR, HT_DIR_VL |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2331 }; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2332 static const TileIndexDiffC heightdiff_line_by_dir[] = { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2333 /* Start */ {1, 0}, {1, 1}, /* HT_DIR_X */ {0, 1}, {1, 1}, // HT_DIR_Y |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2334 /* Start */ {1, 0}, {0, 0}, /* HT_DIR_HU */ {1, 0}, {1, 1}, // HT_DIR_HL |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2335 /* Start */ {1, 0}, {1, 1}, /* HT_DIR_VL */ {0, 1}, {1, 1}, // HT_DIR_VR |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2336 |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2337 /* Start */ {0, 1}, {0, 0}, /* HT_DIR_X */ {1, 0}, {0, 0}, // HT_DIR_Y |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2338 /* End */ {0, 1}, {0, 0}, /* HT_DIR_HU */ {1, 1}, {0, 1}, // HT_DIR_HL |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2339 /* End */ {1, 0}, {0, 0}, /* HT_DIR_VL */ {0, 0}, {0, 1}, // HT_DIR_VR |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2340 }; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2341 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2342 distance %= 2; // we're only interested if the distance is even or uneven |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2343 style &= HT_DIR_MASK; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2344 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2345 /* To handle autorail, we do some magic to be able to use a lookup table. |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2346 * Firstly if we drag the other way around, we switch start&end, and if needed |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2347 * also flip the drag-position. Eg if it was on the left, and the distance is even |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2348 * that means the end, which is now the start is on the right */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2349 if (swap && distance == 0) style = flip_style_direction[style]; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2350 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2351 /* Use lookup table for start-tile based on HighLightStyle direction */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2352 style_t = style * 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2353 assert(style_t < lengthof(heightdiff_line_by_dir) - 13); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2354 h0 = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t]))); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2355 ht = TileHeight(TILE_ADD(start_tile, ToTileIndexDiff(heightdiff_line_by_dir[style_t + 1]))); |
5601
ca6b459bf488
(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 <celestar@openttd.org>
parents:
5587
diff
changeset
|
2356 h0 = max(h0, ht); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2357 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2358 /* Use lookup table for end-tile based on HighLightStyle direction |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2359 * flip around side (lower/upper, left/right) based on distance */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2360 if (distance == 0) style_t = flip_style_direction[style] * 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2361 assert(style_t < lengthof(heightdiff_line_by_dir) - 13); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2362 h1 = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t]))); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2363 ht = TileHeight(TILE_ADD(end_tile, ToTileIndexDiff(heightdiff_line_by_dir[12 + style_t + 1]))); |
5601
ca6b459bf488
(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 <celestar@openttd.org>
parents:
5587
diff
changeset
|
2364 h1 = max(h1, ht); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2365 } break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2366 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2367 |
5733 | 2368 if (swap) Swap(h0, h1); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2369 /* Minimap shows height in intervals of 50 meters, let's do the same */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2370 return (int)(h1 - h0) * 50; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2371 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2372 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2373 static const StringID measure_strings_length[] = {STR_NULL, STR_MEASURE_LENGTH, STR_MEASURE_LENGTH_HEIGHTDIFF}; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2374 |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2375 /** |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2376 * Check for underflowing the map. |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2377 * @param test the variable to test for underflowing |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2378 * @param other the other variable to update to keep the line |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2379 * @param mult the constant to multiply the difference by for \c other |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2380 */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2381 static void CheckUnderflow(int &test, int &other, int mult) |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2382 { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2383 if (test >= 0) return; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2384 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2385 other += mult * test; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2386 test = 0; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2387 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2388 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2389 /** |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2390 * Check for overflowing the map. |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2391 * @param test the variable to test for overflowing |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2392 * @param other the other variable to update to keep the line |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2393 * @param max the maximum value for the \c test variable |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2394 * @param mult the constant to multiply the difference by for \c other |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2395 */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2396 static void CheckOverflow(int &test, int &other, int max, int mult) |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2397 { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2398 if (test <= max) return; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2399 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2400 other += mult * (test - max); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2401 test = max; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2402 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2403 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2404 /** while dragging */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2405 static void CalcRaildirsDrawstyle(TileHighlightData *thd, int x, int y, int method) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2406 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2407 HighLightStyle b; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2408 |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2409 int dx = thd->selstart.x - (thd->selend.x & ~TILE_UNIT_MASK); |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2410 int dy = thd->selstart.y - (thd->selend.y & ~TILE_UNIT_MASK); |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2411 uint w = abs(dx) + TILE_SIZE; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2412 uint h = abs(dy) + TILE_SIZE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2413 |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2414 if (method & ~(VPM_RAILDIRS | VPM_SIGNALDIRS)) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2415 /* We 'force' a selection direction; first four rail buttons. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2416 method &= ~(VPM_RAILDIRS | VPM_SIGNALDIRS); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2417 int raw_dx = thd->selstart.x - thd->selend.x; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2418 int raw_dy = thd->selstart.y - thd->selend.y; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2419 switch (method) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2420 case VPM_FIX_X: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2421 b = HT_LINE | HT_DIR_Y; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2422 x = thd->selstart.x; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2423 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2424 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2425 case VPM_FIX_Y: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2426 b = HT_LINE | HT_DIR_X; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2427 y = thd->selstart.y; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2428 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2429 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2430 case VPM_FIX_HORIZONTAL: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2431 if (dx == -dy) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2432 /* We are on a straight horizontal line. Determine the 'rail' |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2433 * to build based the sub tile location. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2434 b = (x & TILE_UNIT_MASK) + (y & TILE_UNIT_MASK) >= TILE_SIZE ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2435 } else { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2436 /* We are not on a straight line. Determine the rail to build |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2437 * based on whether we are above or below it. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2438 b = dx + dy >= TILE_SIZE ? HT_LINE | HT_DIR_HU : HT_LINE | HT_DIR_HL; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2439 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2440 /* Calculate where a horizontal line through the start point and |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2441 * a vertical line from the selected end point intersect and |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2442 * use that point as the end point. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2443 int offset = (raw_dx - raw_dy) / 2; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2444 x = thd->selstart.x - (offset & ~TILE_UNIT_MASK); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2445 y = thd->selstart.y + (offset & ~TILE_UNIT_MASK); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2446 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2447 /* 'Build' the last half rail tile if needed */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2448 if ((offset & TILE_UNIT_MASK) > (TILE_SIZE / 2)) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2449 if (dx + dy >= TILE_SIZE) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2450 x += (dx + dy < 0) ? TILE_SIZE : -TILE_SIZE; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2451 } else { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2452 y += (dx + dy < 0) ? TILE_SIZE : -TILE_SIZE; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2453 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2454 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2455 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2456 /* Make sure we do not overflow the map! */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2457 CheckUnderflow(x, y, 1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2458 CheckUnderflow(y, x, 1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2459 CheckOverflow(x, y, (MapMaxX() - 1) * TILE_SIZE, 1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2460 CheckOverflow(y, x, (MapMaxY() - 1) * TILE_SIZE, 1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2461 assert(x >= 0 && y >= 0 && x <= (int)MapMaxX() * TILE_SIZE && y <= (int)MapMaxY() * TILE_SIZE); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2462 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2463 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2464 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2465 case VPM_FIX_VERTICAL: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2466 if (dx == dy) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2467 /* We are on a straight vertical line. Determine the 'rail' |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2468 * to build based the sub tile location. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2469 b = (x & TILE_UNIT_MASK) > (y & TILE_UNIT_MASK) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2470 } else { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2471 /* We are not on a straight line. Determine the rail to build |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2472 * based on whether we are left or right from it. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2473 b = dx < dy ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2474 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2475 /* Calculate where a vertical line through the start point and |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2476 * a horizontal line from the selected end point intersect and |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2477 * use that point as the end point. */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2478 int offset = (raw_dx + raw_dy + TILE_SIZE) / 2; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2479 x = thd->selstart.x - (offset & ~TILE_UNIT_MASK); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2480 y = thd->selstart.y - (offset & ~TILE_UNIT_MASK); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2481 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2482 /* 'Build' the last half rail tile if needed */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2483 if ((offset & TILE_UNIT_MASK) > (TILE_SIZE / 2)) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2484 if (dx - dy < 0) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2485 y += (dx > dy) ? TILE_SIZE : -TILE_SIZE; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2486 } else { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2487 x += (dx < dy) ? TILE_SIZE : -TILE_SIZE; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2488 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2489 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2490 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2491 /* Make sure we do not overflow the map! */ |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2492 CheckUnderflow(x, y, -1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2493 CheckUnderflow(y, x, -1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2494 CheckOverflow(x, y, (MapMaxX() - 1) * TILE_SIZE, -1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2495 CheckOverflow(y, x, (MapMaxY() - 1) * TILE_SIZE, -1); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2496 assert(x >= 0 && y >= 0 && x <= (int)MapMaxX() * TILE_SIZE && y <= (int)MapMaxY() * TILE_SIZE); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2497 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2498 break; |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2499 |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2500 default: |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2501 NOT_REACHED(); |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2502 } |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2503 } else if (TileVirtXY(thd->selstart.x, thd->selstart.y) == TileVirtXY(x, y)) { // check if we're only within one tile |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2504 if (method & VPM_RAILDIRS) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2505 b = GetAutorailHT(x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2506 } else { // rect for autosignals on one tile |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2507 b = HT_RECT; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2508 } |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2509 } else if (h == TILE_SIZE) { // Is this in X direction? |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2510 if (dx == TILE_SIZE) { // 2x1 special handling |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2511 b = (Check2x1AutoRail(3)) | HT_LINE; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2512 } else if (dx == -TILE_SIZE) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2513 b = (Check2x1AutoRail(2)) | HT_LINE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2514 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2515 b = HT_LINE | HT_DIR_X; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2516 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2517 y = thd->selstart.y; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2518 } else if (w == TILE_SIZE) { // Or Y direction? |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2519 if (dy == TILE_SIZE) { // 2x1 special handling |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2520 b = (Check2x1AutoRail(1)) | HT_LINE; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2521 } else if (dy == -TILE_SIZE) { // 2x1 other direction |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2522 b = (Check2x1AutoRail(0)) | HT_LINE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2523 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2524 b = HT_LINE | HT_DIR_Y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2525 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2526 x = thd->selstart.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2527 } else if (w > h * 2) { // still count as x dir? |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2528 b = HT_LINE | HT_DIR_X; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2529 y = thd->selstart.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2530 } else if (h > w * 2) { // still count as y dir? |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2531 b = HT_LINE | HT_DIR_Y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2532 x = thd->selstart.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2533 } else { // complicated direction |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2534 int d = w - h; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2535 thd->selend.x = thd->selend.x & ~TILE_UNIT_MASK; |
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2536 thd->selend.y = thd->selend.y & ~TILE_UNIT_MASK; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2537 |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2538 /* four cases. */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2539 if (x > thd->selstart.x) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2540 if (y > thd->selstart.y) { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2541 /* south */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2542 if (d == 0) { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2543 b = (x & TILE_UNIT_MASK) > (y & TILE_UNIT_MASK) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2544 } else if (d >= 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2545 x = thd->selstart.x + h; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2546 b = HT_LINE | HT_DIR_VL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2547 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2548 y = thd->selstart.y + w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2549 b = HT_LINE | HT_DIR_VR; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2550 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2551 } else { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2552 /* west */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2553 if (d == 0) { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2554 b = (x & TILE_UNIT_MASK) + (y & TILE_UNIT_MASK) >= TILE_SIZE ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2555 } else if (d >= 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2556 x = thd->selstart.x + h; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2557 b = HT_LINE | HT_DIR_HL; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2558 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2559 y = thd->selstart.y - w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2560 b = HT_LINE | HT_DIR_HU; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2561 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2562 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2563 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2564 if (y > thd->selstart.y) { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2565 /* east */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2566 if (d == 0) { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2567 b = (x & TILE_UNIT_MASK) + (y & TILE_UNIT_MASK) >= TILE_SIZE ? HT_LINE | HT_DIR_HL : HT_LINE | HT_DIR_HU; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2568 } else if (d >= 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2569 x = thd->selstart.x - h; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2570 b = HT_LINE | HT_DIR_HU; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2571 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2572 y = thd->selstart.y + w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2573 b = HT_LINE | HT_DIR_HL; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2574 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2575 } else { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2576 /* north */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2577 if (d == 0) { |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2578 b = (x & TILE_UNIT_MASK) > (y & TILE_UNIT_MASK) ? HT_LINE | HT_DIR_VL : HT_LINE | HT_DIR_VR; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2579 } else if (d >= 0) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2580 x = thd->selstart.x - h; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2581 b = HT_LINE | HT_DIR_VR; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2582 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2583 y = thd->selstart.y - w; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2584 b = HT_LINE | HT_DIR_VL; |
11700
5cb273d3151b
(svn r16086) -Codechange: magic numbers substitutes by enums and some type safety
rubidium <rubidium@openttd.org>
parents:
11545
diff
changeset
|
2585 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2586 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2587 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2588 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2589 |
9413
512ea64da840
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents:
9410
diff
changeset
|
2590 if (_settings_client.gui.measure_tooltip) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2591 TileIndex t0 = TileVirtXY(thd->selstart.x, thd->selstart.y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2592 TileIndex t1 = TileVirtXY(x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2593 uint distance = DistanceManhattan(t0, t1) + 1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2594 byte index = 0; |
7006
933d3ee6d37d
(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 <rubidium@openttd.org>
parents:
6937
diff
changeset
|
2595 uint64 params[2]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2596 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2597 if (distance != 1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2598 int heightdiff = CalcHeightdiff(b, distance, t0, t1); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2599 /* If we are showing a tooltip for horizontal or vertical drags, |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2600 * 2 tiles have a length of 1. To bias towards the ceiling we add |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2601 * one before division. It feels more natural to count 3 lengths as 2 */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2602 if ((b & HT_DIR_MASK) != HT_DIR_X && (b & HT_DIR_MASK) != HT_DIR_Y) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2603 distance = (distance + 1) / 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2604 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2605 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2606 params[index++] = distance; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2607 if (heightdiff != 0) params[index++] = heightdiff; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2608 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2609 |
9781
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2610 ShowMeasurementTooltips(measure_strings_length[index], index, params); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2611 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2612 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2613 thd->selend.x = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2614 thd->selend.y = y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2615 thd->next_drawstyle = b; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2616 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2617 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2618 /** |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2619 * Selects tiles while dragging |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2620 * @param x X coordinate of end of selection |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2621 * @param y Y coordinate of end of selection |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2622 * @param method modifies the way tiles are selected. Possible |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2623 * methods are VPM_* in viewport.h */ |
7888
194fee5b8120
(svn r11439) -Codechange: replace some magic numbers by a ViewportPlaceMethod enumified constant. Patch by SmatZ.
rubidium <rubidium@openttd.org>
parents:
7849
diff
changeset
|
2624 void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2625 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2626 int sx, sy; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2627 HighLightStyle style; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2628 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2629 if (x == -1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2630 _thd.selend.x = -1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2631 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2632 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2633 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2634 /* Special handling of drag in any (8-way) direction */ |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2635 if (method & (VPM_RAILDIRS | VPM_SIGNALDIRS)) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2636 _thd.selend.x = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2637 _thd.selend.y = y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2638 CalcRaildirsDrawstyle(&_thd, x, y, method); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2639 return; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2640 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2641 |
7912
357db556fc02
(svn r11465) -Fix: more user-friedly placement in X and Y directions (most noticeable with autoroad)
smatz <smatz@openttd.org>
parents:
7905
diff
changeset
|
2642 /* Needed so level-land is placed correctly */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2643 if (_thd.next_drawstyle == HT_POINT) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2644 x += TILE_SIZE / 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2645 y += TILE_SIZE / 2; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2646 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2647 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2648 sx = _thd.selstart.x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2649 sy = _thd.selstart.y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2650 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2651 switch (method) { |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2652 case VPM_X_OR_Y: // drag in X or Y direction |
7923
504d4b2ecc6c
(svn r11476) -Codechange: rename the function myabs to abs to get rid of an unneeded define
skidd13 <skidd13@openttd.org>
parents:
7922
diff
changeset
|
2653 if (abs(sy - y) < abs(sx - x)) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2654 y = sy; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2655 style = HT_DIR_X; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2656 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2657 x = sx; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2658 style = HT_DIR_Y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2659 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2660 goto calc_heightdiff_single_direction; |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2661 case VPM_FIX_X: // drag in Y direction |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2662 x = sx; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2663 style = HT_DIR_Y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2664 goto calc_heightdiff_single_direction; |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2665 case VPM_FIX_Y: // drag in X direction |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2666 y = sy; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2667 style = HT_DIR_X; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2668 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2669 calc_heightdiff_single_direction:; |
9413
512ea64da840
(svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium <rubidium@openttd.org>
parents:
9410
diff
changeset
|
2670 if (_settings_client.gui.measure_tooltip) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2671 TileIndex t0 = TileVirtXY(sx, sy); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2672 TileIndex t1 = TileVirtXY(x, y); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2673 uint distance = DistanceManhattan(t0, t1) + 1; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2674 byte index = 0; |
7006
933d3ee6d37d
(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 <rubidium@openttd.org>
parents:
6937
diff
changeset
|
2675 uint64 params[2]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2676 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2677 if (distance != 1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2678 /* With current code passing a HT_LINE style to calculate the height |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2679 * difference is enough. However if/when a point-tool is created |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2680 * with this method, function should be called with new_style (below) |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2681 * instead of HT_LINE | style case HT_POINT is handled specially |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2682 * new_style := (_thd.next_drawstyle & HT_RECT) ? HT_LINE | style : _thd.next_drawstyle; */ |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2683 int heightdiff = CalcHeightdiff(HT_LINE | style, 0, t0, t1); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2684 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2685 params[index++] = distance; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2686 if (heightdiff != 0) params[index++] = heightdiff; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2687 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2688 |
9781
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2689 ShowMeasurementTooltips(measure_strings_length[index], index, params); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2690 } break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2691 |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2692 case VPM_X_AND_Y_LIMITED: { // drag an X by Y constrained rect area |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2693 int limit = (_thd.sizelimit - 1) * TILE_SIZE; |
7922
ff1975ced735
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13 <skidd13@openttd.org>
parents:
7918
diff
changeset
|
2694 x = sx + Clamp(x - sx, -limit, limit); |
ff1975ced735
(svn r11475) -Codechange: rename clamp and clampu to Clamp and ClampU to fit with the coding style
skidd13 <skidd13@openttd.org>
parents:
7918
diff
changeset
|
2695 y = sy + Clamp(y - sy, -limit, limit); |
11368
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2696 } // Fallthrough |
82c90cd591ab
(svn r15718) -Cleanup: apply some comment coding style on the rest of the sources too
rubidium <rubidium@openttd.org>
parents:
11361
diff
changeset
|
2697 case VPM_X_AND_Y: { // drag an X by Y area |
11072
19fd43d5975d
(svn r15413) -Fix [FS#2529/2533]: inconsistencies between station and bridge building w.r.t. tile selection and when the window should be closed.
rubidium <rubidium@openttd.org>
parents:
10960
diff
changeset
|
2698 if (_settings_client.gui.measure_tooltip) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2699 static const StringID measure_strings_area[] = { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2700 STR_NULL, STR_NULL, STR_MEASURE_AREA, STR_MEASURE_AREA_HEIGHTDIFF |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2701 }; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2702 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2703 TileIndex t0 = TileVirtXY(sx, sy); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2704 TileIndex t1 = TileVirtXY(x, y); |
7970
c49c1607b294
(svn r11526) -Codechange: Rename the function delta fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7954
diff
changeset
|
2705 uint dx = Delta(TileX(t0), TileX(t1)) + 1; |
c49c1607b294
(svn r11526) -Codechange: Rename the function delta fitting to the naming style
skidd13 <skidd13@openttd.org>
parents:
7954
diff
changeset
|
2706 uint dy = Delta(TileY(t0), TileY(t1)) + 1; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2707 byte index = 0; |
7006
933d3ee6d37d
(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 <rubidium@openttd.org>
parents:
6937
diff
changeset
|
2708 uint64 params[3]; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2709 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2710 /* If dragging an area (eg dynamite tool) and it is actually a single |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2711 * row/column, change the type to 'line' to get proper calculation for height */ |
8224
c45446125bf0
(svn r11787) -Codechange: more header rewrites. This time related to viewport.h.
rubidium <rubidium@openttd.org>
parents:
8144
diff
changeset
|
2712 style = (HighLightStyle)_thd.next_drawstyle; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2713 if (style & HT_RECT) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2714 if (dx == 1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2715 style = HT_LINE | HT_DIR_Y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2716 } else if (dy == 1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2717 style = HT_LINE | HT_DIR_X; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2718 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2719 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2720 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2721 if (dx != 1 || dy != 1) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2722 int heightdiff = CalcHeightdiff(style, 0, t0, t1); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2723 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2724 params[index++] = dx; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2725 params[index++] = dy; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2726 if (heightdiff != 0) params[index++] = heightdiff; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2727 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2728 |
9781
5ab8b1b156bb
(svn r13922) -Codechange: Move measurement-tooltip related stuff out of the general tooltip window.
frosch <frosch@openttd.org>
parents:
9755
diff
changeset
|
2729 ShowMeasurementTooltips(measure_strings_area[index], index, params); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2730 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2731 break; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2732 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2733 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2734 default: NOT_REACHED(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2735 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2736 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2737 _thd.selend.x = x; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2738 _thd.selend.y = y; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2739 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2740 |
9314
93a764ca7ec7
(svn r13182) -Doc: add documentation to mostly rail_gui related functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
9274
diff
changeset
|
2741 /** |
93a764ca7ec7
(svn r13182) -Doc: add documentation to mostly rail_gui related functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
9274
diff
changeset
|
2742 * Handle the mouse while dragging for placement/resizing. |
93a764ca7ec7
(svn r13182) -Doc: add documentation to mostly rail_gui related functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
9274
diff
changeset
|
2743 * @return Boolean whether search for a handler should continue |
93a764ca7ec7
(svn r13182) -Doc: add documentation to mostly rail_gui related functions. Patch by Alberth.
rubidium <rubidium@openttd.org>
parents:
9274
diff
changeset
|
2744 */ |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
2745 bool VpHandlePlaceSizingDrag() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2746 { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2747 if (_special_mouse_mode != WSM_SIZING) return true; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2748 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2749 /* stop drag mode if the window has been closed */ |
9166
45b1388fe9ba
(svn r13029) -Codechange: more work in the road to getting the WP macros and byte[WINDOW_CUSTOM_SIZE] removed. This step changes the event handling to work directly on the Window class instead of via a function pointer and big switches while keeping backward compatability while we're rewriting the Windows to the new scheme.
rubidium <rubidium@openttd.org>
parents:
9147
diff
changeset
|
2750 Window *w = FindWindowById(_thd.window_class, _thd.window_number); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2751 if (w == NULL) { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2752 ResetObjectToPlace(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2753 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2754 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2755 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2756 /* while dragging execute the drag procedure of the corresponding window (mostly VpSelectTilesWithMethod() ) */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2757 if (_left_button_down) { |
9166
45b1388fe9ba
(svn r13029) -Codechange: more work in the road to getting the WP macros and byte[WINDOW_CUSTOM_SIZE] removed. This step changes the event handling to work directly on the Window class instead of via a function pointer and big switches while keeping backward compatability while we're rewriting the Windows to the new scheme.
rubidium <rubidium@openttd.org>
parents:
9147
diff
changeset
|
2758 w->OnPlaceDrag(_thd.select_method, _thd.select_proc, GetTileBelowCursor()); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2759 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2760 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2761 |
6423
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2762 /* mouse button released.. |
72ac8bfaa32f
(svn r9559) -Documentation: doxygen and comment changes: 'U' and 'V' now. Almost done. Yeah. I know, I've already said that...
belugas <belugas@openttd.org>
parents:
6248
diff
changeset
|
2763 * keep the selected tool, but reset it to the original mode. */ |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2764 _special_mouse_mode = WSM_NONE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2765 if (_thd.next_drawstyle == HT_RECT) { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2766 _thd.place_mode = HT_RECT; |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2767 } else if (_thd.select_method & VPM_SIGNALDIRS) { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2768 _thd.place_mode = HT_RECT; |
11709
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2769 } else if (_thd.select_method & VPM_RAILDIRS) { |
886f2a4f8cba
(svn r16095) -Change/Feature-ish: make the first 4 rail building tools behave more like autorail
rubidium <rubidium@openttd.org>
parents:
11702
diff
changeset
|
2770 _thd.place_mode = (_thd.select_method & ~VPM_RAILDIRS) ? _thd.next_drawstyle : HT_RAIL; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2771 } else { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2772 _thd.place_mode = HT_POINT; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2773 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2774 SetTileSelectSize(1, 1); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2775 |
9166
45b1388fe9ba
(svn r13029) -Codechange: more work in the road to getting the WP macros and byte[WINDOW_CUSTOM_SIZE] removed. This step changes the event handling to work directly on the Window class instead of via a function pointer and big switches while keeping backward compatability while we're rewriting the Windows to the new scheme.
rubidium <rubidium@openttd.org>
parents:
9147
diff
changeset
|
2776 w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y)); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2777 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2778 return false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2779 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2780 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2781 void SetObjectToPlaceWnd(CursorID icon, SpriteID pal, HighLightStyle mode, Window *w) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2782 { |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
2783 SetObjectToPlace(icon, pal, mode, w->window_class, w->window_number); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2784 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2785 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2786 #include "table/animcursors.h" |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2787 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2788 void SetObjectToPlace(CursorID icon, SpriteID pal, HighLightStyle mode, WindowClass window_class, WindowNumber window_num) |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2789 { |
8585
2880bcf43f14
(svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC)
smatz <smatz@openttd.org>
parents:
8562
diff
changeset
|
2790 /* undo clicking on button and drag & drop */ |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2791 if (_thd.place_mode != HT_NONE || _special_mouse_mode == WSM_DRAGDROP) { |
9244
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2792 Window *w = FindWindowById(_thd.window_class, _thd.window_number); |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2793 if (w != NULL) { |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2794 /* Call the abort function, but set the window class to something |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2795 * that will never be used to avoid infinite loops. Setting it to |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2796 * the 'next' window class must not be done because recursion into |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2797 * this function might in some cases reset the newly set object to |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2798 * place or not properly reset the original selection. */ |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2799 _thd.window_class = WC_INVALID; |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2800 w->OnPlaceObjectAbort(); |
07d38b0d61ce
(svn r13110) -Fix [FS#2018]: some toolbar buttons not being unpressed properly.
rubidium <rubidium@openttd.org>
parents:
9238
diff
changeset
|
2801 } |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2802 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2803 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2804 SetTileSelectSize(1, 1); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2805 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2806 _thd.make_square_red = false; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2807 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2808 if (mode == HT_DRAG) { // HT_DRAG is for dragdropping trains in the depot window |
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2809 mode = HT_NONE; |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2810 _special_mouse_mode = WSM_DRAGDROP; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2811 } else { |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2812 _special_mouse_mode = WSM_NONE; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2813 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2814 |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2815 _thd.place_mode = mode; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2816 _thd.window_class = window_class; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2817 _thd.window_number = window_num; |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2818 |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2819 if (mode == HT_SPECIAL) // special tools, like tunnels or docks start with presizing mode |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2820 VpStartPreSizing(); |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2821 |
9238
cef3cbdc68c6
(svn r13104) -Codechange: make ResetObjectToPlace safe to be called recursively via the OnPlaceObjectAbort callback and use this knowledge to simplify closing some windows.
rubidium <rubidium@openttd.org>
parents:
9192
diff
changeset
|
2822 if ((int)icon < 0) { |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2823 SetAnimatedMouseCursor(_animcursors[~icon]); |
9238
cef3cbdc68c6
(svn r13104) -Codechange: make ResetObjectToPlace safe to be called recursively via the OnPlaceObjectAbort callback and use this knowledge to simplify closing some windows.
rubidium <rubidium@openttd.org>
parents:
9192
diff
changeset
|
2824 } else { |
5668
3d6d9bff3dd8
(svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138 <peter1138@openttd.org>
parents:
5602
diff
changeset
|
2825 SetMouseCursor(icon, pal); |
9238
cef3cbdc68c6
(svn r13104) -Codechange: make ResetObjectToPlace safe to be called recursively via the OnPlaceObjectAbort callback and use this knowledge to simplify closing some windows.
rubidium <rubidium@openttd.org>
parents:
9192
diff
changeset
|
2826 } |
cef3cbdc68c6
(svn r13104) -Codechange: make ResetObjectToPlace safe to be called recursively via the OnPlaceObjectAbort callback and use this knowledge to simplify closing some windows.
rubidium <rubidium@openttd.org>
parents:
9192
diff
changeset
|
2827 |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2828 } |
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2829 |
6247
57363e064324
(svn r9050) -Codechange: Foo(void) -> Foo()
rubidium <rubidium@openttd.org>
parents:
6117
diff
changeset
|
2830 void ResetObjectToPlace() |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2831 { |
11702
cdaad565efe5
(svn r16088) -Codechange: merge HighLightStyle and ViewportHighlightMode as they are basically the same thing
rubidium <rubidium@openttd.org>
parents:
11700
diff
changeset
|
2832 SetObjectToPlace(SPR_CURSOR_MOUSE, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); |
5584
4b26bd55bd24
(svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp)
KUDr <KUDr@openttd.org>
parents:
diff
changeset
|
2833 } |