forked from clickteam-plugin/TileMap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rundata.h
298 lines (241 loc) · 5.87 KB
/
Rundata.h
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
#pragma once
class rRundata;
typedef rRundata * LPRRDATA;
#include <list>
#include <map>
#include <string>
#include <vector>
using std::list;
using std::vector;
using std::map;
using std::string;
#include "Layer.h"
#include "Tile.h"
#include "Tileset.h"
// Simple rect structure with shorter member names than Windows' LEFT, BOTTOM,
// etc.
struct Rect {
int x1, y1, x2, y2;
void moveBy(int x, int y)
{
x1 += x;
y1 += y;
x2 += x;
y2 += y;
}
void moveTo(int x, int y)
{
x2 += x - x1;
y2 += y - y1;
x1 = x;
y1 = y;
}
};
// Tileset path mode
enum TSPMODE {
TSPM_UNTREATED, // The path is taken as-is
TSPM_APP_PATH, // The path is relative to the exe file
TSPM_MAP_PATH, // The path is relative to the TileMap file it is referenced
// in
TSPM_USER_PATH, // The path is relative to a user-specified path
TSPM_CUSTOM, // The path is an identifier that cannot be loaded directly
// from the disk
};
struct TMAPVIEW;
struct TILEMAP {
headerObject rHo;
rVal rv;
LPRRDATA rRd;
// Stable ABI for STL containers
std::size_t (*getLayerCount)(TILEMAP *);
Layer * (*getLayerAt)(TILEMAP *, std::size_t);
std::size_t (*getLayerSubLayerCount)(Layer *);
SubLayer * (*getLayerSubLayerAt)(Layer *, std::size_t);
void * _reserved[6];
Layer * currentLayer;
Tileset * currentTileset;
// Stupid std containers that don't have a stable ABI
std::vector<Layer> * layers;
std::vector<Tileset> * tilesets;
std::map<string, Property> * properties;
/// What follows is mostly cold data
// Attached viewports
list<TMAPVIEW *> * viewports;
bool redraw;
// Default size of a tile in pixels
unsigned short tileWidth;
unsigned short tileHeight;
// Depth for the tilesets (matches frame surface for max speed)
int depth;
// Compression level 0-10 for saving
char compress;
int blocks;
// Location of the root folder of tilesets (saved tileset paths will be
// relative to this)
TSPMODE tilesetPathMode;
char tilesetUserPath[256];
char appPath[256]; // Used for APP_PATH mode
// Property iterator
const char * onProperty;
// Pen used for more flexible tile drawing
struct {
// General
int x;
int y;
unsigned int width;
unsigned int height;
// Drawing
TileRange tiles;
unsigned char patternX;
unsigned char patternY;
} cursor;
};
enum ANIMMODE {
AM_LOOP,
AM_PINGPONG,
AM_ONCE,
// ...
};
struct Animation {
// Tiles per tick/sec
double speed;
// Whether to traverse columns before rows
bool columnMajor;
// Width of the tile source box
unsigned width;
// Height of the tile source box
unsigned height;
// In what order to play the frames
ANIMMODE mode;
void apply(Tile & tile, double time = 0.0, int frameOffset = 0);
};
enum OFTYPE {
OFT_SUBLAYER,
OFT_TILESETX,
OFT_TILESETY,
OFT_TILESETRANGE,
};
struct OVERLAPFLT {
OFTYPE type;
unsigned param;
int value;
};
struct TileSettings {
bool visible;
float opacity;
int offsetX;
int offsetY;
BYTE tileset;
BYTE animation;
// HWA specific
COLORREF tint;
bool transform;
float scaleX;
float scaleY;
float angle;
TileSettings()
: visible(true), opacity(1.0f), offsetX(0), offsetY(0), tint(WHITE),
transform(false), scaleX(1.0f), scaleY(1.0f), angle(0.0f), animation(0)
{
}
};
struct TMAPVIEW {
headerObject rHo; // Header
rCom rc;
rMvt rm;
rSpr rs;
rVal rv;
LPRRDATA rRd;
bool isHwa;
bool isUnicode;
// Parent Tile Map
TILEMAP * p;
// Depth of the drawing surface. We use the same depth for all tilesets to
// avoid conversion and ensure maximum speed
int depth;
// Scrolling center position
float zoom;
float zoomPointX;
float zoomPointY;
float cameraX;
float cameraY;
bool autoScroll;
// Layer boundaries to draw
unsigned minLayer;
unsigned maxLayer;
// Misc. settings
bool outsideColl;
bool fineColl;
bool zoomColl;
// Display surface
bool transparent;
COLORREF background;
cSurface * surface;
bool accurateClip;
DWORD blitFlags;
// Animation info table
DWORD lastTick;
int animMode;
double animTime;
Animation anim[255];
// Overlaps condition
Tileset * cndTileset;
cSurface * cndAlphaSurf;
Layer * cndLayer;
// On collision
Tile collTile;
// Collision margin
RECT collMargin;
// Overlap condition filter
OVERLAPFLT ovlpFilters[8];
unsigned ovlpFilterCount;
const SubLayer * sublayerCache[16];
struct {
// Configuration
bool use;
// On layer
LayerSettings * settings;
// Sub-layer linkage
struct {
unsigned char tileset;
unsigned char scaleX;
unsigned char scaleY;
unsigned char angle;
unsigned char animation;
} link;
// Get-only
unsigned index;
} layerCallback;
// Callback for rendering
struct {
// Configuration
bool use;
int borderX;
int borderY;
// On tile
Tile * tile;
TileSettings * settings;
// Get-only
int x;
int y;
} tileCallback;
};
typedef struct tagSURFACE {
headerObject rHo;
rCom rc;
rMvt rm;
rSpr rs;
rVal rv;
LPRRDATA rRd;
// Image bank and important IDs
vector<cSurface *> * surf;
cSurface * target;
short targetId;
bool targetValid;
cSurface * current;
short currentId;
short lastId;
// Functions
cSurface * (*imageAt)(tagSURFACE *, int);
int (*imageCount)(tagSURFACE *);
} SURFACE;