2 Copyright (C) 2003, 2010 - Wolfire Games
3 Copyright (C) 2010-2017 - 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/Texture.hpp"
26 #include "Graphic/gamegl.hpp"
27 #include "Math/XYZ.hpp"
28 #include "Utils/binio.h"
48 class TexturedTriangle
56 #define max_model_decals 300
77 std::vector<TexturedTriangle> Triangles;
81 int owner[max_textured_triangle];
82 XYZ vertex[max_model_vertex];
83 XYZ normals[max_model_vertex];
84 GLfloat vArray[max_textured_triangle*24];*/
87 ModelTexture modelTexture;
90 XYZ boundingspherecenter;
91 float boundingsphereradius;
93 std::vector<Decal> decals;
99 void DeleteDecal(int which);
100 void MakeDecal(decal_type atype, XYZ* where, float* size, float* opacity, float* rotation);
101 void MakeDecal(decal_type atype, XYZ where, float size, float opacity, float rotation);
102 const XYZ& getTriangleVertex(unsigned triangleId, unsigned vertexId) const;
103 void drawdecals(Texture shadowtexture, Texture bloodtexture, Texture bloodtexture2, Texture breaktexture);
104 int SphereCheck(XYZ* p1, float radius, XYZ* p, XYZ* move, float* rotate);
105 int SphereCheckPossible(XYZ* p1, float radius, XYZ* move, float* rotate);
106 int LineCheck(XYZ* p1, XYZ* p2, XYZ* p, XYZ* move, float* rotate);
107 int LineCheckPossible(XYZ* p1, XYZ* p2, XYZ* p, XYZ* move, float* rotate);
108 int LineCheckSlidePossible(XYZ* p1, XYZ* p2, XYZ* move, float* rotate);
109 void UpdateVertexArray();
110 void UpdateVertexArrayNoTex();
111 void UpdateVertexArrayNoTexNoNorm();
112 bool loadnotex(const std::string& filename);
113 bool loadraw(const std::string& filename);
114 bool load(const std::string& filename);
115 bool loaddecal(const std::string& filename);
116 void Scale(float xscale, float yscale, float zscale);
117 void FlipTexCoords();
118 void UniformTexCoords();
119 void ScaleTexCoords(float howmuch);
120 void ScaleNormals(float xscale, float yscale, float zscale);
121 void Translate(float xtrans, float ytrans, float ztrans);
122 void CalculateNormals(bool facenormalise);
124 void drawdifftex(Texture texture);
125 void drawimmediate();
126 void Rotate(float xang, float yang, float zang);
127 void deleteDeadDecals();
131 /* indices of triangles that might collide */
132 std::vector<unsigned int> possible;