Files
@ r313:9c9b258ea6c5
Branch filter:
Location: cpp/openttd-patchpack/source/viewport.h
r313:9c9b258ea6c5
2.8 KiB
text/x-c
(svn r319) -Fix: [ 1029064 ] Building a station acted weird in some rare situations
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #ifndef VIEWPORT_H
#define VIEWPORT_H
struct ViewPort {
int left,top; // screen coordinates for the viewport
int width, height; // screen width/height for the viewport
int virtual_left, virtual_top; // virtual coordinates
int virtual_width, virtual_height; // these are just width << zoom, height << zoom
byte zoom;
};
/* viewport.c */
Point MapXYZToViewport(ViewPort *vp, uint x, uint y, uint z);
void AssignWindowViewport(Window *w, int x, int y,
int width, int height, uint32 follow_flags, byte zoom);
void SetViewportPosition(Window *w, int x, int y);
ViewPort *IsPtInWindowViewport(Window *w, int x, int y);
Point GetTileBelowCursor();
void ZoomInOrOutToCursorWindow(bool in, Window * w);
Point GetTileZoomCenterWindow(bool in, Window * w);
void UpdateViewportPosition(Window *w);
void OffsetGroundSprite(int x, int y);
void DrawGroundSprite(uint32 image);
void DrawGroundSpriteAt(uint32 image, int16 x, int16 y, byte z);
void AddSortableSpriteToDraw(uint32 image, int x, int y, int w, int h, byte dz, byte z);
void *AddStringToDraw(int x, int y, StringID string, uint32 params_1, uint32 params_2);
void AddChildSpriteScreen(uint32 image, int x, int y);
void StartSpriteCombine();
void EndSpriteCombine();
void HandleViewportClicked(ViewPort *vp, int x, int y);
void PlaceObject();
void SetRedErrorSquare(TileIndex tile);
void SetTileSelectSize(int w, int h);
void SetTileSelectBigSize(int ox, int oy, int sx, int sy);
void VpStartPlaceSizing(uint tile, int user);
void VpStartPreSizing();
void VpSetPresizeRange(uint from, uint to);
void VpSetPlaceSizingLimit(int limit);
Vehicle *CheckMouseOverVehicle();
enum {
VPM_X_OR_Y = 0,
VPM_FIX_X = 1,
VPM_FIX_Y = 2,
VPM_RAILDIRS = 3,
VPM_X_AND_Y = 4,
VPM_X_AND_Y_LIMITED = 5,
VPM_SIGNALDIRS = 6,
};
void VpSelectTilesWithMethod(int x, int y, int method);
enum {
HT_NONE = 0,
HT_RECT = 0x80,
HT_POINT = 0x40,
HT_LINE = 0x20,
};
typedef struct TileHighlightData {
Point size;
Point outersize;
Point pos;
Point offs;
Point new_pos;
Point new_size;
Point new_outersize;
Point selend, selstart;
byte dirty;
byte sizelimit;
byte drawstyle;
byte new_drawstyle;
byte next_drawstyle;
byte place_mode;
byte window_class;
bool make_square_red;
uint16 window_number;
int userdata;
TileIndex redsq;
} TileHighlightData;
enum AnimCursors {
ANIMCURSOR_DEMOLISH = -1,
ANIMCURSOR_LOWERLAND = -2,
ANIMCURSOR_RAISELAND = -3,
ANIMCURSOR_PICKSTATION = -4,
ANIMCURSOR_BUILDSIGNALS = -5,
};
// common button handler
bool HandlePlacePushButton(Window *w, int widget, uint32 cursor, int mode, PlaceProc *placeproc);
/* viewport.c */
VARDEF ViewPort _viewports[18];
VARDEF TileHighlightData _thd;
VARDEF uint32 _active_viewports;
VARDEF Point _tile_fract_coords;
extern TileHighlightData * const _thd_ptr;
#endif
|