]> git.jsancho.org Git - lugaru.git/blob - Source/Graphic/Models.hpp
Using the Decal class in Model as well
[lugaru.git] / Source / Graphic / Models.hpp
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3 Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
4
5 This file is part of Lugaru.
6
7 Lugaru is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 Lugaru is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef _MODELS_HPP_
22 #define _MODELS_HPP_
23
24 #include "Environment/Terrain.hpp"
25 #include "Graphic/gamegl.hpp"
26 #include "Graphic/Texture.hpp"
27 #include "Math/Quaternions.hpp"
28 #include "Utils/binio.h"
29
30 #include <cstdio>
31 #include <cstdlib>
32 #include <cstring>
33 #include <vector>
34
35 //
36 // Textures List
37 //
38 typedef struct {
39     long xsz, ysz;
40     GLubyte *txt;
41 } ModelTexture;
42
43 //
44 // Model Structures
45 //
46
47 class TexturedTriangle
48 {
49 public:
50     short vertex[3];
51     float gx[3], gy[3];
52 };
53
54 #define max_model_decals 300
55
56 #define nothing 0
57 #define normaltype 4
58 #define notextype 1
59 #define rawtype 2
60 #define decalstype 3
61
62 class Model
63 {
64 public:
65     short vertexNum, TriangleNum;
66     bool hastexture;
67
68     int type, oldtype;
69
70     int* possible;
71     int* owner;
72     XYZ* vertex;
73     XYZ* normals;
74     XYZ* facenormals;
75     TexturedTriangle* Triangles;
76     GLfloat* vArray;
77
78     /*int possible[max_model_vertex];
79     int owner[max_textured_triangle];
80     XYZ vertex[max_model_vertex];
81     XYZ normals[max_model_vertex];
82     XYZ facenormals[max_textured_triangle];
83     TexturedTriangle Triangles[max_textured_triangle];
84     GLfloat vArray[max_textured_triangle*24];*/
85
86     Texture textureptr;
87     ModelTexture modelTexture;
88     int numpossible;
89     bool color;
90
91     XYZ boundingspherecenter;
92     float boundingsphereradius;
93
94     //~ float*** decaltexcoords;
95     //~ XYZ** decalvertex;
96     //~ int* decaltype;
97     //~ float* decalopacity;
98     //~ float* decalrotation;
99     //~ float* decalalivetime;
100     //~ XYZ* decalposition;
101     std::vector<Decal> decals;
102
103     /*float decaltexcoords[max_model_decals][3][2];
104     XYZ decalvertex[max_model_decals][3];
105     int decaltype[max_model_decals];
106     float decalopacity[max_model_decals];
107     float decalrotation[max_model_decals];
108     float decalalivetime[max_model_decals];
109     XYZ decalposition[max_model_decals];*/
110
111     int numdecals;
112
113     bool flat;
114
115     void DeleteDecal(int which);
116     void MakeDecal(decal_type atype, XYZ *where, float *size, float *opacity, float *rotation);
117     void MakeDecal(decal_type atype, XYZ where, float size, float opacity, float rotation);
118     void drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture);
119     int SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate);
120     int SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate);
121     int LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
122     int LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
123     int LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *move, float *rotate);
124     void UpdateVertexArray();
125     void UpdateVertexArrayNoTex();
126     void UpdateVertexArrayNoTexNoNorm();
127     bool loadnotex(const std::string& filename);
128     bool loadraw(const std::string& filename);
129     bool load(const std::string& filename);
130     bool loaddecal(const std::string& filename);
131     void Scale(float xscale, float yscale, float zscale);
132     void FlipTexCoords();
133     void UniformTexCoords();
134     void ScaleTexCoords(float howmuch);
135     void ScaleNormals(float xscale, float yscale, float zscale);
136     void Translate(float xtrans, float ytrans, float ztrans);
137     void CalculateNormals(bool facenormalise);
138     void draw();
139     void drawdifftex(GLuint texture);
140     void drawdifftex(Texture texture);
141     void drawimmediate();
142     void Rotate(float xang, float yang, float zang);
143     void deleteDeadDecals();
144     ~Model();
145     void deallocate();
146     Model();
147 };
148
149 #endif