blob: 4f1cefd1e8613edf44199b659d0b469dafc73913 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
Copyright (c) 1997-2006, Destroyer Studios LLC.
AUTHOR: John DiCamillo
OVERVIEW
========
Test pseudo-random terrain heightfield, based on Solid
*/
#ifndef Terrain_h
#define Terrain_h
#include "Types.h"
#include "Graphic.h"
#include "Geometry.h"
#include "Bitmap.h"
#include "Text.h"
// +--------------------------------------------------------------------+
class Projector;
class Scene;
class TerrainApron;
class TerrainClouds;
class TerrainLayer;
class TerrainPatch;
class TerrainRegion;
class Water;
// +--------------------------------------------------------------------+
struct Vec3B
{
Vec3B() { }
Vec3B(BYTE a, BYTE b, BYTE c) : x(a), y(b), z(c) { }
BYTE x, y, z;
};
// +--------------------------------------------------------------------+
class Terrain
{
public:
Terrain(TerrainRegion* region);
virtual ~Terrain();
virtual void Activate(Scene& scene);
virtual void Deactivate(Scene& scene);
virtual void SelectDetail(Projector* proj);
virtual void BuildTerrain();
virtual void BuildNormals();
virtual void ExecFrame(double seconds);
double Height(double x, double y) const;
const Vec3B* Normals() const { return terrain_normals; }
TerrainRegion* GetRegion() { return region; }
double FogFade() const { return fog_fade; }
Bitmap* Texture() { return terrain_texture; }
Bitmap* ApronTexture() { return apron_texture; }
Bitmap* WaterTexture() { return water_texture; }
Bitmap** EnvironmentTexture() { return env_texture; }
Bitmap* TileTexture(int n) { return tiles[n]; }
Bitmap* CloudTexture(int n) { return cloud_texture[n]; }
Bitmap* ShadeTexture(int n) { return shade_texture[n]; }
Bitmap* DetailTexture(int n) { return noise_texture[n]; }
Water* GetWater(int level) { return water[level]; }
List<TerrainLayer>& GetLayers() { return layers; }
bool IsFirstPatch(TerrainPatch* p) const;
static int DetailLevel() { return detail_level; }
static void SetDetailLevel(int detail);
protected:
TerrainRegion* region;
TerrainPatch** patches;
TerrainPatch** water_patches;
Water** water;
TerrainApron** aprons;
TerrainClouds** clouds;
int nclouds;
Bitmap terrain_patch;
Bitmap terrain_apron;
Bitmap* terrain_texture;
Bitmap* apron_texture;
Bitmap* water_texture;
Bitmap* env_texture[6];
Bitmap* tiles[256];
Bitmap* cloud_texture[2];
Bitmap* shade_texture[2];
Bitmap* noise_texture[2];
Vec3B* terrain_normals;
List<TerrainLayer> layers;
Text datapath;
double scale;
double mtnscale;
int subdivisions;
int patch_size;
DWORD detail_frame;
double fog_fade;
static int detail_level;
};
#endif // Terrain_h
|