Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
enmath.c
Go to the documentation of this file.
1
6class Math
7{
8 private void Math() {}
9 private void ~Math() {}
10
11 static const float EULER = 2.7182818284590452353;
12 static const float PI = 3.14159265358979;
13 static const float PI2 = 6.28318530717958;
14 static const float PI_HALF = 1.570796326794;
15
16 static const float RAD2DEG = 57.2957795130823208768;
17 static const float DEG2RAD = 0.01745329251994329577;
18
20 proto static int GetNumberOfSetBits(int i);
21
23 proto static int GetNthBitSet(int value, int n);
24
38 proto static int RandomInt(int min, int max);
39
54 static int RandomIntInclusive(int min, int max)
55 {
56 return Math.RandomInt(min, max+1);
57 }
58
73 static bool RandomBool()
74 {
75 return RandomIntInclusive(0,1);
76 }
77
91 proto static float RandomFloat(float min, float max);
92
106 static float RandomFloatInclusive(float min, float max)
107 {
108 int max_range = Math.Pow(2, 30); //max range
109 int random_int = Math.RandomInt(0, max_range);
110 float rand_float = (float)random_int / (float)max_range;
111 float range = max - min;
112
113 return min + (rand_float * range); //rand float
114 }
115
126 static float RandomFloat01()
127 {
128 return RandomFloatInclusive(0, 1);
129 }
130
141 proto static int Randomize(int seed);
142
155 proto static float NormalizeAngle(float ang);
156
170 proto static float DiffAngle(float angle1, float angle2);
171
183 proto static float Pow(float v, float power);
184
198 proto static float ModFloat(float x, float y);
199
213 proto static float RemainderFloat(float x, float y);
214
225 proto static float AbsFloat(float f);
226
237 proto static int AbsInt(int i);
238
253 proto static float SignFloat(float f);
254
269 proto static int SignInt(int i);
270
281 proto static float SqrFloat(float f);
282
293 proto static int SqrInt(int i);
294
305 proto static float Sqrt(float val);
306
319 proto static float Log2(float x);
320
331 proto static float Sin(float angle);
332
343 proto static float Cos(float angle);
344
355 proto static float Tan(float angle);
356
367 proto static float Asin(float s);
368
379 proto static float Acos(float c);
380
386 proto static float Atan(float x);
387
399 proto static float Atan2(float y, float x);
400
413 proto static float Round(float f);
414
427 proto static float Floor(float f);
428
441 proto static float Ceil(float f);
442
455 proto static float WrapFloat(float f, float min, float max);
456
469 proto static float WrapFloatInclusive(float f, float min, float max);
470
482 proto static float WrapFloat0X(float f, float max);
483
495 proto static float WrapFloat0XInclusive(float f, float max);
496
509 proto static int WrapInt(int i, int min, int max);
510
522 proto static int WrapInt0X(int i, int max);
523
540 proto static float Clamp(float value, float min, float max);
541
553 proto static float Min(float x, float y);
554
566 proto static float Max(float x, float y);
567
580 proto static bool IsInRange(float v, float min, float max);
581
594 proto static bool IsInRangeInt(int v, int min, int max);
595
608 proto static float Lerp(float a, float b, float time);
609
622 proto static float InverseLerp(float a, float b, float value);
623
630 proto static float AreaOfRightTriangle(float s, float a);
631
638 proto static float HypotenuseOfRightTriangle(float s, float a);
639
647 proto static bool IsPointInCircle(vector c, float r, vector p);
648
656 proto static bool IsPointInRectangle(vector mi, vector ma, vector p);
657
658 //--------------------------------------------------------------------------
659 //-------------------------------- filters ---------------------------------
660 //--------------------------------------------------------------------------
661
678 proto static float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt);
679
680 static float SmoothCDPI2PI(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
681 {
682 float diff = target - val;
683 if (diff < -Math.PI)
684 {
685 target += Math.PI2;
686 }
687 else if (diff > Math.PI)
688 {
689 target -= Math.PI2;
690 }
691
692 float retVal = SmoothCD(val, target, velocity, smoothTime, maxVelocity, dt);
693
694 while (retVal > Math.PI)
695 {
696 retVal -= Math.PI2;
697 }
698
699 while (retVal < -Math.PI)
700 {
701 retVal += Math.PI2;
702 }
703
704 return retVal;
705 }
706
708 static float Poisson(float mean, int occurences)
709 {
710 return Pow(mean, occurences) * Pow(EULER,-mean) / Factorial(occurences);
711 }
712
714 static int Factorial(int val)
715 {
716 if (val > 12)
717 {
718 ErrorEx("Values above '12' cause int overflow! Returning '1'",ErrorExSeverity.INFO);
719 return 1;
720 }
721
722 int res = 1;
723 while (val > 1)
724 {
725 res *= val--;
726 }
727 return res;
728 }
729
740 static float Remap(float inputMin, float inputMax, float outputMin, float outputMax, float inputValue, bool clampedOutput = true)
741 {
742 float tempValue = Math.InverseLerp(inputMin, inputMax, inputValue);
743 float remapped = Math.Lerp(outputMin, outputMax, tempValue);
744
745 if (clampedOutput)
746 return Math.Clamp(remapped, outputMin, outputMax);
747
748 return remapped;
749 }
750
751 static vector CenterOfRectangle(vector min, vector max)
752 {
753 float x = (min[0] + max[0]) * 0.5;
754 float z = (min[2] + max[2]) * 0.5;
755
756 return Vector(x, 0.0, z);
757 }
758
766 static bool VectorIsEqual(vector v1, vector v2, float tolerance)
767 {
768 return (Math.AbsFloat(v1[0] - v2[0]) <= tolerance && Math.AbsFloat(v1[1] - v2[1]) <= tolerance && Math.AbsFloat(v1[2] - v2[2]) <= tolerance);
769 }
770}
771
Definition enmath.c:7
ErrorExSeverity
Definition endebug.c:62
enum ShapeType ErrorEx
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
Icon x
Icon y