X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGraphic%2FModels.hpp;h=54b28858ae3a7d2f2a3bcf31e347bfe7b56f11ba;hb=8b8230c564e1f0063b381e77bf6222af9f2e678d;hp=27f3c7da62adb39a2800845048d7e0f8789a9c51;hpb=3a6ebcc050c7ee941e5d5ea243f59827d113d968;p=lugaru.git diff --git a/Source/Graphic/Models.hpp b/Source/Graphic/Models.hpp index 27f3c7d..54b2885 100644 --- a/Source/Graphic/Models.hpp +++ b/Source/Graphic/Models.hpp @@ -24,7 +24,7 @@ along with Lugaru. If not, see . #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 @@ -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 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 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 possible; }; #endif