]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Graphic/Models.hpp
Using an enum for model type
[lugaru.git] / Source / Graphic / Models.hpp
index 621a9afad39de9ac364c864f5e6c5c5c407af21a..54b28858ae3a7d2f2a3bcf31e347bfe7b56f11ba 100644 (file)
@@ -24,12 +24,12 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #include "Environment/Terrain.hpp"
 #include "Graphic/gamegl.hpp"
 #include "Graphic/Texture.hpp"
-#include "Math/Quaternions.hpp"
+#include "Math/XYZ.hpp"
 #include "Utils/binio.h"
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
 #include <vector>
 
 //
@@ -49,84 +49,68 @@ class TexturedTriangle
 public:
     short vertex[3];
     float gx[3], gy[3];
+    XYZ facenormal;
 };
 
 #define max_model_decals 300
 
-#define nothing 0
-#define normaltype 4
-#define notextype 1
-#define rawtype 2
-#define decalstype 3
+enum ModelType
+{
+    nothing = 0,
+    notextype = 1,
+    rawtype = 2,
+    decalstype = 3,
+    normaltype = 4
+};
 
 class Model
 {
 public:
-    short vertexNum, TriangleNum;
-    bool hastexture;
+    short vertexNum;
 
-    int type, oldtype;
+    ModelType type;
 
-    int* possible;
     int* owner;
     XYZ* vertex;
     XYZ* normals;
-    XYZ* facenormals;
-    TexturedTriangle* Triangles;
+    std::vector<TexturedTriangle> Triangles;
     GLfloat* vArray;
 
-    /*int possible[max_model_vertex];
+    /*
     int owner[max_textured_triangle];
     XYZ vertex[max_model_vertex];
     XYZ normals[max_model_vertex];
-    XYZ facenormals[max_textured_triangle];
-    TexturedTriangle Triangles[max_textured_triangle];
     GLfloat vArray[max_textured_triangle*24];*/
 
     Texture textureptr;
     ModelTexture modelTexture;
-    int numpossible;
     bool color;
 
     XYZ boundingspherecenter;
     float boundingsphereradius;
 
-    float*** decaltexcoords;
-    XYZ** decalvertex;
-    int* decaltype;
-    float* decalopacity;
-    float* decalrotation;
-    float* decalalivetime;
-    XYZ* decalposition;
-
-    /*float decaltexcoords[max_model_decals][3][2];
-    XYZ decalvertex[max_model_decals][3];
-    int decaltype[max_model_decals];
-    float decalopacity[max_model_decals];
-    float decalrotation[max_model_decals];
-    float decalalivetime[max_model_decals];
-    XYZ decalposition[max_model_decals];*/
-
-    int numdecals;
+    std::vector<Decal> decals;
 
     bool flat;
 
+    Model();
+    ~Model();
     void DeleteDecal(int which);
-    void MakeDecal(int atype, XYZ *where, float *size, float *opacity, float *rotation);
-    void MakeDecal(int atype, XYZ where, float size, float opacity, float rotation);
+    void MakeDecal(decal_type atype, XYZ *where, float *size, float *opacity, float *rotation);
+    void MakeDecal(decal_type atype, XYZ where, float size, float opacity, float rotation);
     void drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture);
     int SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate);
     int SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate);
     int LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
     int LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
-    int LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
+    int LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *move, float *rotate);
     void UpdateVertexArray();
     void UpdateVertexArrayNoTex();
     void UpdateVertexArrayNoTexNoNorm();
     bool loadnotex(const std::string& filename);
     bool loadraw(const std::string& filename);
-    bool load(const std::string& filename, bool texture);
-    bool loaddecal(const std::string& filename, bool texture);
+    bool load(const std::string& filename);
+    bool loaddecal(const std::string& filename);
     void Scale(float xscale, float yscale, float zscale);
     void FlipTexCoords();
     void UniformTexCoords();
@@ -135,13 +119,15 @@ public:
     void Translate(float xtrans, float ytrans, float ztrans);
     void CalculateNormals(bool facenormalise);
     void draw();
-    void drawdifftex(GLuint texture);
     void drawdifftex(Texture texture);
     void drawimmediate();
     void Rotate(float xang, float yang, float zang);
-    ~Model();
+    void deleteDeadDecals();
+
+private:
     void deallocate();
-    Model();
+    /* indices of triangles that might collide */
+    std::vector<unsigned int> possible;
 };
 
 #endif