add vec/trigo stuff
This commit is contained in:
parent
b6472d8929
commit
0b04ea5c0e
1 changed files with 87 additions and 0 deletions
87
utils.py
Normal file
87
utils.py
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
from math import atan2, hypot, pi
|
||||||
|
|
||||||
|
|
||||||
|
class Vec:
|
||||||
|
def __init__(self, x: int | float | None = None, y: int | float | None = None, z: int | float | None = None) -> None:
|
||||||
|
if x != None:
|
||||||
|
self.new(x, y, z)
|
||||||
|
else:
|
||||||
|
self.x = 0
|
||||||
|
self.y = 0
|
||||||
|
self.z = 0
|
||||||
|
|
||||||
|
def new(self, x: int | float, y: int | float | None, z: int | float | None) -> None:
|
||||||
|
# Determine type of class
|
||||||
|
self.type = int
|
||||||
|
if type(x) == float:
|
||||||
|
self.type = float
|
||||||
|
|
||||||
|
# Verify other type
|
||||||
|
if type(y) != self.type:
|
||||||
|
raise TypeError
|
||||||
|
if y != None:
|
||||||
|
if type(y) != self.type:
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
|
# At this point, they can't be None
|
||||||
|
if y == None:
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
|
self.x = self.type(x)
|
||||||
|
self.y = self.type(y)
|
||||||
|
|
||||||
|
if z == None:
|
||||||
|
self.z = None
|
||||||
|
else:
|
||||||
|
self.z = self.type(z)
|
||||||
|
|
||||||
|
def plus(self, other: 'Vec') -> 'Vec':
|
||||||
|
x = self.x + other.x
|
||||||
|
y = self.y + other.y
|
||||||
|
|
||||||
|
if self.z == None or other.z == None:
|
||||||
|
return Vec(x, y)
|
||||||
|
|
||||||
|
return Vec(x, y, self.z + other.z)
|
||||||
|
|
||||||
|
def minus(self, other: 'Vec') -> 'Vec':
|
||||||
|
x = self.x - other.x
|
||||||
|
y = self.y - other.y
|
||||||
|
|
||||||
|
if self.z == None or other.z == None:
|
||||||
|
return Vec(x, y)
|
||||||
|
|
||||||
|
return Vec(x, y, self.z - other.z)
|
||||||
|
|
||||||
|
def div(self, val: float) -> 'Vec':
|
||||||
|
x = self.x / val
|
||||||
|
y = self.y / val
|
||||||
|
|
||||||
|
if self.z == None:
|
||||||
|
return Vec(x, y)
|
||||||
|
|
||||||
|
return Vec(x, y, self.z / val)
|
||||||
|
|
||||||
|
def to_angle(self):
|
||||||
|
if self.z == None:
|
||||||
|
raise TypeError
|
||||||
|
|
||||||
|
deg_to_rad = (180. / pi)
|
||||||
|
|
||||||
|
return Vec(
|
||||||
|
atan2(-self.z, hypot(self.x, self.y)) * deg_to_rad,
|
||||||
|
atan2(self.y, self.x) * deg_to_rad,
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
def is_zero(self):
|
||||||
|
xy = float(self.x) == 0. and float(self.y) == 0.
|
||||||
|
if self.z == None:
|
||||||
|
return xy
|
||||||
|
|
||||||
|
return xy and float(self.z) == 0.
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_angle(local_pos: Vec, ennemy_pos: Vec, angles: Vec) -> Vec:
|
||||||
|
"""Angle calculation for aimbot"""
|
||||||
|
return ((ennemy_pos.minus(local_pos).to_angle().minus(angles)))
|
Reference in a new issue