]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Environment/Terrain.hpp
Update copyright year to 2017
[lugaru.git] / Source / Environment / Terrain.hpp
index 3c30e3d6724f461d1144ed1fa2c5cbd36fb0e893..6132c6a48ba07a91f2e1e779a9f16e478360480f 100644 (file)
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 2003, 2010 - Wolfire Games
-Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
+Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
 
 This file is part of Lugaru.
 
@@ -22,10 +22,11 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #define _TERRAIN_HPP_
 
 #include "Environment/Lights.hpp"
+#include "Graphic/Decal.hpp"
 #include "Graphic/gamegl.hpp"
 #include "Graphic/Texture.hpp"
 #include "Math/Frustum.hpp"
-#include "Math/Quaternions.hpp"
+#include "Math/XYZ.hpp"
 #include "Utils/ImageIO.hpp"
 
 #define max_terrain_size        256
@@ -39,15 +40,6 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 
 #define max_decals 1000
 
-#define shadowdecal 0
-#define footprintdecal 1
-#define blooddecal 2
-#define blooddecalfast 3
-#define shadowdecalpermanent 4
-#define breakdecal 5
-#define blooddecalslow 6
-#define bodyprintdecal 7
-
 #define snowyenvironment 0
 #define grassyenvironment 1
 #define desertenvironment 2
@@ -67,8 +59,7 @@ public:
     Texture terraintexture;
     short size;
 
-    int patchobjectnum[subdivision][subdivision];
-    int patchobjects[subdivision][subdivision][300];
+    std::vector<unsigned int> patchobjects[subdivision][subdivision];
 
     float scale;
     int type;
@@ -93,40 +84,34 @@ public:
 
     int patch_elements;
 
-    float decaltexcoords[max_decals][3][2];
-    XYZ decalvertex[max_decals][3];
-    int decaltype[max_decals];
-    float decalopacity[max_decals];
-    float decalrotation[max_decals];
-    float decalalivetime[max_decals];
-    float decalbrightness[max_decals];
-    XYZ decalposition[max_decals];
-    int numdecals;
+    std::vector<Decal> decals;
 
     void AddObject(XYZ where, float radius, int id);
     void DeleteDecal(int which);
-    void MakeDecal(int type, XYZ where, float size, float opacity, float rotation);
-    void MakeDecalLock(int type, XYZ where, int whichx, int whichy, float size, float opacity, float rotation);
+    void MakeDecal(decal_type type, XYZ where, float size, float opacity, float rotation);
+    void MakeDecalLock(decal_type type, XYZ where, int whichx, int whichy, float size, float opacity, float rotation);
     int lineTerrain(XYZ p1, XYZ p2, XYZ *p);
     float getHeight(float pointx, float pointz);
     float getOpacity(float pointx, float pointz);
     XYZ getLighting(float pointx, float pointz);
     XYZ getNormal(float pointx, float pointz);
     void UpdateVertexArray(int whichx, int whichy);
-    void UpdateTransparency(int whichx, int whichy);
-    void UpdateTransparencyother(int whichx, int whichy);
-    void UpdateTransparencyotherother(int whichx, int whichy);
     bool load(const std::string& fileName);
     void CalculateNormals();
     void drawdecals();
     void draw(int layer);
-    void drawpatch(int whichx, int whichy, float opacity);
-    void drawpatchother(int whichx, int whichy, float opacity);
-    void drawpatchotherother(int whichx, int whichy, float opacity);
     void DoShadows();
+    void deleteDeadDecals();
 
     Terrain();
-    ~Terrain();
+
+private:
+    void drawpatch(int whichx, int whichy, float opacity);
+    void drawpatchother(int whichx, int whichy, float opacity);
+    void drawpatchotherother(int whichx, int whichy);
+    void UpdateTransparency(int whichx, int whichy);
+    void UpdateTransparencyother(int whichx, int whichy);
+    void UpdateTransparencyotherother(int whichx, int whichy);
 };
 
 #endif