From 3ee80987086a99803f5a812089ae253ab509cb68 Mon Sep 17 00:00:00 2001
From: Kahrl <kahrl@gmx.net>
Date: Thu, 15 Aug 2013 00:55:35 +0200
Subject: [PATCH] Diagonal liquid animation

---
 src/content_mapblock.cpp | 52 ++++++++++++++++------------------------
 1 file changed, 20 insertions(+), 32 deletions(-)

diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp
index d2509ad5a..929682eaf 100644
--- a/src/content_mapblock.cpp
+++ b/src/content_mapblock.cpp
@@ -653,48 +653,36 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
 				// -Z towards +Z, thus the direction is +Z.
 				// Rotate texture to make animation go in flow direction
 				// Positive if liquid moves towards +Z
-				int dz = (corner_levels[side_corners[3][0]] +
+				f32 dz = (corner_levels[side_corners[3][0]] +
 						corner_levels[side_corners[3][1]]) -
 						(corner_levels[side_corners[2][0]] +
 						corner_levels[side_corners[2][1]]);
 				// Positive if liquid moves towards +X
-				int dx = (corner_levels[side_corners[1][0]] +
+				f32 dx = (corner_levels[side_corners[1][0]] +
 						corner_levels[side_corners[1][1]]) -
 						(corner_levels[side_corners[0][0]] +
 						corner_levels[side_corners[0][1]]);
-				// -X
-				if(-dx >= abs(dz))
-				{
-					v2f t = vertices[0].TCoords;
-					vertices[0].TCoords = vertices[1].TCoords;
-					vertices[1].TCoords = vertices[2].TCoords;
-					vertices[2].TCoords = vertices[3].TCoords;
-					vertices[3].TCoords = t;
-				}
-				// +X
-				if(dx >= abs(dz))
-				{
-					v2f t = vertices[0].TCoords;
-					vertices[0].TCoords = vertices[3].TCoords;
-					vertices[3].TCoords = vertices[2].TCoords;
-					vertices[2].TCoords = vertices[1].TCoords;
-					vertices[1].TCoords = t;
-				}
-				// -Z
-				if(-dz >= abs(dx))
+				f32 tcoord_angle = atan2(dz, dx) * core::RADTODEG ;
+				v2f tcoord_center(0.5, 0.5);
+				v2f tcoord_translate(
+						blockpos_nodes.Z + z,
+						blockpos_nodes.X + x);
+				tcoord_translate.rotateBy(tcoord_angle);
+				tcoord_translate.X -= floor(tcoord_translate.X);
+				tcoord_translate.Y -= floor(tcoord_translate.Y);
+
+				for(s32 i=0; i<4; i++)
 				{
-					v2f t = vertices[0].TCoords;
-					vertices[0].TCoords = vertices[3].TCoords;
-					vertices[3].TCoords = vertices[2].TCoords;
-					vertices[2].TCoords = vertices[1].TCoords;
-					vertices[1].TCoords = t;
-					t = vertices[0].TCoords;
-					vertices[0].TCoords = vertices[3].TCoords;
-					vertices[3].TCoords = vertices[2].TCoords;
-					vertices[2].TCoords = vertices[1].TCoords;
-					vertices[1].TCoords = t;
+					vertices[i].TCoords.rotateBy(
+							tcoord_angle,
+							tcoord_center);
+					vertices[i].TCoords += tcoord_translate;
 				}
 
+				v2f t = vertices[0].TCoords;
+				vertices[0].TCoords = vertices[2].TCoords;
+				vertices[2].TCoords = t;
+
 				u16 indices[] = {0,1,2,2,3,0};
 				// Add to mesh collector
 				collector.append(tile_liquid, vertices, 4, indices, 6);
-- 
GitLab