Преглед изворни кода

Merge pull request #26761 from Chaosus/fix_mono_wrap

Fix division by zero at wrap functions in mono
Ignacio Etcheverry пре 6 година
родитељ
комит
47407ba2df
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)
         public static int Wrap(int value, int min, int max)
         {
         {
             int rng = max - min;
             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)
         public static real_t Wrap(real_t value, real_t min, real_t max)
         {
         {
             real_t rng = max - min;
             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);
             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;
+        }
     }
     }
 }
 }