555 lines
16 KiB
Plaintext
555 lines
16 KiB
Plaintext
[gd_scene load_steps=15 format=3 uid="uid://bcyxqni7gxvtq"]
|
||
|
||
[ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="1_n1aqt"]
|
||
[ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="2_rim3u"]
|
||
[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="3_3w8fg"]
|
||
[ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_mcviv"]
|
||
[ext_resource type="Texture2D" uid="uid://00871pb6moln" path="res://data/прогресс-фон-1.png" id="5_rim3u"]
|
||
[ext_resource type="Texture2D" uid="uid://c1k856fxhrjnh" path="res://data/прогресс-заполнение-1.png" id="6_3w8fg"]
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3nd2u"]
|
||
|
||
[sub_resource type="GDScript" id="GDScript_oj3k3"]
|
||
script/source = "@tool
|
||
class_name blok_v extends PanelContainer
|
||
|
||
@export var textures: Array
|
||
@export var animation_duration: float = 1.5
|
||
signal pressed(control: PanelContainer)
|
||
|
||
|
||
## Значения уровней
|
||
@export var value0: Array:
|
||
set(v):
|
||
value0.assign(v)
|
||
var items: Array = get_level_nodes()
|
||
var count: int = min(items.size(), v.size())
|
||
for i in count:
|
||
set_value0_animated(items[i], v[i])
|
||
|
||
|
||
## Значение уровня
|
||
@export var value1: float:
|
||
set(v):
|
||
value1 = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid1/level7.value = v
|
||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE
|
||
|
||
|
||
@export var min_value0: float:
|
||
set(v):
|
||
min_value0 = v
|
||
var items: = get_level_nodes()
|
||
set_group_param(items, 'min_value', v)
|
||
|
||
|
||
@export var min_value1: float:
|
||
set(v):
|
||
min_value1 = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid1/level7.min_value = v
|
||
|
||
|
||
@export var max_value0: float:
|
||
set(v):
|
||
max_value0 = v
|
||
var items: = get_level_nodes()
|
||
set_group_param(items, 'max_value', v)
|
||
|
||
|
||
@export var max_value1: float:
|
||
set(v):
|
||
max_value1 = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid1/level7.max_value = v
|
||
|
||
|
||
@export var step0: float:
|
||
set(v):
|
||
step0 = v
|
||
var items: = get_level_nodes()
|
||
set_group_param(items, 'step', v)
|
||
|
||
|
||
@export var step1: float:
|
||
set(v):
|
||
step1 = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid1/level7.step = v
|
||
|
||
|
||
@export var value_name0: String:
|
||
set(v):
|
||
value_name0 = v
|
||
var items: Array = get_name_nodes()
|
||
set_group_param(items, 'text', v)
|
||
|
||
|
||
@export var value_name1: String:
|
||
set(v):
|
||
value_name1 = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid2/lbl7.text = v
|
||
|
||
|
||
@export var fname: String:
|
||
set(v):
|
||
fname = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid0/fname.text = v
|
||
|
||
|
||
@export var rname: String:
|
||
set(v):
|
||
rname = v
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid0/rname.text = v
|
||
|
||
|
||
@export var state: int:
|
||
set(v):
|
||
state = tools.clip_value(v, 0, textures.size() - 1)
|
||
if not is_inside_tree():
|
||
return
|
||
$margin/vbox/grid0/state.texture = textures[state]
|
||
|
||
|
||
@export var alignment: int:
|
||
set(v):
|
||
alignment = v
|
||
if is_inside_tree():
|
||
$margin/vbox.alignment = v
|
||
|
||
|
||
@export var value0_info: String:
|
||
set(v):
|
||
value0_info = v
|
||
|
||
|
||
@export var value1_info: String:
|
||
set(v):
|
||
value1_info = v
|
||
|
||
|
||
func _on_button_pressed(): emit_signal('pressed', self)
|
||
func set_value0(value: Array): value0.assign(value)
|
||
func _enter_tree() -> void: call_deferred('_enter_tree_defered')
|
||
|
||
|
||
func _ready():
|
||
var items: Array = get_level_nodes()
|
||
for item in items:
|
||
item.connect('value_changed', on_level_changed.bind(item, value0_info))
|
||
on_level_changed(item.value, item, value0_info)
|
||
var level7: = $margin/vbox/grid1/level7
|
||
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
|
||
on_level_changed(level7.value, level7, value1_info)
|
||
|
||
|
||
func on_level_changed(_val: float, item: TextureProgressBar, info: String):
|
||
item.tooltip_text = '%s\\nТекущее: %0.2f\\nДиапазон: %0.2f…%0.2f' % [info, item.value, item.min_value, item.max_value]
|
||
|
||
|
||
func set_group_param(items: Array, param: StringName, v) -> void:
|
||
if not is_inside_tree():
|
||
return
|
||
if not get_tree():
|
||
return
|
||
for i in items.size():
|
||
items[i].set(param, v)
|
||
|
||
|
||
func set_value0_by_index(index: int, value: float) -> void:
|
||
var items: Array = get_level_nodes()
|
||
items[index].value = value
|
||
|
||
|
||
func _enter_tree_defered():
|
||
var items: Array = get_level_nodes()
|
||
var count: int = min(items.size(), value0.size())
|
||
for i in count:
|
||
items[i].min_value = min_value0
|
||
items[i].max_value = 1400 # max_value0: TODO для отладки
|
||
items[i].step = step0
|
||
items = get_name_nodes()
|
||
set_group_param(items, 'text', value_name0)
|
||
if is_inside_tree():
|
||
$margin/vbox/grid1/level7.value = value1
|
||
$margin/vbox/grid1/level7.min_value = min_value1
|
||
$margin/vbox/grid1/level7.max_value = max_value1
|
||
$margin/vbox/grid1/level7.step = step1
|
||
$margin/vbox/grid2/lbl7.text = value_name1
|
||
$margin/vbox.alignment = alignment
|
||
$margin/vbox/grid0/rname.text = rname
|
||
$margin/vbox/grid0/fname.text = fname
|
||
$margin/vbox/grid0/state.texture = textures[state]
|
||
#else:
|
||
#push_warning('обращение к %s вне дерева' % self) TODO: пишеться только когда заходишь в проект а дальше не используется
|
||
|
||
|
||
func get_level_nodes() -> Array:
|
||
if not is_inside_tree():
|
||
return []
|
||
if not get_tree():
|
||
return []
|
||
return [
|
||
$margin/vbox/grid1/level1,
|
||
$margin/vbox/grid1/level2,
|
||
$margin/vbox/grid1/level3,
|
||
$margin/vbox/grid1/level4,
|
||
$margin/vbox/grid1/level5,
|
||
$margin/vbox/grid1/level6 ]
|
||
|
||
|
||
func get_name_nodes() -> Array:
|
||
if not is_inside_tree():
|
||
return []
|
||
if not get_tree():
|
||
return []
|
||
return [
|
||
$margin/vbox/grid2/lbl1,
|
||
$margin/vbox/grid2/lbl2,
|
||
$margin/vbox/grid2/lbl3,
|
||
$margin/vbox/grid2/lbl4,
|
||
$margin/vbox/grid2/lbl5,
|
||
$margin/vbox/grid2/lbl6 ]
|
||
|
||
|
||
func set_value0_animated(target_node, target_value: float) -> void:
|
||
var tween: Tween = create_tween()
|
||
tween.set_ease(Tween.EASE_OUT)
|
||
tween.set_trans(Tween.TRANS_QUINT)
|
||
tween.tween_property(target_node, 'value', target_value, animation_duration)
|
||
"
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8yvwo"]
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6qu57"]
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_mlxje"]
|
||
|
||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3dspb"]
|
||
|
||
[sub_resource type="GDScript" id="GDScript_45hqb"]
|
||
script/source = "@tool
|
||
|
||
extends MarginContainer
|
||
|
||
|
||
func _enter_tree() -> void:
|
||
margins = [8, 8, 8, 8]
|
||
|
||
|
||
@export var margins: Array:
|
||
set(vals):
|
||
add_theme_constant_override('margin_top', vals[0])
|
||
add_theme_constant_override('margin_left', vals[1])
|
||
add_theme_constant_override('margin_bottom', vals[2])
|
||
add_theme_constant_override('margin_right', vals[3])
|
||
get:
|
||
var vals = [0, 0, 0, 0]
|
||
vals[0] = get_theme_constant('margin_top')
|
||
vals[1] = get_theme_constant('margin_left')
|
||
vals[2] = get_theme_constant('margin_bottom')
|
||
vals[3] = get_theme_constant('margin_right')
|
||
return vals
|
||
"
|
||
|
||
[node name="блок-в" type="PanelContainer"]
|
||
editor_description = "Элемент замены из ЗИП"
|
||
offset_right = 160.0
|
||
offset_bottom = 88.0
|
||
theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u")
|
||
script = SubResource("GDScript_oj3k3")
|
||
textures = [ExtResource("1_n1aqt"), ExtResource("2_rim3u"), ExtResource("3_3w8fg")]
|
||
value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0]
|
||
max_value0 = 1400.0
|
||
max_value1 = 70.0
|
||
step0 = 1.0
|
||
step1 = 1.0
|
||
value_name0 = "P,%"
|
||
value_name1 = "°C"
|
||
fname = "Блок В"
|
||
rname = "A1"
|
||
|
||
[node name="button" type="Button" parent="."]
|
||
layout_mode = 2
|
||
theme_override_styles/focus = SubResource("StyleBoxEmpty_rceim")
|
||
theme_override_styles/disabled = SubResource("StyleBoxEmpty_8yvwo")
|
||
theme_override_styles/hover = SubResource("StyleBoxEmpty_6qu57")
|
||
theme_override_styles/pressed = SubResource("StyleBoxEmpty_mlxje")
|
||
theme_override_styles/normal = SubResource("StyleBoxEmpty_3dspb")
|
||
|
||
[node name="rect" type="NinePatchRect" parent="."]
|
||
layout_mode = 2
|
||
texture = ExtResource("4_mcviv")
|
||
draw_center = false
|
||
region_rect = Rect2(0, 0, 63, 63)
|
||
patch_margin_left = 17
|
||
patch_margin_top = 17
|
||
patch_margin_right = 17
|
||
patch_margin_bottom = 15
|
||
|
||
[node name="margin" type="MarginContainer" parent="."]
|
||
layout_mode = 2
|
||
theme_override_constants/margin_left = 8
|
||
theme_override_constants/margin_top = 8
|
||
theme_override_constants/margin_right = 8
|
||
theme_override_constants/margin_bottom = 8
|
||
script = SubResource("GDScript_45hqb")
|
||
margins = [8, 8, 8, 8]
|
||
|
||
[node name="vbox" type="VBoxContainer" parent="margin"]
|
||
layout_mode = 2
|
||
|
||
[node name="grid0" type="GridContainer" parent="margin/vbox"]
|
||
layout_mode = 2
|
||
columns = 3
|
||
|
||
[node name="state" type="TextureRect" parent="margin/vbox/grid0"]
|
||
custom_minimum_size = Vector2(24, 24)
|
||
layout_mode = 2
|
||
size_flags_horizontal = 2
|
||
size_flags_vertical = 6
|
||
texture = ExtResource("1_n1aqt")
|
||
expand_mode = 1
|
||
|
||
[node name="fname" type="Label" parent="margin/vbox/grid0"]
|
||
self_modulate = Color(1, 1, 1, 0.627451)
|
||
custom_minimum_size = Vector2(0, 20)
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
theme_override_font_sizes/font_size = 17
|
||
text = "Блок В"
|
||
horizontal_alignment = 1
|
||
vertical_alignment = 1
|
||
|
||
[node name="rname" type="Label" parent="margin/vbox/grid0"]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 6
|
||
theme_override_font_sizes/font_size = 18
|
||
text = "A1"
|
||
horizontal_alignment = 2
|
||
vertical_alignment = 1
|
||
|
||
[node name="grid1" type="GridContainer" parent="margin/vbox"]
|
||
layout_mode = 2
|
||
size_flags_vertical = 3
|
||
columns = 7
|
||
|
||
[node name="level1" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level2" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level3" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level4" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level5" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level6" type="TextureProgressBar" parent="margin/vbox/grid1" groups=["уровни"]]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…1400.00"
|
||
mouse_filter = 0
|
||
max_value = 1400.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(1, 1, 1, 0.419608)
|
||
tint_progress = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="level7" type="TextureProgressBar" parent="margin/vbox/grid1"]
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
size_flags_vertical = 3
|
||
tooltip_text = "
|
||
Текущее: 0.00
|
||
Диапазон: 0.00…70.00"
|
||
mouse_filter = 0
|
||
max_value = 70.0
|
||
fill_mode = 3
|
||
nine_patch_stretch = true
|
||
stretch_margin_left = 8
|
||
stretch_margin_top = 8
|
||
stretch_margin_right = 8
|
||
stretch_margin_bottom = 8
|
||
texture_under = ExtResource("5_rim3u")
|
||
texture_progress = ExtResource("6_3w8fg")
|
||
tint_under = Color(0.890196, 0.486275, 0.196078, 1)
|
||
tint_over = Color(0.890196, 0.486275, 0.196078, 1)
|
||
|
||
[node name="grid2" type="GridContainer" parent="margin/vbox"]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_vertical = 4
|
||
columns = 7
|
||
|
||
[node name="lbl1" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl2" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl3" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl4" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl5" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl6" type="Label" parent="margin/vbox/grid2" groups=["названия"]]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "P,%"
|
||
horizontal_alignment = 1
|
||
|
||
[node name="lbl7" type="Label" parent="margin/vbox/grid2"]
|
||
clip_contents = true
|
||
layout_mode = 2
|
||
size_flags_horizontal = 3
|
||
theme_override_font_sizes/font_size = 8
|
||
text = "°C"
|
||
horizontal_alignment = 1
|
||
|
||
[connection signal="pressed" from="button" to="." method="_on_button_pressed"]
|