88 lines
3.3 KiB
GDScript
88 lines
3.3 KiB
GDScript
extends Node
|
||
|
||
static func map_value_to_item(data, item, value_name: StringName):
|
||
var meta = item.get_meta(value_name, '')
|
||
if meta == '':
|
||
return
|
||
if not (meta is String):
|
||
return
|
||
var paths: = Array()
|
||
tools.map_solid_to_array(meta, paths)
|
||
var ret_val: = [null, false, 0]
|
||
var paths_copy = paths.duplicate(true)
|
||
tools.get_value_by_path(data, paths, ret_val)
|
||
if ret_val[1]:
|
||
item.set(value_name, ret_val[0])
|
||
else:
|
||
push_error('не найден путь %s (%s) для $%s.%s (%s)' % [paths_copy, ret_val[2], item.name, value_name, item.tooltip_text])
|
||
|
||
static func map_error_codes_to_item(data, item, value_name: StringName, value_init: int):
|
||
var metas = item.get_meta(value_name, '')
|
||
if not (metas is Array):
|
||
return
|
||
var paths: = Array()
|
||
var values: = Array()
|
||
for meta in metas:
|
||
tools.map_solid_to_array(meta, paths)
|
||
var ret_val: = [null, false, 0]
|
||
var paths_copy = paths.duplicate(true)
|
||
tools.get_value_by_path(data, paths, ret_val)
|
||
if ret_val[1]:
|
||
values.append(ret_val[0])
|
||
else:
|
||
push_error('не найден путь %s(%s) для $%s.%s (%s)' % [paths_copy, ret_val[2], item.name, value_name, item.tooltip_text])
|
||
if values.size() == metas.size():
|
||
var test_res = 1 if values.count(true) == values.size() else 2
|
||
item.set(value_name, test_res)
|
||
else:
|
||
item.set(value_name, value_init)
|
||
|
||
# Плавное обновление с анимацией
|
||
static func map_value_to_item_animated(data, item, value_name: StringName):
|
||
var meta = item.get_meta(value_name, '')
|
||
if meta == '' or not (meta is String): return
|
||
|
||
var paths: = Array()
|
||
tools.map_solid_to_array(meta, paths)
|
||
var ret_val: = [null, false, 0]
|
||
tools.get_value_by_path(data, paths, ret_val)
|
||
|
||
if ret_val[1]:
|
||
_animate_property(item, value_name, ret_val[0])
|
||
else:
|
||
push_error('не найден путь для $%s.%s' % [item.name, value_name])
|
||
|
||
static func map_error_codes_to_item_animated(data, item, value_name: StringName, value_init: int):
|
||
var metas = item.get_meta(value_name, '')
|
||
if not (metas is Array): return
|
||
|
||
var paths: = Array()
|
||
var values: = Array()
|
||
for meta in metas:
|
||
tools.map_solid_to_array(meta, paths)
|
||
var ret_val: = [null, false, 0]
|
||
tools.get_value_by_path(data, paths, ret_val)
|
||
if ret_val[1]:
|
||
values.append(ret_val[0])
|
||
else:
|
||
push_error('не найден путь для $%s.%s' % [item.name, value_name])
|
||
|
||
var target_value: int
|
||
if values.size() == metas.size():
|
||
target_value = 1 if values.count(true) == values.size() else 2
|
||
else:
|
||
target_value = value_init
|
||
|
||
_animate_property(item, value_name, target_value)
|
||
|
||
static func _animate_property(item, property: StringName, target_value):
|
||
var current = item.get(property)
|
||
if typeof(current) != typeof(target_value): return
|
||
if current == target_value: return
|
||
|
||
# Исправление: преобразуем StringName в String для NodePath
|
||
var tween = item.create_tween()
|
||
tween.set_trans(Tween.TRANS_QUINT)
|
||
tween.set_ease(Tween.EASE_OUT)
|
||
tween.tween_property(item, NodePath(String(property)), target_value, 0.3)
|