Files
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

169 lines
3.8 KiB
C++

#pragma once
#define MLR_MLR_TERRAIN2_HPP
#if !defined(MLR_MLR_HPP)
#include <MLR\MLR.hpp>
#endif
#if !defined(MLR_MLR_I_DeT_TMESH_HPP)
#include <MLR\MLR_I_DeT_TMesh.hpp>
#endif
namespace MidLevelRenderer {
#define CALCULATEuvONtheFLY
#undef BORDERPIXEL
//##########################################################################
//#### MLRIndexedPolyMesh with no color no lighting w/ detail texture #####
//##########################################################################
class MLR_Terrain2:
public MLR_I_DeT_TMesh
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//
public:
static void
InitializeClass();
static void
TerminateClass();
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constructors/Destructors
//
protected:
MLR_Terrain2(
ClassData *class_data,
Stuff::MemoryStream *stream,
int version
);
~MLR_Terrain2();
public:
MLR_Terrain2(ClassData *class_data=MLR_Terrain2::DefaultData);
static MLR_Terrain2*
Make(
Stuff::MemoryStream *stream,
int version
);
void
Save(Stuff::MemoryStream *stream);
public:
virtual int
TransformAndClip(Stuff::Matrix4D *, MLRClippingState, GOSVertexPool*, FogData*, DWORD=0xffffffff, bool=false);
virtual void
TransformNoClip(Stuff::Matrix4D*, GOSVertexPool*, FogData*, DWORD=0xffffffff, bool=false);
void
SetCurrentDepth(BYTE d);
BYTE
GetCurrentDepth()
{ Check_Object(this); return currentDepth; }
void
SetDepthData(BYTE md, BYTE mad)
{ Check_Object(this); maxDepth = md; maxAllDepth = mad; }
void
SetTileData(BYTE tx, BYTE tz)
{ Check_Object(this); tileX = tx; tileZ = tz; }
void
GetTileData(BYTE& tx, BYTE& tz)
{ Check_Object(this); tx = tileX; tz = tileZ; }
void
SetFrame(int res, Scalar xMin, Scalar zMin, Scalar xMax, Scalar zMax)
{
Check_Object(this);
frame[res][0] = xMin;
frame[res][1] = zMin;
frame[res][2] = xMax;
frame[res][3] = zMax;
OneOverX[res] = 1.0f/(frame[res][2] - frame[res][0]);
OneOverZ[res] = 1.0f/(frame[res][3] - frame[res][1]);
}
Scalar
GetFrame(int res, int p)
{ Check_Object(this); return frame[res][p]; }
#ifdef BORDERPIXEL
void
SetBorderPixel(Stuff::Scalar bp)
{ Check_Object(this); borderPixelFun = bp; }
#endif
void
CalculateUVs();
void
CalculateUV(int i, Scalar &u, Scalar &v);
void
SetLevelTexture(int lev, int handle);
int
GetLevelTexture(int lev)
{ Check_Object(this); Verify(lev>=0 && lev<8); return textures[lev]; }
void
LightMapLighting(MLRLight*);
enum TerrainType {
UnderWater = 1
};
bool IsTerrain(TerrainType tt)
{ Check_Object(this); return (tt & type)>0; }
void SetTerrain(TerrainType tt)
{ Check_Object(this); type |= (BYTE)tt; }
virtual MLRPrimitiveBase*
StepOnMe(const Stuff::LinearMatrix4D& foot, Stuff::Scalar radius, MLRTexture *tex);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data Support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void
TestInstance() const;
protected:
int textures[8];
Scalar frame[8][4];
Scalar OneOverX[8];
Scalar OneOverZ[8];
BYTE tileX, tileZ;
BYTE currentDepth, maxDepth, maxAllDepth;
BYTE type;
#ifdef BORDERPIXEL
Stuff::Scalar borderPixelFun;
#endif
#ifndef CALCULATEuvONtheFLY
Stuff::DynamicArrayOf<Vector2DScalar>
dynamicUVs;
#endif
static Stuff::DynamicArrayOf<Vector2DScalar> *detailTexCoords; // Base address of texture coordinate list
};
}