forked from K0lb3/UnityPy
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathVector2.py
More file actions
83 lines (60 loc) · 1.89 KB
/
Copy pathVector2.py
File metadata and controls
83 lines (60 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from dataclasses import dataclass
from math import sqrt
kEpsilon = 0.00001
@dataclass
class Vector2:
'''https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math/Vector2.cs'''
X: float = 0.0
Y: float = 0.0
def __init__(self, x: float = 0.0, y: float = 0.0):
if not all(isinstance(v, (int, float)) for v in (x, y)):
raise TypeError("All components must be numeric.")
self.X = float(x)
self.Y = float(y)
def __getitem__(self, index):
return (self.X, self.Y)[index]
def __setitem__(self, index, value):
if index == 0:
self.X = value
elif index == 1:
self.Y = value
else:
raise IndexError("Index out of range")
def __hash__(self):
return self.X.__hash__() ^ (self.Y.__hash__() << 2)
def normalize(self):
length = self.length()
if length > kEpsilon:
invNorm = 1.0 / length
self.X *= invNorm
self.Y *= invNorm
else:
self.X = self.Y = 0.0
Normalize = normalize
def length(self):
return sqrt(self.lengthSquared())
Length = length
def lengthSquared(self):
return self.X ** 2 + self.Y ** 2
LengthSquared = lengthSquared
@staticmethod
def Zero():
return Vector2(0, 0)
@staticmethod
def One():
return Vector2(1, 1)
def __add__(a, b):
return Vector2(a.X + b.X, a.Y + b.Y)
def __sub__(a, b):
return Vector2(a.X - b.X, a.Y - b.Y)
def __mul__(a, d):
return Vector2(a.X * d, a.Y * d)
def __truediv__(a, d):
return Vector2(a.X / d, a.Y / d)
def __eq__(lhs, rhs):
if isinstance(rhs, Vector2):
diff = lhs - rhs
return diff.lengthSquared() < kEpsilon * kEpsilon
return False
def __ne__(lhs, rhs):
return not (lhs == rhs)