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