]> git.jsancho.org Git - lugaru.git/commitdiff
Added an enum for decal type
authorCôme Chilliet <come@chilliet.eu>
Fri, 23 Dec 2016 00:22:15 +0000 (01:22 +0100)
committerCôme Chilliet <come@chilliet.eu>
Fri, 23 Dec 2016 00:22:15 +0000 (01:22 +0100)
Source/Environment/Terrain.cpp
Source/Environment/Terrain.hpp
Source/Graphic/Decal.cpp
Source/Graphic/Decal.hpp

index d22ecdfc749cbc1c7ad05aaff15a7b65e4f5d8f9..5d74d5491dbc67915f6355b1839f7c286af008b7 100644 (file)
@@ -1014,44 +1014,46 @@ void Terrain::drawdecals()
         for (unsigned int i = 0; i < decals.size(); i++) {
             if (decals[i].type == blooddecalfast && decals[i].alivetime < 2)
                 decals[i].alivetime = 2;
-            if ((decals[i].type == shadowdecal || decals[i].type == shadowdecalpermanent) && decals[i].type != lasttype) {
-                shadowtexture.bind();
-                if (!blend) {
-                    blend = 1;
-                    glAlphaFunc(GL_GREATER, 0.0001);
-                    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+            if (decals[i].type != lasttype) {
+                if (decals[i].type == shadowdecal || decals[i].type == shadowdecalpermanent) {
+                    shadowtexture.bind();
+                    if (!blend) {
+                        blend = 1;
+                        glAlphaFunc(GL_GREATER, 0.0001);
+                        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                    }
                 }
-            }
-            if (decals[i].type == footprintdecal && decals[i].type != lasttype) {
-                footprinttexture.bind();
-                if (!blend) {
-                    blend = 1;
-                    glAlphaFunc(GL_GREATER, 0.0001);
-                    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                if (decals[i].type == footprintdecal) {
+                    footprinttexture.bind();
+                    if (!blend) {
+                        blend = 1;
+                        glAlphaFunc(GL_GREATER, 0.0001);
+                        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                    }
                 }
-            }
-            if (decals[i].type == bodyprintdecal && decals[i].type != lasttype) {
-                bodyprinttexture.bind();
-                if (!blend) {
-                    blend = 1;
-                    glAlphaFunc(GL_GREATER, 0.0001);
-                    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                if (decals[i].type == bodyprintdecal) {
+                    bodyprinttexture.bind();
+                    if (!blend) {
+                        blend = 1;
+                        glAlphaFunc(GL_GREATER, 0.0001);
+                        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+                    }
                 }
-            }
-            if ((decals[i].type == blooddecal || decals[i].type == blooddecalslow) && decals[i].type != lasttype) {
-                bloodtexture.bind();
-                if (blend) {
-                    blend = 0;
-                    glAlphaFunc(GL_GREATER, 0.15);
-                    glBlendFunc(GL_ONE, GL_ZERO);
+                if (decals[i].type == blooddecal || decals[i].type == blooddecalslow) {
+                    bloodtexture.bind();
+                    if (blend) {
+                        blend = 0;
+                        glAlphaFunc(GL_GREATER, 0.15);
+                        glBlendFunc(GL_ONE, GL_ZERO);
+                    }
                 }
-            }
-            if ((decals[i].type == blooddecalfast) && decals[i].type != lasttype) {
-                bloodtexture2.bind();
-                if (blend) {
-                    blend = 0;
-                    glAlphaFunc(GL_GREATER, 0.15);
-                    glBlendFunc(GL_ONE, GL_ZERO);
+                if (decals[i].type == blooddecalfast) {
+                    bloodtexture2.bind();
+                    if (blend) {
+                        blend = 0;
+                        glAlphaFunc(GL_GREATER, 0.15);
+                        glBlendFunc(GL_ONE, GL_ZERO);
+                    }
                 }
             }
             if (decals[i].type == shadowdecal || decals[i].type == shadowdecalpermanent) {
@@ -1126,11 +1128,9 @@ void Terrain::drawdecals()
 
 void Terrain::deleteDeadDecals()
 {
-    for (unsigned int i = 0; i < decals.size(); ) {
+    for (int i = decals.size() - 1; i >= 0; i--) {
         if ((decals[i].type == blooddecal || decals[i].type == blooddecalslow) && decals[i].alivetime < 2) {
             DeleteDecal(i);
-        } else {
-            i++;
         }
     }
 }
@@ -1176,7 +1176,7 @@ void Terrain::DeleteDecal(int which)
     }
 }
 
-void Terrain::MakeDecal(int type, XYZ where, float size, float opacity, float rotation)
+void Terrain::MakeDecal(decal_type type, XYZ where, float size, float opacity, float rotation)
 {
     if (decalstoggle) {
         if (opacity > 0 && size > 0) {
@@ -1210,7 +1210,7 @@ void Terrain::MakeDecal(int type, XYZ where, float size, float opacity, float ro
     }
 }
 
-void Terrain::MakeDecalLock(int type, XYZ where, int whichx, int whichy, float size, float opacity, float rotation)
+void Terrain::MakeDecalLock(decal_type type, XYZ where, int whichx, int whichy, float size, float opacity, float rotation)
 {
     if (decalstoggle) {
         XYZ rot = getLighting(where.x, where.z);
index 3afaa2874d3f6371dbb973ba9c17a6d944f30ab7..8cf68e1a3080f3eaf2fc04f23d55379881d79193 100644 (file)
@@ -40,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
@@ -98,8 +89,8 @@ public:
 
     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);
index a535dee287111b5445cd31c69544da67a0a49e86..de3388f75ff191ba08a1169e6896dac837a43648 100644 (file)
@@ -24,7 +24,7 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 
 Decal::Decal() :
     position(),
-    type(0),
+    type(shadowdecal),
     opacity(0),
     rotation(0),
     alivetime(0),
@@ -32,7 +32,7 @@ Decal::Decal() :
 {
 }
 
-Decal::Decal(XYZ _position, int _type, float _opacity, float _rotation, float _brightness, int whichx, int whichy, float size, const Terrain& terrain, bool first) :
+Decal::Decal(XYZ _position, decal_type _type, float _opacity, float _rotation, float _brightness, int whichx, int whichy, float size, const Terrain& terrain, bool first) :
     position(_position),
     type(_type),
     opacity(_opacity),
index 34f2a2b21ac9c8edc24f7371a4b4fdf97e9a4950..ae3862fbf603612c30f3161b8483a60521d57da0 100644 (file)
@@ -25,11 +25,22 @@ class Terrain;
 
 #include "Math/Quaternions.hpp"
 
+enum decal_type {
+    shadowdecal = 0,
+    footprintdecal = 1,
+    blooddecal = 2,
+    blooddecalfast = 3,
+    shadowdecalpermanent = 4,
+    breakdecal = 5,
+    blooddecalslow = 6,
+    bodyprintdecal = 7
+};
+
 class Decal
 {
 public:
     XYZ position;
-    int type;
+    decal_type type;
     float opacity;
     float rotation;
     float alivetime;
@@ -39,7 +50,7 @@ public:
     XYZ vertex[3];
 
     Decal();
-    Decal(XYZ position, int type, float opacity, float rotation, float brightness, int whichx, int whichy, float size, const Terrain& terrain, bool first);
+    Decal(XYZ position, decal_type type, float opacity, float rotation, float brightness, int whichx, int whichy, float size, const Terrain& terrain, bool first);
 };
 
 #endif