/* Copyright (c) 2002-2012 Croteam Ltd. This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation This program 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. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef SE_INCL_TERRAIN_LAYER_H #define SE_INCL_TERRAIN_LAYER_H #ifdef PRAGMA_ONCE #pragma once #endif #include <Engine/Graphics/Texture.h> enum LayerType { LT_NORMAL = 0, LT_TILE, }; #define TL_FLIPX_SHIFT 4 #define TL_FLIPY_SHIFT 5 #define TL_SWAPXY_SHIFT 6 #define TL_VISIBLE_SHIFT 7 #define TL_TILE_INDEX 0x0F #define TL_VISIBLE (1<<TL_VISIBLE_SHIFT) #define TL_FLIPX (1<<TL_FLIPX_SHIFT) #define TL_FLIPY (1<<TL_FLIPY_SHIFT) #define TL_SWAPXY (1<<TL_SWAPXY_SHIFT) class ENGINE_API CTerrainLayer { public: CTerrainLayer(); ~CTerrainLayer(); // Import layer mask from targa file void ImportLayerMask_t(CTFileName fnLayerMask); // Export layer mask to targa file void ExportLayerMask_t(CTFileName fnLayerMask); // Set layer size void SetLayerSize(INDEX iTerrainWidth, INDEX iTerrainHeight); // Set layer texture void SetLayerTexture_t(CTFileName fnTexture); // Set num of tiles in one row void SetTilesPerRow(INDEX ctTilesInRow); // Get num of tiles in one row INDEX GetTilesPerRow(void); // Get thumbnail CTextureData *GetThumbnail(INDEX iWidth, INDEX iHeight); // Reset layer mask void ResetLayerMask(UBYTE ubMaskFill); // Reset layer params void ResetLayerParams(); // Read from stream. void Read_t(CTStream *istrFile,INDEX iSavedVersion); // throw char * // Write to stream. void Write_t( CTStream *ostrFile); // throw char * // Copy terrain data from other terrain void Copy(const CTerrainLayer &tlOther); void operator=(const CTerrainLayer &tlOther); // Clear layer void Clear(); // Count used memory SLONG GetUsedMemory(void); public: CTextureData *tl_ptdTexture; // Texture this layer is using UBYTE *tl_aubColors; // Array of vertex alpha colors for this layer CTextureData tl_tdThumbNail; // Mask thumbnail (used only in we) INDEX tl_iMaskWidth; // Width of terrain layer mask INDEX tl_iMaskHeight; // Height of terrain layer mask CTString tl_strName; // Layer name BOOL tl_bVisible; // Is layer visible COLOR tl_colMultiply; // Color of layer FLOAT tl_fSmoothness; // Layer smoothness LayerType tl_ltType; // Layer type FLOAT tl_fRotateX; FLOAT tl_fRotateY; FLOAT tl_fStretchX; FLOAT tl_fStretchY; FLOAT tl_fOffsetX; FLOAT tl_fOffsetY; BOOL tl_bAutoRegenerated; FLOAT tl_fCoverage; FLOAT tl_fCoverageNoise; FLOAT tl_fCoverageRandom; BOOL tl_bApplyMinAltitude; FLOAT tl_fMinAltitude; FLOAT tl_fMinAltitudeFade; FLOAT tl_fMinAltitudeNoise; FLOAT tl_fMinAltitudeRandom; BOOL tl_bApplyMaxAltitude; FLOAT tl_fMaxAltitude; FLOAT tl_fMaxAltitudeFade; FLOAT tl_fMaxAltitudeNoise; FLOAT tl_fMaxAltitudeRandom; BOOL tl_bApplyMinSlope; FLOAT tl_fMinSlope; FLOAT tl_fMinSlopeFade; FLOAT tl_fMinSlopeNoise; FLOAT tl_fMinSlopeRandom; BOOL tl_bApplyMaxSlope; FLOAT tl_fMaxSlope; FLOAT tl_fMaxSlopeFade; FLOAT tl_fMaxSlopeNoise; FLOAT tl_fMaxSlopeRandom; // private: public: INDEX tl_ctTilesInRow; // Number of tiles in one row (used if this is tile layer) INDEX tl_ctTilesInCol; INDEX tl_iSelectedTile; // GUI variable, selected tile for this layer PIX tl_pixTileWidth; PIX tl_pixTileHeight; FLOAT tl_fTileU; FLOAT tl_fTileV; }; #endif