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) {
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++;
}
}
}
}
}
-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) {
}
}
-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);
#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
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);
#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;
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