]> git.jsancho.org Git - lugaru.git/blob - Source/Terrain.h
Added GPL license and headers.
[lugaru.git] / Source / Terrain.h
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3
4 This file is part of Lugaru.
5
6 Lugaru is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21
22 #ifndef _TERRAIN_H_
23 #define _TERRAIN_H_
24
25 #include "gamegl.h"
26 #include "Frustum.h"
27 #include "Lights.h"
28 #include "TGALoader.h"
29 #include "Quaternions.h"
30 #include "Quaternions.h"
31
32 #define max_terrain_size                        256             
33 #define curr_terrain_size                       size
34 #define subdivision                             64
35 #define max_patch_elements                      (max_terrain_size/subdivision)*(max_terrain_size/subdivision)*54
36
37 #define allfirst 0
38 #define mixed 1
39 #define allsecond 2
40
41 #define max_decals 1000
42
43 #define shadowdecal 0
44 #define footprintdecal 1
45 #define blooddecal 2
46 #define blooddecalfast 3
47 #define shadowdecalpermanent 4
48 #define breakdecal 5
49 #define blooddecalslow 6
50 #define bodyprintdecal 7
51
52 #define snowyenvironment 0
53 #define grassyenvironment 1
54 #define desertenvironment 2
55 //
56 // Model Structures
57 //
58
59 class Terrain{
60 public:
61         GLuint bloodtexture;
62         GLuint bloodtexture2;
63         GLuint shadowtexture;
64         GLuint footprinttexture;
65         GLuint bodyprinttexture;
66         GLuint breaktexture;
67         GLuint terraintexture;
68         short   size;
69
70         int patchobjectnum[subdivision][subdivision];
71         int patchobjects[subdivision][subdivision][300];
72
73         float scale;
74         int type;
75         float heightmap[max_terrain_size+1][max_terrain_size+1];
76         XYZ normals[max_terrain_size][max_terrain_size];
77         XYZ facenormals[max_terrain_size][max_terrain_size];
78         XYZ triangles[(max_terrain_size-1)*(max_terrain_size-1)*2][3];
79         float colors[max_terrain_size][max_terrain_size][4];
80         float opacityother[max_terrain_size][max_terrain_size];
81         float texoffsetx[max_terrain_size][max_terrain_size];
82         float texoffsety[max_terrain_size][max_terrain_size];
83         int numtris[subdivision][subdivision];
84         int textureness[subdivision][subdivision];
85
86         GLfloat vArray[(max_patch_elements)*subdivision*subdivision];
87
88         bool visible[subdivision][subdivision];
89         float avgypatch[subdivision][subdivision];
90         float maxypatch[subdivision][subdivision];
91         float minypatch[subdivision][subdivision];
92         float heightypatch[subdivision][subdivision];
93
94         int patch_elements;
95
96         float decaltexcoords[max_decals][3][2];
97         XYZ decalvertex[max_decals][3];
98         int decaltype[max_decals];
99         float decalopacity[max_decals];
100         float decalrotation[max_decals];
101         float decalalivetime[max_decals];
102         float decalbrightness[max_decals];
103         XYZ decalposition[max_decals];
104         int numdecals;
105
106         void AddObject(XYZ where, float radius,int id);
107         void DeleteDecal(int which);
108         void MakeDecal(int type, XYZ where, float size, float opacity, float rotation);
109         void MakeDecalLock(int type, XYZ where, int whichx, int whichy, float size, float opacity, float rotation);
110         int lineTerrain(XYZ p1,XYZ p2, XYZ *p);
111         float getHeight(float pointx, float pointz);
112         float getHeightExtrude(float pointx, float pointz,float point2x, float point2z);
113         float getOpacity(float pointx, float pointz);
114         XYZ getLighting(float pointx, float pointz);
115         XYZ getNormal(float pointx, float pointz);
116         void UpdateVertexArray(int whichx, int whichy);
117         void UpdateTransparency(int whichx, int whichy);
118         void UpdateTransparencyother(int whichx, int whichy);
119         void UpdateTransparencyotherother(int whichx, int whichy);
120         bool load(char *fileName);
121         void CalculateNormals();
122         void drawdecals();
123         void draw(int layer);
124         void drawpatch(int whichx, int whichy, float opacity);
125         void drawpatchother(int whichx, int whichy, float opacity);
126         void drawpatchotherother(int whichx, int whichy, float opacity);
127         void DoLighting();
128         void DoShadows();
129
130         Terrain();
131         ~Terrain();
132 };
133
134 #endif