Serious-Engine/Sources/Engine/Terrain/TerrainLayer.h
2016-03-11 18:20:51 -06:00

135 lines
4.2 KiB
C++

/* 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