diff --git a/scenes/pribor-externals/externals.gd b/scenes/pribor-externals/externals.gd deleted file mode 100644 index 2f708c6..0000000 --- a/scenes/pribor-externals/externals.gd +++ /dev/null @@ -1,17 +0,0 @@ -@tool -class_name pribor_externals extends 'res://scenes/контроль/прибор.gd' -var UnitPanel = load('res://scenes/контроль/элемент-ю.tscn') - - -func on_line_changed(unit_inst: unit.Unit, unit_panel: Control): unit_panel.state = unit_inst.online - - -func _ready() -> void: - if Engine.is_editor_hint(): - return - for unit_inst in network.units.values(): - var unit_panel = UnitPanel.instantiate() - unit_panel.fname = unit_inst.name - $grid.add_child(unit_panel) - unit_inst.connect('line_changed', on_line_changed.bind(unit_panel)) - on_line_changed(unit_inst, unit_panel) diff --git a/scenes/pribor-externals/externals.gd.uid b/scenes/pribor-externals/externals.gd.uid deleted file mode 100644 index ff00f2c..0000000 --- a/scenes/pribor-externals/externals.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://beb41qdahkdp5 diff --git a/scenes/pribor-externals/externals.tscn b/scenes/pribor-externals/externals.tscn index 830053f..238339f 100644 --- a/scenes/pribor-externals/externals.tscn +++ b/scenes/pribor-externals/externals.tscn @@ -1,16 +1,34 @@ [gd_scene load_steps=3 format=3 uid="uid://dwgvv4b4a5t1"] -[ext_resource type="Script" uid="uid://beb41qdahkdp5" path="res://scenes/pribor-externals/externals.gd" id="1_pacm1"] - [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pacm1"] +[sub_resource type="GDScript" id="GDScript_dk54t"] +script/source = "@tool +class_name externals extends 'res://scenes/контроль/прибор.gd' + +var UnitPanel = load('res://scenes/контроль/элемент-ю.tscn') + +func on_line_changed(unit_inst: unit.Unit, unit_panel: Control): unit_panel.state = unit_inst.online + + +func _ready() -> void: + if Engine.is_editor_hint(): + return + for unit_inst in network.units.values(): + var unit_panel = UnitPanel.instantiate() + unit_panel.fname = unit_inst.name + $grid.add_child(unit_panel) + unit_inst.connect('line_changed', on_line_changed.bind(unit_panel)) + on_line_changed(unit_inst, unit_panel) +" + [node name="externals" type="PanelContainer"] offset_left = 71.0 offset_top = 75.0 offset_right = 756.0 offset_bottom = 964.0 theme_override_styles/panel = SubResource("StyleBoxEmpty_pacm1") -script = ExtResource("1_pacm1") +script = SubResource("GDScript_dk54t") [node name="grid" type="GridContainer" parent="."] layout_mode = 2 diff --git a/scenes/контроль/контроль.gd b/scenes/контроль/контроль.gd deleted file mode 100644 index 24ade4c..0000000 --- a/scenes/контроль/контроль.gd +++ /dev/null @@ -1,81 +0,0 @@ -extends Panel - -""" -Режим контроль -""" -#TODO: рефактор: заменить подчёркивание на тире -const PRIBORS_RES = \ - { - 'externals': ['res://scenes/pribor-externals/externals.tscn', 'Контроль подключения внешних систем'], - 'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'], - 'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'], - 'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'], - 'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'], - 'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'], - 'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'], - 'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'], - 'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'], - 'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'], - 'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'], - 'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'], - 'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'], - 'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'], - 'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'], - 'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'], - 'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'], - 'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'], - } - - -func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online) - - -func _ready(): - var group = ButtonGroup.new() - for k in PRIBORS_RES: - var pribor_node = get_node(k) - var pribor_path = PRIBORS_RES[k][0] - var header_text = PRIBORS_RES[k][1] - pribor_node.set_button_group(group) - pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node)) - var conn_node = pribor_node.get_node('connect_pribor') - var pribor_meta = pribor_node.get_meta('unit_name', []) - var pribor_proc = pribor_node.get_meta('online_proc', '') - if pribor_proc == '': - continue - if pribor_meta.size(): - for i in pribor_meta.size(): - var unit_pribor = network.get_unit_instance(pribor_meta[i]) - unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta)) - - -func online_change_arr(_u, conn_node, pribor_meta): - var state_online = true - for i in pribor_meta.size(): - var unit_pribor = network.get_unit_instance(pribor_meta[i]) - if not unit_pribor.online: - state_online = false - break - conn_node.set_val(state_online) - - -func on_pribor_press(pribor_path, header_text, pribor_node): - var items = get_tree().get_nodes_in_group('pribor_items') - for item in items: - remove_child(item) - item.queue_free() - var pribor_obj = load(pribor_path) - if not pribor_obj: - push_error('не загружено: \"%s\" (%s)' % [pribor_path, header_text]) - return - var pribor = pribor_obj.instantiate() - if not pribor: - push_error('экземпляр не создан: \"%s\" (%s)' % [pribor_path, header_text]) - return - $lbl_header.text = header_text - var meta_list = pribor_node.get_meta_list() - if meta_list.find('unit_name') > -1: - var unit_name = pribor_node.get_meta('unit_name') - pribor.set_meta('unit_name', unit_name) - pribor.add_to_group('pribor_items') - add_child(pribor) diff --git a/scenes/контроль/контроль.gd.uid b/scenes/контроль/контроль.gd.uid deleted file mode 100644 index 274dfa2..0000000 --- a/scenes/контроль/контроль.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b0wcp76bbl2jx diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index e54f74f..330c624 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1,6 +1,5 @@ [gd_scene load_steps=17 format=3 uid="uid://lwmw4egynmd1"] -[ext_resource type="Script" uid="uid://b0wcp76bbl2jx" path="res://scenes/контроль/контроль.gd" id="1_x5d6w"] [ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"] [ext_resource type="Texture2D" uid="uid://bb80aigvv648i" path="res://data/кнопка-внешние-0.png" id="2_oysma"] [ext_resource type="Script" uid="uid://bj4nndrurbunl" path="res://scenes/контроль/кнопка-прибора.gd" id="3_4pt7j"] @@ -16,6 +15,90 @@ [ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="9_ll0vs"] [ext_resource type="Script" uid="uid://bncy1x53jp73d" path="res://scenes/контроль/connect_pribor.gd" id="11_u7tym"] +[sub_resource type="GDScript" id="GDScript_iqgf5"] +script/source = "extends Panel + +\"\"\" +Режим контроль +\"\"\" +#TODO: рефактор: заменить подчёркивание на тире +const PRIBORS_RES = \\ + { + 'externals': ['res://scenes/pribor-externals/externals.tscn', 'Контроль подключения внешних систем'], + 'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'], + 'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'], + 'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'], + 'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'], + 'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'], + 'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'], + 'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'], + 'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'], + 'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'], + 'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'], + 'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'], + 'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'], + 'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'], + 'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'], + 'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'], + 'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'], + 'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'], + } + + +func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online) + + +func _ready(): + var group = ButtonGroup.new() + for k in PRIBORS_RES: + var pribor_node = get_node(k) + var pribor_path = PRIBORS_RES[k][0] + var header_text = PRIBORS_RES[k][1] + pribor_node.set_button_group(group) + pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node)) + var conn_node = pribor_node.get_node('connect_pribor') + var pribor_meta = pribor_node.get_meta('unit_name', []) + var pribor_proc = pribor_node.get_meta('online_proc', '') + if pribor_proc == '': + continue + if pribor_meta.size(): + for i in pribor_meta.size(): + var unit_pribor = network.get_unit_instance(pribor_meta[i]) + unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta)) + + +func online_change_arr(_u, conn_node, pribor_meta): + var state_online = true + for i in pribor_meta.size(): + var unit_pribor = network.get_unit_instance(pribor_meta[i]) + if not unit_pribor.online: + state_online = false + break + conn_node.set_val(state_online) + + +func on_pribor_press(pribor_path, header_text, pribor_node): + var items = get_tree().get_nodes_in_group('pribor_items') + for item in items: + remove_child(item) + item.queue_free() + var pribor_obj = load(pribor_path) + if not pribor_obj: + push_error('не загружено: \\\"%s\\\" (%s)' % [pribor_path, header_text]) + return + var pribor = pribor_obj.instantiate() + if not pribor: + push_error('экземпляр не создан: \\\"%s\\\" (%s)' % [pribor_path, header_text]) + return + $lbl_header.text = header_text + var meta_list = pribor_node.get_meta_list() + if meta_list.find('unit_name') > -1: + var unit_name = pribor_node.get_meta('unit_name') + pribor.set_meta('unit_name', unit_name) + pribor.add_to_group('pribor_items') + add_child(pribor) +" + [sub_resource type="SpriteFrames" id="SpriteFrames_foasq"] animations = [{ "frames": [{ @@ -36,7 +119,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_x5d6w") +script = SubResource("GDScript_iqgf5") metadata/_edit_lock_ = true [node name="externals" type="TextureButton" parent="." groups=["pribor_buttons"]] diff --git a/scenes/контроль/элемент-я.gd b/scenes/контроль/элемент-я.gd deleted file mode 100644 index fd6a944..0000000 --- a/scenes/контроль/элемент-я.gd +++ /dev/null @@ -1,70 +0,0 @@ -extends Control - -@export var textures: Array -@export var unit_name: String = '' - - -enum STATE_VAL { - NONE = 0, - GOOD = 1, - ERROR = 2 } - - -signal pressed(control: PanelContainer) - - -func _on_button_pressed(): - emit_signal('pressed', self) - - -@export var state: int: - set(v): - state = tools.clip_value(v, 0, textures.size() - 1) - if is_inside_tree(): - $margin/vbox/grid/state.texture = textures[v] - - -@export var fname: String: - set(v): - fname = v - if is_inside_tree(): - $margin/vbox/grid/fname.text = v - - -@export var rname: String: - set(v): - rname = v - if is_inside_tree(): - $margin/vbox/grid/rname.text = v - - -@export var alignment: int: - set(v): - if is_inside_tree(): - $margin/vbox.alignment = v - - -func _ready() -> void: call_deferred('_on_resized') - - -func _on_resized() -> void: - $rect.size = size - $margin.size = size - - -func _enter_tree() -> void: - if Engine.is_editor_hint(): return - var unit_any = network.get_unit_instance(unit_name) - unit_any.connect('data_received', Callable(self, 'on_data_received')) - unit_any.connect('line_changed', Callable(self, 'on_line_changed')) - $margin/vbox.alignment = alignment - $margin/vbox/grid/fname.text = fname - $margin/vbox/grid/rname.text = rname - $margin/vbox/grid/state.texture = textures[state] - - -func _exit_tree() -> void: - if Engine.is_editor_hint(): return - var unit_any = network.get_unit_instance(unit_name) - unit_any.disconnect('data_received', Callable(self, 'on_data_received')) - unit_any.disconnect('line_changed', Callable(self, 'on_line_changed')) diff --git a/scenes/контроль/элемент-я.gd.uid b/scenes/контроль/элемент-я.gd.uid deleted file mode 100644 index a3f3d5e..0000000 --- a/scenes/контроль/элемент-я.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cwurf51vh7ylm diff --git a/scenes/контроль/элемент-я.tscn b/scenes/контроль/элемент-я.tscn index 3ca3f7a..45f5c62 100644 --- a/scenes/контроль/элемент-я.tscn +++ b/scenes/контроль/элемент-я.tscn @@ -1,11 +1,83 @@ [gd_scene load_steps=12 format=3 uid="uid://btpc78gucr57f"] -[ext_resource type="Script" uid="uid://cwurf51vh7ylm" path="res://scenes/контроль/элемент-я.gd" id="1_fwxi0"] [ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="3_dktys"] [ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="3_t4y6r"] [ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="4_bdhnj"] [ext_resource type="Texture2D" uid="uid://c4mdrmk7h638f" path="res://data/nine-patch-round.png" id="4_or1kj"] +[sub_resource type="GDScript" id="GDScript_rmhe2"] +script/source = "extends Control + +@export var textures: Array +@export var unit_name: String = '' + + +enum STATE_VAL { + NONE = 0, + GOOD = 1, + ERROR = 2 } + + +signal pressed(control: PanelContainer) + + +func _on_button_pressed(): + emit_signal('pressed', self) + + +@export var state: int: + set(v): + state = tools.clip_value(v, 0, textures.size() - 1) + if is_inside_tree(): + $margin/vbox/grid/state.texture = textures[v] + + +@export var fname: String: + set(v): + fname = v + if is_inside_tree(): + $margin/vbox/grid/fname.text = v + + +@export var rname: String: + set(v): + rname = v + if is_inside_tree(): + $margin/vbox/grid/rname.text = v + + +@export var alignment: int: + set(v): + if is_inside_tree(): + $margin/vbox.alignment = v + + +func _ready() -> void: call_deferred('_on_resized') + + +func _on_resized() -> void: + $rect.size = size + $margin.size = size + + +func _enter_tree() -> void: + if Engine.is_editor_hint(): return + var unit_any = network.get_unit_instance(unit_name) + unit_any.connect('data_received', Callable(self, 'on_data_received')) + unit_any.connect('line_changed', Callable(self, 'on_line_changed')) + $margin/vbox.alignment = alignment + $margin/vbox/grid/fname.text = fname + $margin/vbox/grid/rname.text = rname + $margin/vbox/grid/state.texture = textures[state] + + +func _exit_tree() -> void: + if Engine.is_editor_hint(): return + var unit_any = network.get_unit_instance(unit_name) + unit_any.disconnect('data_received', Callable(self, 'on_data_received')) + unit_any.disconnect('line_changed', Callable(self, 'on_line_changed')) +" + [sub_resource type="GDScript" id="GDScript_45hqb"] script/source = "@tool @@ -48,7 +120,7 @@ layout_mode = 3 anchors_preset = 0 offset_right = 180.0 offset_bottom = 155.0 -script = ExtResource("1_fwxi0") +script = SubResource("GDScript_rmhe2") textures = [ExtResource("3_dktys"), ExtResource("3_t4y6r"), ExtResource("4_bdhnj")] [node name="rect" type="NinePatchRect" parent="."]