소스 검색

Fix division by zero at wrap functions in mono

Chaosus 6 년 전
부모
커밋
752055ccba
2개의 변경된 파일7개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 2
      modules/mono/glue/Managed/Files/Mathf.cs
  2. 5 0
      modules/mono/glue/Managed/Files/MathfEx.cs

+ 2 - 2
modules/mono/glue/Managed/Files/Mathf.cs

@@ -289,13 +289,13 @@ namespace Godot
         public static int Wrap(int value, int min, int max)
         {
             int rng = max - min;
-            return min + ((value - min) % rng + rng) % rng;
+            return rng != 0 ? min + ((value - min) % rng + rng) % rng : min;
         }
 
         public static real_t Wrap(real_t value, real_t min, real_t max)
         {
             real_t rng = max - min;
-            return min + ((value - min) % rng + rng) % rng;
+            return !IsEqualApprox(rng, default(real_t)) ? min + ((value - min) % rng + rng) % rng : min;
         }
     }
 }

+ 5 - 0
modules/mono/glue/Managed/Files/MathfEx.cs

@@ -35,5 +35,10 @@ namespace Godot
         {
             return (int)Math.Round(s);
         }
+
+        public static bool IsEqualApprox(real_t a, real_t b, real_t ratio = Mathf.Epsilon)
+        {
+            return Abs(a - b) < ratio;
+        }
     }
 }