forked from Mirrorlandia_minetest/minetest
Signlike, glasslike drawtypes: Fix inverted textures
This commit is contained in:
parent
773efc19b1
commit
813a9a36b2
@ -98,7 +98,7 @@ TileSpec MapblockMeshGenerator::getTile(const v3s16& direction)
|
|||||||
|
|
||||||
void MapblockMeshGenerator::drawQuad(v3f *coords, const v3s16 &normal)
|
void MapblockMeshGenerator::drawQuad(v3f *coords, const v3s16 &normal)
|
||||||
{
|
{
|
||||||
static const v2f tcoords[4] = {v2f(0, 1), v2f(1, 1), v2f(1, 0), v2f(0, 0)};
|
static const v2f tcoords[4] = {v2f(0, 0), v2f(1, 0), v2f(1, 1), v2f(0, 1)};
|
||||||
video::S3DVertex vertices[4];
|
video::S3DVertex vertices[4];
|
||||||
bool shade_face = !f->light_source && (normal != v3s16(0, 0, 0));
|
bool shade_face = !f->light_source && (normal != v3s16(0, 0, 0));
|
||||||
v3f normal2(normal.X, normal.Y, normal.Z);
|
v3f normal2(normal.X, normal.Y, normal.Z);
|
||||||
@ -631,22 +631,22 @@ void MapblockMeshGenerator::drawGlasslikeNode()
|
|||||||
// Don't make face if neighbor is of same type
|
// Don't make face if neighbor is of same type
|
||||||
if (neighbor.getContent() == n.getContent())
|
if (neighbor.getContent() == n.getContent())
|
||||||
continue;
|
continue;
|
||||||
|
// Face at Z-
|
||||||
v3f vertices[4] = {
|
v3f vertices[4] = {
|
||||||
v3f(-BS / 2, -BS / 2, BS / 2),
|
v3f(-BS / 2, BS / 2, -BS / 2),
|
||||||
v3f( BS / 2, -BS / 2, BS / 2),
|
v3f( BS / 2, BS / 2, -BS / 2),
|
||||||
v3f( BS / 2, BS / 2, BS / 2),
|
v3f( BS / 2, -BS / 2, -BS / 2),
|
||||||
v3f(-BS / 2, BS / 2, BS / 2),
|
v3f(-BS / 2, -BS / 2, -BS / 2),
|
||||||
};
|
};
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
// Rotations in the g_6dirs format
|
|
||||||
switch (face) {
|
switch (face) {
|
||||||
case 0: vertices[i].rotateXZBy( 0); break; // Z+
|
case D6D_ZP: vertices[i].rotateXZBy(180); break;
|
||||||
case 1: vertices[i].rotateYZBy(-90); break; // Y+
|
case D6D_YP: vertices[i].rotateYZBy( 90); break;
|
||||||
case 2: vertices[i].rotateXZBy(-90); break; // X+
|
case D6D_XP: vertices[i].rotateXZBy( 90); break;
|
||||||
case 3: vertices[i].rotateXZBy(180); break; // Z-
|
case D6D_ZN: vertices[i].rotateXZBy( 0); break;
|
||||||
case 4: vertices[i].rotateYZBy( 90); break; // Y-
|
case D6D_YN: vertices[i].rotateYZBy(-90); break;
|
||||||
case 5: vertices[i].rotateXZBy( 90); break; // X-
|
case D6D_XN: vertices[i].rotateXZBy(-90); break;
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
drawQuad(vertices, dir);
|
drawQuad(vertices, dir);
|
||||||
}
|
}
|
||||||
@ -797,10 +797,10 @@ void MapblockMeshGenerator::drawTorchlikeNode()
|
|||||||
|
|
||||||
float size = BS / 2 * f->visual_scale;
|
float size = BS / 2 * f->visual_scale;
|
||||||
v3f vertices[4] = {
|
v3f vertices[4] = {
|
||||||
v3f(-size, -size, 0),
|
|
||||||
v3f( size, -size, 0),
|
|
||||||
v3f( size, size, 0),
|
|
||||||
v3f(-size, size, 0),
|
v3f(-size, size, 0),
|
||||||
|
v3f( size, size, 0),
|
||||||
|
v3f( size, -size, 0),
|
||||||
|
v3f(-size, -size, 0),
|
||||||
};
|
};
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
switch (wall) {
|
switch (wall) {
|
||||||
@ -845,19 +845,19 @@ void MapblockMeshGenerator::drawPlantlikeQuad(float rotation, float quad_offset,
|
|||||||
bool offset_top_only)
|
bool offset_top_only)
|
||||||
{
|
{
|
||||||
v3f vertices[4] = {
|
v3f vertices[4] = {
|
||||||
v3f(-scale, -BS / 2, 0),
|
|
||||||
v3f( scale, -BS / 2, 0),
|
|
||||||
v3f( scale, -BS / 2 + scale * 2, 0),
|
|
||||||
v3f(-scale, -BS / 2 + scale * 2, 0),
|
v3f(-scale, -BS / 2 + scale * 2, 0),
|
||||||
|
v3f( scale, -BS / 2 + scale * 2, 0),
|
||||||
|
v3f( scale, -BS / 2, 0),
|
||||||
|
v3f(-scale, -BS / 2, 0),
|
||||||
};
|
};
|
||||||
if (random_offset_Y) {
|
if (random_offset_Y) {
|
||||||
PseudoRandom yrng(face_num++ | p.X << 16 | p.Z << 8 | p.Y << 24);
|
PseudoRandom yrng(face_num++ | p.X << 16 | p.Z << 8 | p.Y << 24);
|
||||||
offset.Y = BS * ((yrng.next() % 16 / 16.0) * 0.125);
|
offset.Y = BS * ((yrng.next() % 16 / 16.0) * 0.125);
|
||||||
}
|
}
|
||||||
int offset_first_index = offset_top_only ? 2 : 0;
|
int offset_count = offset_top_only ? 2 : 4;
|
||||||
|
for (int i = 0; i < offset_count; i++)
|
||||||
|
vertices[i].Z += quad_offset;
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
if (i >= offset_first_index)
|
|
||||||
vertices[i].Z += quad_offset;
|
|
||||||
vertices[i].rotateXZBy(rotation + rotate_degree);
|
vertices[i].rotateXZBy(rotation + rotate_degree);
|
||||||
vertices[i] += offset;
|
vertices[i] += offset;
|
||||||
}
|
}
|
||||||
@ -933,10 +933,10 @@ void MapblockMeshGenerator::drawFirelikeQuad(float rotation, float opening_angle
|
|||||||
float offset_h, float offset_v)
|
float offset_h, float offset_v)
|
||||||
{
|
{
|
||||||
v3f vertices[4] = {
|
v3f vertices[4] = {
|
||||||
v3f(-scale, -BS / 2, 0),
|
|
||||||
v3f( scale, -BS / 2, 0),
|
|
||||||
v3f( scale, -BS / 2 + scale * 2, 0),
|
|
||||||
v3f(-scale, -BS / 2 + scale * 2, 0),
|
v3f(-scale, -BS / 2 + scale * 2, 0),
|
||||||
|
v3f( scale, -BS / 2 + scale * 2, 0),
|
||||||
|
v3f( scale, -BS / 2, 0),
|
||||||
|
v3f(-scale, -BS / 2, 0),
|
||||||
};
|
};
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
vertices[i].rotateYZBy(opening_angle);
|
vertices[i].rotateYZBy(opening_angle);
|
||||||
@ -1151,10 +1151,10 @@ void MapblockMeshGenerator::drawRaillikeNode()
|
|||||||
static const float size = BS / 2;
|
static const float size = BS / 2;
|
||||||
float y2 = sloped ? size : -size;
|
float y2 = sloped ? size : -size;
|
||||||
v3f vertices[4] = {
|
v3f vertices[4] = {
|
||||||
v3f(-size, -size + offset, -size),
|
|
||||||
v3f( size, -size + offset, -size),
|
|
||||||
v3f( size, y2 + offset, size),
|
|
||||||
v3f(-size, y2 + offset, size),
|
v3f(-size, y2 + offset, size),
|
||||||
|
v3f( size, y2 + offset, size),
|
||||||
|
v3f( size, -size + offset, -size),
|
||||||
|
v3f(-size, -size + offset, -size),
|
||||||
};
|
};
|
||||||
if (angle)
|
if (angle)
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user