cm_randomterrain.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #if !defined(CM_RANDOMTERRAIN_H_INC)
  3. #define CM_RANDOMTERRAIN_H_INC
  4. #ifdef DEBUG_LINKING
  5. #pragma message("...including cm_randomterrain.h")
  6. #endif
  7. //class CPathInfo;
  8. #define SPLINE_MERGE_SIZE 3
  9. #define CIRCLE_STAMP_SIZE 128
  10. class CPathInfo
  11. {
  12. private:
  13. vec4_t *mPoints, *mWork;
  14. vec_t *mWeights;
  15. int mNumPoints;
  16. float mMinWidth, mMaxWidth;
  17. float mInc;
  18. float mDepth, mBreadth;
  19. float mDeviation;
  20. byte mCircleStamp[CIRCLE_STAMP_SIZE][CIRCLE_STAMP_SIZE];
  21. void CreateCircle(void);
  22. void Stamp(int x, int y, int size, int depth, unsigned char *Data, int DataWidth, int DataHeight);
  23. public:
  24. CPathInfo(CCMLandScape *landscape, int numPoints, float bx, float by, float ex, float ey,
  25. float minWidth, float maxWidth, float depth, float deviation, float breadth,
  26. CPathInfo *Connected, unsigned CreationFlags);
  27. ~CPathInfo(void);
  28. int GetNumPoints(void) { return mNumPoints; }
  29. float *GetPoint(int index) { return mPoints[index]; }
  30. float GetWidth(int index) { return mPoints[index][3]; }
  31. void GetInfo(float PercentInto, vec4_t Coord, vec4_t Vector);
  32. void DrawPath(unsigned char *Data, int DataWidth, int DataHeight );
  33. };
  34. const int MAX_RANDOM_PATHS = 30;
  35. // Path Creation Flags
  36. #define PATH_CREATION_CONNECT_FRONT 0x00000001
  37. class CRandomTerrain
  38. {
  39. private:
  40. class CCMLandScape *mLandScape;
  41. int mWidth;
  42. int mHeight;
  43. int mArea;
  44. int mBorder;
  45. byte *mGrid;
  46. CPathInfo *mPaths[MAX_RANDOM_PATHS];
  47. public:
  48. CRandomTerrain(void);
  49. ~CRandomTerrain(void);
  50. CCMLandScape *GetLandScape(void) { return mLandScape; }
  51. const vec3pair_t &GetBounds(void) const { return mLandScape->GetBounds(); }
  52. void rand_seed(int seed) { mLandScape->rand_seed(seed); }
  53. int get_rand_seed(void) { return mLandScape->get_rand_seed();}
  54. float flrand(float min, float max) { return mLandScape->flrand(min, max); }
  55. int irand(int min, int max) { return mLandScape->irand(min, max); }
  56. void Init(class CCMLandScape *landscape, byte *data, int width, int height);
  57. void Shutdown(void);
  58. bool CreatePath(int PathID, int ConnectedID, unsigned CreationFlags, int numPoints,
  59. float bx, float by, float ex, float ey,
  60. float minWidth, float maxWidth, float depth, float deviation, float breadth );
  61. bool GetPathInfo(int PathNum, float PercentInto, vec2_t Coord, vec2_t Vector);
  62. void ParseGenerate(const char *GenerateFile);
  63. void Smooth ( void );
  64. void Generate(int symmetric);
  65. void ClearPaths(void);
  66. };
  67. unsigned RMG_CreateSeed(char *TextSeed);
  68. #endif // CM_RANDOM_H_INC