Рефактор.
This commit is contained in:
@@ -4,12 +4,6 @@ extends "res://scenes/контроль/прибор.gd"
|
||||
static var json_parser: JSON = JSON.new()
|
||||
|
||||
|
||||
func get_string_slice(s_in: String, s_out: Array, i0: int, i1: int):
|
||||
for i in range(i0, i1):
|
||||
if s_in[i] != '\'':
|
||||
s_out[0] += s_in[i]
|
||||
|
||||
|
||||
func get_paths(meta: String, paths: Array):
|
||||
paths.clear()
|
||||
var i_chs = []
|
||||
@@ -24,7 +18,7 @@ func get_paths(meta: String, paths: Array):
|
||||
var i0 = 0
|
||||
for i1 in i_chs:
|
||||
var ss: = [String()]
|
||||
get_string_slice(meta, ss, i0, i1)
|
||||
tools.get_string_slice(meta, ss, i0, i1)
|
||||
if ss[0].is_valid_int():
|
||||
paths.append(ss[0].to_int())
|
||||
else:
|
||||
@@ -47,30 +41,18 @@ func _on_request_rtr_request_completed(result, _response_code, _headers, body: P
|
||||
log.error('ошибка при разборе: \"%s\"' % err)
|
||||
return
|
||||
|
||||
for child in $konverter/grid.get_children():
|
||||
map_to_konverter_item(json_parser.data, child, 'path_value0', 'value0')
|
||||
map_to_konverter_item(json_parser.data, child, 'path_value1', 'value1')
|
||||
map_to_konverter_item(json_parser.data, child, 'path_value2', 'value2')
|
||||
|
||||
|
||||
func map_to_konverter_item(data, item, meta_name: String, value_name: String):
|
||||
var paths: = Array()
|
||||
var ret_val: = [null]
|
||||
var meta: = String()
|
||||
|
||||
for child in $konverter/grid.get_children():
|
||||
meta = child.get_meta('path_value0')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value0 = ret_val[0]
|
||||
|
||||
meta = child.get_meta('path_value1')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value1 = ret_val[0]
|
||||
|
||||
meta = child.get_meta('path_value2')
|
||||
get_paths(meta, paths)
|
||||
get_value_by_path(json_parser.data, paths, ret_val)
|
||||
child.value2 = ret_val[0]
|
||||
|
||||
|
||||
func get_value_by_path(obj, indexes: Array, ret_val: Array):
|
||||
var index = indexes.pop_at(0)
|
||||
if indexes.size():
|
||||
get_value_by_path(obj[index], indexes, ret_val)
|
||||
var meta: = item.get_meta(meta_name) as String
|
||||
get_paths(meta, paths)
|
||||
if tools.get_value_by_path(data, paths, ret_val):
|
||||
item.set(value_name, ret_val[0])
|
||||
else:
|
||||
ret_val[0] = obj[index]
|
||||
push_error('ошибка: поле по пути %s для \"%s:%s\" (\"%s\") не найдено' % [paths, item.name, meta_name, value_name])
|
||||
|
||||
@@ -15,7 +15,7 @@ func type_is_num(val) -> bool: return (typeof(val) == TYPE_INT) or (typeof(val)
|
||||
func radians(val: float): return (val * PI) / 180.0
|
||||
|
||||
|
||||
## Возвращает значение из байтового массива в 16 битном слове[br]
|
||||
## Возвращает значение из байтового массива в 16 битном слове.[br]
|
||||
## [i]Следует использовать встроенные в[/i] [b]PackedByteArray[/b] [i]методы вместо этой функции.[/i]
|
||||
func ibytes_to_word(buf: PackedByteArray, i: int) -> int: return buf[i] + (buf[i + 1] * 256)
|
||||
|
||||
@@ -25,7 +25,46 @@ func hypot(x: float, y: float) -> float: return sqrt(x * x + y * y)
|
||||
|
||||
|
||||
## Проверяет пересечение диапазона [param x1], [param x2] с диапазоном [param y1], [param y2]
|
||||
func is_overlap(x1, x2, y1, y2): return max(x1, y1) <= min(x2, y2)
|
||||
func is_overlap(x1, x2, y1, y2) -> bool: return max(x1, y1) <= min(x2, y2)
|
||||
|
||||
|
||||
func _check_index(obj, index) -> bool:
|
||||
if (obj is Dictionary) and not obj.has(index):
|
||||
return false
|
||||
elif (obj is Array) and (index is int):
|
||||
if index < 0 and index >= obj.size():
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
## Возвращает значение поля хранящегося по указанному пути внутри объекта.[br]
|
||||
## [param obj] - Объект в котором хранится поле, должен быть [b]Dictionary[/b].[br]
|
||||
## [param paths] - Массив содержащий путь к полю значения, включая его имя[br]
|
||||
## [param ret_val] - Массив из одного элемента. После вызова, содержит значение искомого поля.[br]
|
||||
func get_value_by_path(obj, paths: Array, ret_val: Array) -> bool:
|
||||
var index = paths.pop_at(0)
|
||||
if paths.size():
|
||||
if _check_index(obj, index):
|
||||
get_value_by_path(obj[index], paths, ret_val)
|
||||
else:
|
||||
return false
|
||||
else:
|
||||
if _check_index(obj, index):
|
||||
ret_val[0] = obj[index]
|
||||
else:
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
## Возвращает часть от входной строки ограниченную индексами символов.[br]
|
||||
## [param s_in] - Входная строка.[br]
|
||||
## [param s_out] - Массив содержащий выходную строку.[br]
|
||||
## [param i0] - Индекс начала части строки.[br]
|
||||
## [param i1] - Индекс конца части строки. Возвращает все символы до этого индекса.
|
||||
func get_string_slice(s_in: String, s_out: Array, i0: int, i1: int):
|
||||
for i in range(i0, i1):
|
||||
if s_in[i] != '\'':
|
||||
s_out[0] += s_in[i]
|
||||
|
||||
|
||||
## Производит преобразование из декартовой в полярную систему координат
|
||||
|
||||
Reference in New Issue
Block a user