2 Copyright (C) 2003, 2010 - Wolfire Games
3 Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
5 This file is part of Lugaru.
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.
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.
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/>.
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"
47 class TexturedTriangle
54 #define max_model_decals 300
65 short vertexNum, TriangleNum;
75 TexturedTriangle* Triangles;
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];*/
87 ModelTexture modelTexture;
91 XYZ boundingspherecenter;
92 float boundingsphereradius;
94 float*** decaltexcoords;
99 float* decalalivetime;
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];*/
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);
138 void drawdifftex(GLuint texture);
139 void drawdifftex(Texture texture);
140 void drawimmediate();
141 void Rotate(float xang, float yang, float zang);