Рефакторинг. Аннотации GDScript
This commit is contained in:
@@ -1,11 +1,40 @@
|
||||
extends Node
|
||||
|
||||
## Простые часто используемые функции
|
||||
|
||||
## Производит преобразование из угла в радианы
|
||||
func radians(val: float): return (val * PI) / 180.0
|
||||
|
||||
|
||||
## Возвращает значение из байтового массива в 16 битное слово
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int: return buf[i] + (buf[i + 1] * 256)
|
||||
|
||||
|
||||
## Возвращает расстояние от центра координат до точки
|
||||
func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
|
||||
|
||||
## Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """
|
||||
func is_overlap(x1, x2, y1, y2): return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Производит преобразование из декартовой в полярную систему координат
|
||||
func pos_calc(freq: float, aoa: float, pos0: Vector2, r0: float, r1: float, f0: float, df: float):
|
||||
var r = ((freq - f0) / df) * r1 + r0
|
||||
var aoa_rad = Tools.radians(aoa) - PI / 2.0
|
||||
var x = cos(aoa_rad) * r + pos0.x
|
||||
var y = sin(aoa_rad) * r + pos0.y
|
||||
return Vector2(x, y)
|
||||
|
||||
|
||||
## Отсекает значение до заданного диапазона
|
||||
func clip_value(val, val_min, val_max):
|
||||
if val < val_min: val = val_min
|
||||
if val > val_max: val = val_max
|
||||
return val
|
||||
|
||||
|
||||
## Возвращает массив с именами членов класса
|
||||
func get_members_names(obj: Object) -> Array:
|
||||
var pl = obj.get_property_list()
|
||||
var names: = Array()
|
||||
@@ -13,6 +42,7 @@ func get_members_names(obj: Object) -> Array:
|
||||
return names
|
||||
|
||||
|
||||
## Проверяет, что заданный массив похож на ip-адрес
|
||||
func assert_array_ipaddr(val: Array):
|
||||
""" Выкидывает исключение, если массив не содержит ip-адрес """
|
||||
assert(val.size() == 2)
|
||||
@@ -21,29 +51,25 @@ func assert_array_ipaddr(val: Array):
|
||||
assert((0 < val[1]) and (val[1] < 65536))
|
||||
|
||||
|
||||
## Преобразует декартовые координаты в полярные
|
||||
func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
""" Преобразует декартовые координаты в полярные """
|
||||
var x1: float = pos.x - pos0.x
|
||||
var y1: float = pos.y - pos0.y
|
||||
var ang: float = (atan2(y1, x1) * 180.0) / PI
|
||||
return Vector2(ang + 360.0 * float(ang < 0.0), hypot(x1, y1))
|
||||
|
||||
|
||||
func is_overlap(x1, x2, y1, y2):
|
||||
""" Проверяет пересечение диапазона x1, x2 с диапазоном y1, y2 """
|
||||
return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
## Переводит значение val из диапазона a0...a1 в диапазон b0...b1
|
||||
func map_range(val: float, a0: float, a1: float, b0: float, b1: float) -> float:
|
||||
""" Переводит значение val из диапазона a0...a1 в диапазон b0...b1 """
|
||||
return (((val - a0) * (b1 - b0)) / (a1 - a0)) + b0
|
||||
|
||||
|
||||
## Возвращает true, если val число, false - если иначе
|
||||
func type_is_num(val) -> bool:
|
||||
""" Возвращает true, если val число, false - если иначе """
|
||||
return (typeof(val) == TYPE_INT) or (typeof(val) == typeof(0.0))
|
||||
|
||||
|
||||
## Возвращает true, если точка внутри заданного полигона
|
||||
func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
var j: int = len(p) - 1
|
||||
var odd_nodes: int = 0
|
||||
@@ -54,13 +80,11 @@ func is_point_in_polygon(pos: Vector2, p: PackedVector2Array) -> bool:
|
||||
return odd_nodes > 0
|
||||
|
||||
|
||||
## Устанавливает слово в байтовом массиве
|
||||
## buf - Байтовый массив
|
||||
## index - Индекс младшего байта слова в массиве
|
||||
## val - Значение слова для записи в батовый массив
|
||||
## return - Ничего
|
||||
func set_wordi(buf: Array, index, val):
|
||||
"""
|
||||
Устанавливает слово в байтовом массиве
|
||||
:param buf: Байтовый массив
|
||||
:param index: Индекс младшего байта слова в массиве
|
||||
:param val: Значение слова для записи в батовый массив
|
||||
:return: None """
|
||||
buf[index] = val & 0xff
|
||||
buf[index + 1] = (val >> 8) & 0xff
|
||||
|
||||
|
||||
Reference in New Issue
Block a user