Рефактор. Встроить скрипты в сцену

This commit is contained in:
sasha80
2025-08-28 13:55:21 +03:00
parent 9e0d08771c
commit b3db948eac
9 changed files with 180 additions and 178 deletions

View File

@@ -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)

View File

@@ -1 +0,0 @@
uid://beb41qdahkdp5

View File

@@ -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

View File

@@ -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)

View File

@@ -1 +0,0 @@
uid://b0wcp76bbl2jx

View File

@@ -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"]]

View File

@@ -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'))

View File

@@ -1 +0,0 @@
uid://cwurf51vh7ylm

View File

@@ -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="."]