Files
firestorm/Gameleap/code/mw4/Tools/TCTb/MLRHeightField.hpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

223 lines
4.3 KiB
C++

#if !defined(MLR_TERRAIN_HEIGHTFIELD_HPP)
#define MLR_TERRAIN_HEIGHTFIELD_HPP
#include <MLR\MLR_I_DeT_PMesh.hpp>
// #include <Proxies\ProxyHeaders.hpp>
#include "terra\terra.hpp"
class CFinalBitmapWnd;
class CProgressDlg;
extern CFinalBitmapWnd *Wnd2D;
struct ToDrawTriangle
{
Point3D v[3];
Point3D center;
Scalar area;
void SetPoint(int idx,float x,float y,float z);
void GetSurfaceAreaAndCentroid();
Point3D &GetV0() { return v[0]; }
Point3D &GetV1() { return v[1]; }
Point3D &GetV2() { return v[2]; }
};
struct HeightFieldFileHeader {
int signature;
int version;
unsigned int totalSizeOfFile;
Scalar minX, maxX;
Scalar minZ, maxZ;
long vertexCountX;
long vertexCountZ;
};
class MLRHeightField {
public:
MLRHeightField();
~MLRHeightField();
void
TestInstance() const
{}
int GetFullPolyCount() {return (X-1)*(Z-1)*2; }
int GetOptPolyCount() {return OptPolyCount; }
ElementRenderer::GroupElement*
GetGroup()
{ return terrainGroup; }
Scalar
GetXinM()
{ return (X-1) * dX; }
Scalar
GetZinM()
{ return (Z-1) * dZ; }
int
GetX()
{ return X; }
int
GetZ()
{ return Z; }
Stuff::Scalar
GetXScale()
{ return dX; }
Stuff::Scalar
GetZScale()
{ return dZ; }
Stuff::Scalar
GetYScale()
{ return dY; }
Scalar
GetHeight(int, int);
Scalar
GetHeight(Scalar, Scalar);
Stuff::ExtentBox
GetExtents();
bool
SaveHeightFieldInformations(MString& file_name);
int
GetNrOfIZs()
{ return nrOfIZs; };
void
SetOffset(Stuff::Scalar offset)
{ Offset = offset; };
void
SetDetailTextureInfo(
const char *name,
Scalar xOff, Scalar zOff,
Scalar xFac, Scalar zFac,
MidLevelRenderer::MLRState::AlphaMode alphaMode
)
{
detailInfo.name = name;
detailInfo.xOff = xOff;
detailInfo.zOff = zOff;
detailInfo.xFac = xFac;
detailInfo.zFac = zFac;
detailInfo.alphaMode = alphaMode;
}
bool
SetMegaTexture(
int nrOfLevels,
const char *mega_base_name
);
void
OptimizeHField(int mode=0, int depth=0, int binSize=64);
Stuff::Scalar
GetOffset()
{ return Offset; };
bool
IsFullDisplayed()
{
return (terrainGroup->FindElement(fullTerrainGroup->GetName())!=NULL);
}
bool
IsOptDisplayed()
{
return (terrainGroup->FindElement(simpleTerrainGroup->GetName())!=NULL);
}
void
DisplayFull(bool bl);
void
DisplayOpt(bool bl);
ElementRenderer::GroupElement *
GetFullTerrain() { Check_Pointer(this); return fullTerrainGroup; }
ElementRenderer::ListElement *
GetOptTerrain() { Check_Pointer(this); return simpleTerrainGroup; }
protected:
void
MakeTerrainFromField();
void
Blur2D();
bool
CreateMesh(
ListElement *parent,
int index,
DynamicArrayOf<ToDrawTriangle*>& tdtrilist,
Stuff::ExtentBox*,
MidLevelRenderer::MLRState *state = NULL
);
bool
BinSort(
ListElement *parent,
int index,
DynamicArrayOf<ToDrawTriangle*>& tdtrilist,
int binSize,
CProgressDlg *pdlg,
Stuff::ExtentBox*,
MidLevelRenderer::MLRState *state = NULL
);
void
MLRHeightField::DescentToUnderMountain(
int depth,
ElementRenderer::ListElement *group,
Point3D *points,
unsigned char *onOffPoints,
int numOfTriangles,
int maxNumOfTrianglesPerMesh,
Scalar x0,
Scalar z0,
Scalar x1,
Scalar z1,
int tileX,
int tileZ,
const char *texRoot
);
// X, Z number of points, the length of the terrain would be (X-1)*dX
int X, Z, visHeight;
Stuff::Scalar dX, dY, dZ;
int OptPolyCount;
Stuff::DynamicArrayOf<float> field;
int side, meshX, meshZ;
ElementRenderer::GroupElement *terrainGroup;
ElementRenderer::GroupElement *fullTerrainGroup;
ElementRenderer::ListElement *simpleTerrainGroup;
Stuff::DynamicArrayOf<MidLevelRenderer::MLRShape*> terrain;
MidLevelRenderer::MLRState state0, state1;
MidLevelRenderer::DetailTextureInfo detailInfo;
int
nrOfIZs;
private:
Stuff::Scalar Offset;
};
#endif