Serious-Engine/Sources/WorldEditor/TerrainEditing.h

144 lines
4.2 KiB
C
Raw Normal View History

2016-03-12 01:20:51 +01:00
/* 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. */
2016-03-11 14:57:17 +01:00
#ifndef TERRAINEDITING_H
#define TERRAINEDITING_H
#include <Engine/Terrain/TerrainEditing.h>
#define FLT_FINEBLUR 0
#define FLT_SHARPEN 1
#define FLT_EMBOSS 2
#define FLT_EDGEDETECT 3
#define FLT_COUNT 4
enum ETerrainEdit {
TE_NONE,
// brush based altitude editing tools
TE_BRUSH_ALTITUDE_START,
TE_BRUSH_ALTITUDE_PAINT,
TE_BRUSH_ALTITUDE_SMOOTH,
TE_BRUSH_ALTITUDE_FILTER,
TE_BRUSH_ALTITUDE_MINIMUM,
TE_BRUSH_ALTITUDE_MAXIMUM,
TE_BRUSH_ALTITUDE_FLATTEN,
TE_BRUSH_ALTITUDE_POSTERIZE,
TE_BRUSH_ALTITUDE_RND_NOISE,
TE_BRUSH_ALTITUDE_CONTINOUS_NOISE,
TE_BRUSH_ALTITUDE_END,
// brush based layer texture editing tools
TE_BRUSH_LAYER_START,
TE_BRUSH_LAYER_PAINT,
TE_BRUSH_LAYER_SMOOTH,
TE_BRUSH_LAYER_FILTER,
TE_BRUSH_LAYER_RND_NOISE,
TE_BRUSH_LAYER_CONTINOUS_NOISE,
TE_BRUSH_LAYER_END,
// edge editing tools
TE_BRUSH_EDGE_START,
TE_BRUSH_EDGE_ERASE,
TE_BRUSH_EDGE_END,
// whole terrain altitude operations
TE_ALTITUDE_START,
TE_ALTITUDE_SMOOTH,
TE_ALTITUDE_FILTER,
TE_ALTITUDE_MINIMUM,
TE_ALTITUDE_MAXIMUM,
TE_ALTITUDE_FLATTEN,
TE_ALTITUDE_POSTERIZE,
TE_ALTITUDE_RND_NOISE,
TE_ALTITUDE_CONTINOUS_NOISE,
TE_ALTITUDE_END,
// generate terrain
TE_GENERATE_TERRAIN,
// equalize heightmap
TE_ALTITUDE_EQUALIZE,
// tile painting
TE_TILE_PAINT,
// whole layer operations
TE_LAYER_START,
TE_LAYER_SMOOTH,
TE_LAYER_FILTER,
TE_LAYER_RND_NOISE,
TE_LAYER_CONTINOUS_NOISE,
TE_CLEAR_LAYER_MASK,
TE_FILL_LAYER_MASK,
TE_LAYER_END,
};
class CTerrainUndo {
public:
ULONG tu_ulEntityID;
UWORD *tu_puwUndoBuffer;
UWORD *tu_puwRedoBuffer;
Rect tu_rcRect;
BufferType tu_btUndoBufferType;
INDEX tu_iUndoBufferData;
// constructor
CTerrainUndo();
};
class CTileInfo {
public:
INDEX ti_ix;
INDEX ti_iy;
BOOL ti_bSwapXY;
BOOL ti_bFlipX;
BOOL ti_bFlipY;
CTileInfo();
};
extern CTextureData *_ptdContinousRandomNoise;
extern CTextureData *_ptdDistributionRandomNoise;
BOOL SetupContinousNoiseTexture( void);
void FreeContinousNoiseTexture( void);
BOOL SetupDistributionNoiseTexture( void);
void FreeDistributionNoiseTexture( void);
void RandomizeWhiteNoise(void);
FLOAT *GenerateTerrain_FBMBuffer(PIX pixW, PIX pixH, INDEX ctOctaves, FLOAT fHighFrequencyStep,
FLOAT fStepFactor, FLOAT fMaxAmplitude, FLOAT fAmplitudeDecreaser,
BOOL bAddNegativeValues, BOOL bRandomOffest, FLOAT &fMin, FLOAT &fMax);
void GenerateLayerDistribution(INDEX iForLayer, Rect rect);
void GenerateLayerDistribution(INDEX iLayer);
void OptimizeLayers(void);
void RecalculateShadows(void);
void SetHMPixel( UWORD pix, INDEX x, INDEX y);
UWORD GetHMPixel(INDEX x, INDEX y);
void EditTerrain(CTextureData *ptdBrush, FLOAT3D &vHitPoint, FLOAT fStrength, ETerrainEdit teTool);
void UpdateLayerDistribution(void);
void ApplyFilterOntoTerrain(void);
void ApplySmoothOntoTerrain(void);
void ApplyContinousNoiseOntoTerrain(void);
void ApplyRndNoiseOntoTerrain(void);
void ApplyGenerateTerrain(void);
void ApplyEqualizeOntoTerrain(void);
void ApplyMinimumOntoTerrain(void);
void ApplyMaximumOntoTerrain(void);
void ApplyFlattenOntoTerrain(void);
void ApplyPosterizeOntoTerrain(void);
void DiscardLayerDistribution(Rect rect);
void ApplyTerrainUndo(CTerrainUndo *ptrud);
void ApplyTerrainRedo(CTerrainUndo *ptrud);
void DeleteTerrainUndo(CWorldEditorDoc* pDoc);
void TerrainEditBegin(void);
void TerrainEditEnd(void);
void ObtainLayerTileInfo(CDynamicContainer<CTileInfo> *pdcTileInfo, CTextureData *ptdTexture, INDEX &ctTilesPerRaw);
2016-03-12 01:20:51 +01:00
#endif // TERRAINEDITING_H