commit a952192e7c9bac5b88fc41daff7fe3ae69ffe2aa
Author: leszek <leszek@koltunski.pl>
Date:   Wed Jan 15 23:09:47 2025 +0100

    implement correct TouchControlShapeChanging for Ghosts - taking into account the Ghost rotation.

diff --git a/src/main/java/org/distorted/library/effect/VertexEffectRotate.java b/src/main/java/org/distorted/library/effect/VertexEffectRotate.java
index e169a3a..da81c05 100644
--- a/src/main/java/org/distorted/library/effect/VertexEffectRotate.java
+++ b/src/main/java/org/distorted/library/effect/VertexEffectRotate.java
@@ -65,37 +65,37 @@ public class VertexEffectRotate extends VertexEffect
     {
     return
 
-      "float angle = vUniforms[effect].x*3.1415/360.0;\n"
-    + "vec3 center = vUniforms[effect+1].yzw;         \n"
-    + "float sinHalf =-sin(angle);                    \n"
-    + "float cosHalf = cos(angle);                    \n"
+      "float angle = vUniforms[effect].x*3.14159265/360.0;\n"
+    + "vec3 center = vUniforms[effect+1].yzw;             \n"
+    + "float sinHalf =-sin(angle);                        \n"
+    + "float cosHalf = cos(angle);                        \n"
 
-    + "float qx = vUniforms[effect].y * sinHalf;      \n"
-    + "float qy = vUniforms[effect].z * sinHalf;      \n"
-    + "float qz = vUniforms[effect].w * sinHalf;      \n"
-    + "float qw = cosHalf;                            \n"
+    + "float qx = vUniforms[effect].y * sinHalf;          \n"
+    + "float qy = vUniforms[effect].z * sinHalf;          \n"
+    + "float qz = vUniforms[effect].w * sinHalf;          \n"
+    + "float qw = cosHalf;                                \n"
 
-    + "v -= center;                                   \n"
+    + "v -= center;                                       \n"
 
-    + "float tx = qx - v.z*qy + v.y*qz + v.x*qw;      \n"
-    + "float ty = qy + v.z*qx + v.y*qw - v.x*qz;      \n"
-    + "float tz = qz + v.z*qw - v.y*qx + v.x*qy;      \n"
-    + "float tw = qw - v.z*qz - v.y*qy - v.x*qx;      \n"
+    + "float tx = qx - v.z*qy + v.y*qz + v.x*qw;          \n"
+    + "float ty = qy + v.z*qx + v.y*qw - v.x*qz;          \n"
+    + "float tz = qz + v.z*qw - v.y*qx + v.x*qy;          \n"
+    + "float tw = qw - v.z*qz - v.y*qy - v.x*qx;          \n"
 
-    + "v.x = qw*tx + qz*ty - qy*tz - qx*tw;           \n"
-    + "v.y = qw*ty - qz*tx - qy*tw + qx*tz;           \n"
-    + "v.z = qw*tz - qz*tw + qy*tx - qx*ty;           \n"
+    + "v.x = qw*tx + qz*ty - qy*tz - qx*tw;               \n"
+    + "v.y = qw*ty - qz*tx - qy*tw + qx*tz;               \n"
+    + "v.z = qw*tz - qz*tw + qy*tx - qx*ty;               \n"
 
-    + "v += center;                                   \n"
+    + "v += center;                                       \n"
 
-    + "float nx =  - n.z*qy + n.y*qz + n.x*qw;        \n"
-    + "float ny =  + n.z*qx + n.y*qw - n.x*qz;        \n"
-    + "float nz =  + n.z*qw - n.y*qx + n.x*qy;        \n"
-    + "float nw =  - n.z*qz - n.y*qy - n.x*qx;        \n"
+    + "float nx =  - n.z*qy + n.y*qz + n.x*qw;            \n"
+    + "float ny =  + n.z*qx + n.y*qw - n.x*qz;            \n"
+    + "float nz =  + n.z*qw - n.y*qx + n.x*qy;            \n"
+    + "float nw =  - n.z*qz - n.y*qy - n.x*qx;            \n"
 
-    + "n.x = qw*nx + qz*ny - qy*nz - qx*nw;           \n"
-    + "n.y = qw*ny - qz*nx - qy*nw + qx*nz;           \n"
-    + "n.z = qw*nz - qz*nw + qy*nx - qx*ny;           \n"
+    + "n.x = qw*nx + qz*ny - qy*nz - qx*nw;               \n"
+    + "n.y = qw*ny - qz*nx - qy*nw + qx*nz;               \n"
+    + "n.z = qw*nz - qz*nw + qy*nx - qx*ny;               \n"
 
     + "n = normalize(n);";
     }
