diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn new file mode 100644 index 0000000..6f5bede --- /dev/null +++ b/scenes/контроль/блок-в.tscn @@ -0,0 +1,461 @@ +[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 +extends PanelContainer + +@export var textures: Array + +signal pressed(control: PanelContainer) + + +## Значения уровней +@export var value0: Array[float]: + set(v): + value0 = v + if not is_inside_tree(): + return + var items: Array[Node] = get_tree().get_nodes_in_group('уровни') + var count: int = min(items.size(), v.size()) + for i in count: + items[i].value = v[i] + + +func _enter_tree() -> void: + call_deferred('_enter_tree_defered') + + +func _enter_tree_defered(): + var items: Array[Node] = get_tree().get_nodes_in_group('уровни') + var count: int = min(items.size(), value0.size()) + for i in count: + items[i].value = value0[i] + items[i].step = step0 + $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.alignment = alignment + $margin/vbox/grid0/rname.text = rname + $margin/vbox/grid0/fname.text = fname + set_group_param('названия', 'text', value_name0) + + +## Значение уровня +@export var value1: float: + set(v): + value1 = v + if not is_inside_tree(): + return + $margin/vbox/grid1/level7.value = v + + +@export var min_value0: float: + set(v): + min_value0 = v + set_group_param('уровни', '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 + set_group_param('уровни', '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 + set_group_param('уровни', '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 + set_group_param('названия', '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) + $margin/vbox/grid0/state.texture = textures[state] + + +@export var alignment: int: + set(v): + alignment = v + if not is_inside_tree(): + return + $margin/vbox.alignment = v + + +func _on_button_pressed(): emit_signal('pressed', self) + + +func set_group_param(group: StringName, param: StringName, v) -> void: + if not is_inside_tree(): + return + var items: Array[Node] = get_tree().get_nodes_in_group(group) + for i in items.size(): + items[i].set(param, v) + + +func set_value0_by_index(index: int, value: float) -> void: + var items: Array[Node] = get_tree().get_nodes_in_group('уровни') + items[index].value = value +" + +[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 = Array[float]([20.0, 30.0, 40.0, 50.0, 60.0, 70.0]) +value1 = 56.0 +min_value1 = -50.0 +max_value0 = 100.0 +max_value1 = 120.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 +value = 20.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 +value = 30.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 +value = 40.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 +value = 50.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 +value = 60.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 +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(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 +min_value = -50.0 +max_value = 120.0 +value = 56.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"]