Initial commit.
This commit is contained in:
97
codemp/rmg/rm_terrain.h
Normal file
97
codemp/rmg/rm_terrain.h
Normal file
@@ -0,0 +1,97 @@
|
||||
#pragma once
|
||||
#if !defined(RM_TERRAIN_H_INC)
|
||||
#define RM_TERRAIN_H_INC
|
||||
|
||||
#define MAX_RANDOM_MODELS 8
|
||||
|
||||
class CRandomModel
|
||||
{
|
||||
private:
|
||||
char mModelName[MAX_QPATH];
|
||||
float mFrequency;
|
||||
float mMinScale;
|
||||
float mMaxScale;
|
||||
public:
|
||||
CRandomModel(void) { }
|
||||
~CRandomModel(void) { }
|
||||
|
||||
// Accessors
|
||||
const bool GetModel( void ) const { return(!!strlen(mModelName)); }
|
||||
const char *GetModelName( void ) const { return(mModelName); }
|
||||
void SetModel(const char *name) { Com_sprintf(mModelName, MAX_QPATH, "%s.md3", name); }
|
||||
const float GetFrequency(void) const { return(mFrequency); }
|
||||
void SetFrequency(const float freq) { mFrequency = freq; }
|
||||
const float GetMinScale(void) const { return(mMinScale); }
|
||||
void SetMinScale(const float minscale) { mMinScale = minscale; }
|
||||
const float GetMaxScale(void) const { return(mMaxScale); }
|
||||
void SetMaxScale(const float maxscale) { mMaxScale = maxscale; }
|
||||
};
|
||||
|
||||
class CCGHeightDetails
|
||||
{
|
||||
private:
|
||||
int mNumModels;
|
||||
int mTotalFrequency;
|
||||
CRandomModel mModels[MAX_RANDOM_MODELS];
|
||||
public:
|
||||
// Constructors
|
||||
CCGHeightDetails( void ) { memset(this, 0, sizeof(*this)); }
|
||||
~CCGHeightDetails( void ) { }
|
||||
|
||||
// Accessors
|
||||
const int GetNumModels(void) const { return(mNumModels); }
|
||||
const int GetAverageFrequency(void) const { return(mTotalFrequency / mNumModels); }
|
||||
|
||||
// Prototypes
|
||||
void AddModel(const CRandomModel *hd);
|
||||
CRandomModel *GetRandomModel(CCMLandScape *land);
|
||||
};
|
||||
|
||||
class CCGPatch
|
||||
{
|
||||
private:
|
||||
class CCMLandScape *owner;
|
||||
class CCGLandScape *localowner;
|
||||
CCMPatch *common;
|
||||
public:
|
||||
};
|
||||
|
||||
class CRMLandScape
|
||||
{
|
||||
private:
|
||||
CCMLandScape *common;
|
||||
|
||||
byte *mDensityMap; // Data image of model densities
|
||||
int mModelCount; // Count of spawned client models
|
||||
CCGHeightDetails mHeightDetails[HEIGHT_RESOLUTION]; // Array of info specific to height
|
||||
|
||||
public:
|
||||
CRMLandScape(void);
|
||||
~CRMLandScape(void);
|
||||
|
||||
// Accessors
|
||||
void SetCommon(CCMLandScape *landscape) { common = landscape; }
|
||||
const CCMLandScape *GetCommon( void ) const { return(common); }
|
||||
const thandle_t GetCommonId( void ) const { return(common->GetTerrainId()); }
|
||||
const int GetTerxels(void) const { return(common->GetTerxels()); }
|
||||
const int GetRealWidth(void) const { return(common->GetRealWidth()); }
|
||||
const float GetPatchScalarSize(void) const { return(common->GetPatchScalarSize()); }
|
||||
const CCGHeightDetails *GetHeightDetail(int height) const { return(mHeightDetails + height); }
|
||||
void ClearModelCount(void) { mModelCount = 0; }
|
||||
const int GetModelCount(void) const { return(mModelCount); }
|
||||
|
||||
// Prototypes
|
||||
void SetShaders(const int height, const qhandle_t shader);
|
||||
void AddModel(const int height, int maxheight, const CRandomModel *hd);
|
||||
void LoadMiscentDef(const char *td);
|
||||
void LoadDensityMap(const char *td);
|
||||
void SpawnPatchModels(CCMPatch *patch);
|
||||
void Sprinkle(CCMPatch *patch, CCGHeightDetails *hd, int level);
|
||||
void CreateRandomDensityMap(byte *imageData, int width, int height, int seed);
|
||||
};
|
||||
|
||||
void RM_CreateRandomModels(int terrainId, const char *terrainInfo);
|
||||
void RM_InitTerrain(void);
|
||||
void RM_ShutdownTerrain(void);
|
||||
|
||||
#endif // RM_TERRAIN_H_INC
|
||||
Reference in New Issue
Block a user