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/>.
21 #include "Graphic/Decal.hpp"
23 #include "Environment/Terrain.hpp"
35 Decal::Decal(XYZ _position, decal_type _type, float _opacity, float _rotation, float _brightness, int whichx, int whichy, float size, const Terrain& terrain, bool first) :
41 brightness(_brightness)
44 placex = (float)whichx * terrain.scale + terrain.scale;
45 placez = (float)whichy * terrain.scale;
47 texcoords[0][0] = (placex - position.x) / size / 2 + .5;
48 texcoords[0][1] = (placez - position.z) / size / 2 + .5;
52 vertex[0].y = terrain.heightmap[whichx + 1][whichy] * terrain.scale + .01;
55 placex = (float)whichx * terrain.scale + terrain.scale;
56 placez = (float)whichy * terrain.scale + terrain.scale;
58 placex = (float)whichx * terrain.scale;
59 placez = (float)whichy * terrain.scale;
62 texcoords[1][0] = (placex - position.x) / size / 2 + .5;
63 texcoords[1][1] = (placez - position.z) / size / 2 + .5;
68 vertex[1].y = terrain.heightmap[whichx + 1][whichy + 1] * terrain.scale + .01;
70 vertex[1].y = terrain.heightmap[whichx][whichy] * terrain.scale + .01;
74 placex = (float)whichx * terrain.scale;
75 placez = (float)whichy * terrain.scale + terrain.scale;
77 texcoords[2][0] = (placex - position.x) / size / 2 + .5;
78 texcoords[2][1] = (placez - position.z) / size / 2 + .5;
82 vertex[2].y = terrain.heightmap[whichx][whichy + 1] * terrain.scale + .01;
86 for (int i = 0; i < 3; i++) {
88 rot.x = texcoords[i][0] - .5;
89 rot.z = texcoords[i][1] - .5;
90 rot = DoRotation(rot, 0, -rotation, 0);
91 texcoords[i][0] = rot.x + .5;
92 texcoords[i][1] = rot.z + .5;