]> git.jsancho.org Git - lugaru.git/blob - Source/Graphic/Models.hpp
Rename all C++ headers with .hpp extension
[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 <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
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
102     /*float decaltexcoords[max_model_decals][3][2];
103     XYZ decalvertex[max_model_decals][3];
104     int decaltype[max_model_decals];
105     float decalopacity[max_model_decals];
106     float decalrotation[max_model_decals];
107     float decalalivetime[max_model_decals];
108     XYZ decalposition[max_model_decals];*/
109
110     int numdecals;
111
112     bool flat;
113
114     void DeleteDecal(int which);
115     void MakeDecal(int atype, XYZ *where, float *size, float *opacity, float *rotation);
116     void MakeDecal(int atype, XYZ where, float size, float opacity, float rotation);
117     void drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture);
118     int SphereCheck(XYZ *p1, float radius, XYZ *p, XYZ *move, float *rotate);
119     int SphereCheckPossible(XYZ *p1, float radius, XYZ *move, float *rotate);
120     int LineCheck(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
121     int LineCheckPossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
122     int LineCheckSlidePossible(XYZ *p1, XYZ *p2, XYZ *p, XYZ *move, float *rotate);
123     void UpdateVertexArray();
124     void UpdateVertexArrayNoTex();
125     void UpdateVertexArrayNoTexNoNorm();
126     bool loadnotex(const std::string& filename);
127     bool loadraw(const std::string& filename);
128     bool load(const std::string& filename, bool texture);
129     bool loaddecal(const std::string& filename, bool texture);
130     void Scale(float xscale, float yscale, float zscale);
131     void FlipTexCoords();
132     void UniformTexCoords();
133     void ScaleTexCoords(float howmuch);
134     void ScaleNormals(float xscale, float yscale, float zscale);
135     void Translate(float xtrans, float ytrans, float ztrans);
136     void CalculateNormals(bool facenormalise);
137     void draw();
138     void drawdifftex(GLuint texture);
139     void drawdifftex(Texture texture);
140     void drawimmediate();
141     void Rotate(float xang, float yang, float zang);
142     ~Model();
143     void deallocate();
144     Model();
145 };
146
147 #endif