From 2558c941a077e080c16a119faab20f4c5824ca01 Mon Sep 17 00:00:00 2001
From: unknown <john.schihada@hotmail.com>
Date: Tue, 7 Jan 2020 13:34:22 +0100
Subject: [PATCH] =?UTF-8?q?Now=20really=20Fixed=20the=20problem.=20Problem?=
 =?UTF-8?q?=20was:=20Vector3.angle()=20not=20only=20returns=20only=20value?=
 =?UTF-8?q?s=20<=20180=C2=B0=20but=20also=20only=20absolute=20angle-values?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Assets/InteractionEngine/FactSpawner.cs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/Assets/InteractionEngine/FactSpawner.cs b/Assets/InteractionEngine/FactSpawner.cs
index 80bb0af4..1ce27cff 100644
--- a/Assets/InteractionEngine/FactSpawner.cs
+++ b/Assets/InteractionEngine/FactSpawner.cs
@@ -158,7 +158,14 @@ public void SpawnAngle(AngleFact angleFact)
         //Rotate so that the rotation points from point2 to the middle of point3 and point1
         angle.transform.GetChild(0).rotation = Quaternion.FromToRotation(Vector3.right, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)));
         //Now the rotation around that direction must also be adjusted
-        angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized));
+        //We calculate the Angle not with Vector3.Angle() because it only returns absolute angle-values
+        float signedAngle = Mathf.Atan2(Vector3.Dot((Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Cross(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)), Vector3.Dot(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized)) * Mathf.Rad2Deg;
+        if (signedAngle < 0)
+        {
+            angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint3 - tempPoint1).normalized));
+        }
+        else
+            angle.transform.GetChild(0).RotateAround(point2, (Vector3.Lerp((tempPoint1 - point2).normalized, (tempPoint3 - point2).normalized, 0.5f)), Vector3.Angle(angle.transform.GetChild(0).forward.normalized, (tempPoint1 - tempPoint3).normalized));
 
         string letter = ((Char)(64 + angleFact.Id + 1)).ToString();
         angle.GetComponentInChildren<TextMeshPro>().transform.localPosition = new Vector3((0.5f * tempProjection).x, angle.GetComponentInChildren<TextMeshPro>().transform.localPosition.y, (0.5f * tempProjection).z);
-- 
GitLab