00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __TILESET_H__
00031 #define __TILESET_H__
00032
00034
00035
00036
00037
00038
00200
00201
00202
00203
00204 #include "vec2i.h"
00205
00206
00207 extern PixelSize PixelTileSize;
00208
00216 enum TileType {
00217 TileTypeUnknown,
00218 TileTypeWood,
00219 TileTypeRock,
00220 TileTypeCoast,
00221 TileTypeHumanWall,
00222 TileTypeOrcWall,
00223 TileTypeWater
00224 };
00225
00227 struct TileInfo {
00228 unsigned char BaseTerrain;
00229 unsigned char MixTerrain;
00230 };
00231
00233 struct SolidTerrainInfo {
00234 std::string TerrainName;
00235
00236 };
00237
00238 #define MapFieldWall 0x0200
00239 #define MapFieldRocks 0x0400
00240 #define MapFieldForest 0x0800
00241
00243 class CTileset
00244 {
00245 public:
00246 void Clear() {
00247 Name.clear();
00248 ImageFile.clear();
00249 NumTiles = 0;
00250 PixelTileSize.x = PixelTileSize.y = 0;
00251 delete[] Table;
00252 Table = NULL;
00253 delete[] FlagsTable;
00254 FlagsTable = NULL;
00255 delete[] Tiles;
00256 Tiles = NULL;
00257 delete[] TileTypeTable;
00258 TileTypeTable = NULL;
00259 delete[] SolidTerrainTypes;
00260 SolidTerrainTypes = NULL;
00261 NumTerrainTypes = 0;
00262 TopOneTree = 0;
00263 MidOneTree = 0;
00264 BotOneTree = 0;
00265 RemovedTree = 0;
00266 memset(GrowingTree, 0, sizeof(GrowingTree));
00267 memset(WoodTable, 0, sizeof(WoodTable));
00268 delete[] MixedLookupTable;
00269 MixedLookupTable = NULL;
00270 TopOneRock = 0;
00271 MidOneRock = 0;
00272 BotOneRock = 0;
00273 RemovedRock = 0;
00274 memset(RockTable, 0, sizeof(RockTable));
00275 memset(HumanWallTable, 0, sizeof(HumanWallTable));
00276 memset(OrcWallTable, 0, sizeof(OrcWallTable));
00277 }
00278 std::string Name;
00279 std::string ImageFile;
00280
00281 int NumTiles;
00282 PixelSize PixelTileSize;
00283 unsigned short *Table;
00284 unsigned short *FlagsTable;
00285
00286 TileInfo *Tiles;
00287
00288
00289 unsigned char *TileTypeTable;
00290
00291 unsigned int NumTerrainTypes;
00292 SolidTerrainInfo *SolidTerrainTypes;
00293
00294 unsigned TopOneTree;
00295 unsigned MidOneTree;
00296 unsigned BotOneTree;
00297 int RemovedTree;
00298 unsigned GrowingTree[2];
00299 int WoodTable[20];
00300 int *MixedLookupTable;
00301 unsigned TopOneRock;
00302 unsigned MidOneRock;
00303 unsigned BotOneRock;
00304 int RemovedRock;
00305 int RockTable[20];
00306
00307 unsigned HumanWallTable[16];
00308 unsigned OrcWallTable[16];
00309
00310 bool IsSeenTile(unsigned short type, unsigned short seen) const {
00311 if (TileTypeTable) {
00312 switch (type) {
00313 case MapFieldForest:
00314 return TileTypeTable[seen] == TileTypeWood;
00315 case MapFieldRocks:
00316 return TileTypeTable[seen] == TileTypeRock;
00317 default:
00318 return false;
00319 }
00320 }
00321 return false;
00322 };
00323
00324 };
00325
00326
00327
00328
00329
00330 extern void LoadTileset();
00331 extern void CleanTilesets();
00332 extern void TilesetCclRegister();
00333
00335
00336 #endif // !__TILESET_H__