From 9e74a67e86cce1d7a8cb0519fe075229344ad4f9 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 3 Dec 2025 10:15:51 +0300 Subject: [PATCH 01/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=D1=8B=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85=D0=B8?= =?UTF-8?q?,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=9A=D0=90=D0=9F=D0=A1=20?= =?UTF-8?q?=D0=A0=D0=9F=D0=91=20=D0=BD=D0=B5=20=D0=BD=D0=B0=20=D1=81=D0=B2?= =?UTF-8?q?=D1=8F=D0=B7=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 4dcc22dc..238cf78d 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -277,10 +277,10 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v var ecm_active = true if not gos_flag: if ecm.nmfs in gos_nmfs: - interfer_off(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) ecm_active = false if ecm_active and (prd.fs_caps_id[ecm.nmfs] in fs_closed): - interfer_off(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) var th_id = thr.id for ecm_i in thrs.keys(): @@ -290,9 +290,9 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v ecm.kni = fposmod(thr.aoa - course, 360) call_ecm_proc(ecm) if ecm.nmfs in gos_nmfs: - interfer_off(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) elif prd.fs_caps_id[ecm.nmfs] in fs_closed: - interfer_off(ecm, unit_instance) + signaller.emit_signal('interfer_off', ecm) else: send_ecm(ecm, unit_instance) signaller.emit_signal('fs_update_color', ecms) @@ -382,7 +382,7 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v for ecm in ecms.values(): if ecm.nmfs == item.nmfs: if item.priority > ecm.priority: - interfer_off(ecm, u) + signaller.emit_signal('interfer_off', ecm) elif item.priority < ecm.priority: need_continue = true break @@ -504,17 +504,17 @@ func send_ecm(ecm, unit0) -> void: unit0.tx_stack.append(json_data) -func on_interfer_off_all(unit0, ecms: Dictionary) -> void: +func on_interfer_off_all(_unit0, ecms: Dictionary) -> void: for ecm in ecms.values(): - interfer_off(ecm, unit0) + signaller.emit_signal('interfer_off', ecm) -func on_threats_lost(th, ecms, unit0) -> void: +func on_threats_lost(th, ecms, _unit0) -> void: for key in interfer.thrs: if interfer.thrs[key] == th.id: var ecm_id = key var ecm = ecms[ecm_id] - interfer_off(ecm, unit0) + signaller.emit_signal('interfer_off', ecm) func pop_id() -> int: @@ -647,13 +647,19 @@ func get_krp(threat: threats.Threat): return krp -func on_interfer_off(ecm: Interfer, _ecms, unit_caps): +func on_interfer_off(ecm: Interfer, ecms, unit_caps): ecm.krp = INTERFER_OFF send_ecm(ecm, unit_caps) - - -func interfer_off(ecm, _unit_caps): - signaller.emit_signal('interfer_off', ecm) + if not unit_caps.online: + var sz = ecms.size() + signaller.emit_signal('on_prog_ecm_off', ecm) + ecms.erase(ecm.ispp) + thrs.erase(ecm.ispp) + cu.erase(ecm.ispp) + fs.erase(ecm.ispp) + push_id(ecm.ispp) + if sz != ecms.size(): + interfer.call_deferred('emit_signal', 'interfer_resized', ecms) func on_interfer_new(ecm, unit_caps): From 5dac4fae5edade966e643ea744c9f09b6d74a714 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 3 Dec 2025 12:09:01 +0300 Subject: [PATCH 02/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=81=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=A4=D0=A1=20=D0=B7=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B8=D1=82=20=D0=BE=D1=82=20=D1=81=D0=B2=D1=8F=D0=B7?= =?UTF-8?q?=D0=B8=20=D1=81=20=D0=9A=D0=90=D0=9F=D0=A1=20=D0=A0=D0=9F=D0=91?= =?UTF-8?q?=20=D0=B8=20=D0=AF=D0=A3-07.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/работа/работа.gd | 4 ++-- scenes/работа/работа.tscn | 2 +- scripts/prd.gd | 35 ++++++++++++++++++++++++++++------- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 6ae374b5..54ab937e 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -160,7 +160,7 @@ func init_fs_failed(): var sectors_count = $canvas.fs_default_colors.size() fs_failed.resize(sectors_count) for i in fs_failed.size(): - fs_failed[i] = AntBandState.ANT_BAND_READY + fs_failed[i] = AntBandState.ANT_BAND_FAILED ## Производит инициализацию. @@ -593,7 +593,7 @@ func on_interfer_prinuditelno(prenuditelno_sectors, btns): ## Вызывается при получении информации о состоянии модулей ФС от КАПС РПБ. func on_fs_update_state(fs_dict: Dictionary): for key in fs_dict.keys(): - fs_failed[key] = fs_dict[key].isg + fs_failed[key] = fs_dict[key].ready func on_btn_center_toggled(toggled_on: bool) -> void: diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 8282d3fc..c1eb2df2 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -383,8 +383,8 @@ texture_normal = ExtResource("14_ggrwd") [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] [connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"] diff --git a/scripts/prd.gd b/scripts/prd.gd index 33f804f8..33c6e7e8 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -119,6 +119,9 @@ class Fs: var freq_caps_rx: float = 0.0 ## Частота принятая от КАПС РПБ var width_caps_rx: float = 0.0 ## Ширина полосы принятая от КАПС РПБ var msvk: Array + var ready: bool = false ## Готовность сектора к излучению + var caps_online: bool = false ## Состояние связи с КАПС РПБ + var yau_07_online: bool = false ## Состояние связи ЯУ-07 signal update_modulation(index) @@ -148,7 +151,10 @@ class Fs: val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0007) data_arr.append(um_port) data_arr.append(val) - + + # Установка готовности модуля ФС к излучению + func set_ready(): + ready = isg and caps_online and yau_07_online class PRD: enum STATE_DEVICE { @@ -208,7 +214,6 @@ class PRD: if port == fs.um_port: fs.um_code_rx = u.isa_ports[port] & 0x7 - func on_line_changed(unit_ems): if not unit_ems.online: yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED @@ -303,7 +308,6 @@ class PRD: break return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR - func execute_cmd(): if not len(cmd_array): return if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return @@ -338,21 +342,24 @@ class PRD: yemsg_board.set_wait() log.error('Не удалось прочитать файл настроек ячейки ЭМС-Г %s' %abs_dir) - func on_update_modulation(index): yemsg_board.add_cmd(index/4, fs_dic[index].modulation) func set_um(data_arr): cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr]) - - + func set_fs_caps_online(caps_online: bool): + for fs in fs_dic.values(): + fs.caps_online = caps_online + fs.set_ready() + func _ready() -> void: check_dir() for prd_name in PRD_NAMES: var unit_prd = network.get_unit_instance(prd_name) var new_prd = PRD.new(prd_name, unit_prd) prd_dict[prd_name] = new_prd + new_prd.unit_yau07.connect('line_changed', on_yau07_line_changed.bind(new_prd)) var unit_control = TestPRD.new({'unit_prd': unit_prd}, new_prd.cmd_array) add_child(unit_control) new_prd.unit_control = unit_control @@ -367,6 +374,7 @@ func _ready() -> void: fs_caps_id[FS_PRD[key][1]] = key var unit_caps = network.get_unit_instance('уарэп-капсрпб') unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received')) + unit_caps.connect('line_changed', Callable(self, 'on_caps_line_changed')) signaller.connect('режим_контроль', Callable(self, 'on_mode_changed').bind(PrdState.CONTROL)) signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(PrdState.WORK)) var unit_nav = network.get_unit_instance('навигация') @@ -433,7 +441,6 @@ func update_fs_state(ecms, trenaz_mode: bool): prd_module.set_um(um_data_array) - ## Проверяет ниличие директории, если их нет, создаёт func check_dir(): var dir = DirAccess.open(yemsconsts.emsg_files_folder) @@ -461,6 +468,7 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb): var fs_module = fs_dict[ii] if fs.has('isg'): fs_module.isg = int(fs['isg']) + fs_module.set_ready() if fs.has('pow'): fs_module.pow_caps_rx = int(fs['pow']) if fs.has('freq'): @@ -479,3 +487,16 @@ func on_mode_changed(changed_mode: int) -> void: func on_navi_data_received(data: Dictionary): course = data.get('k', 0.0) + + +func on_caps_line_changed(unit_caps): + for pribor_prd in prd_dict.values(): + pribor_prd.set_fs_caps_online(unit_caps.online) + signaller.emit_signal('fs_update_state', fs_dict) + + +func on_yau07_line_changed(unit_yau07, prd_pribor): + for fs in prd_pribor.fs_dic.values(): + fs.yau_07_online = unit_yau07.online + fs.set_ready() + signaller.emit_signal('fs_update_state', fs_dict) From 3030eac0c924838158a96812043c6da7f5af72b7 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Wed, 3 Dec 2025 12:43:19 +0300 Subject: [PATCH 03/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BE=D1=82=20godot,=20=D1=81=D0=B0=D0=BC?= =?UTF-8?q?=20=D0=BE=D1=82=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BA=D1=8D=D1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/secondary-font.tres | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/data/secondary-font.tres b/data/secondary-font.tres index db9155eb..819c700f 100644 --- a/data/secondary-font.tres +++ b/data/secondary-font.tres @@ -4,19 +4,6 @@ [resource] fallbacks = Array[Font]([ExtResource("1_cxid7")]) -cache/0/17/0/ascent = 0.0 -cache/0/17/0/descent = 0.0 -cache/0/17/0/underline_position = 0.0 -cache/0/17/0/underline_thickness = 0.0 -cache/0/17/0/scale = 1.0 -cache/0/17/0/kerning_overrides/17/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/16/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/18/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/14/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/8/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/15/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/13/0 = Vector2(0, 0) -cache/0/17/0/kerning_overrides/20/0 = Vector2(0, 0) cache/0/16/0/ascent = 0.0 cache/0/16/0/descent = 0.0 cache/0/16/0/underline_position = 0.0 @@ -30,6 +17,24 @@ cache/0/16/0/kerning_overrides/8/0 = Vector2(0, 0) cache/0/16/0/kerning_overrides/15/0 = Vector2(0, 0) cache/0/16/0/kerning_overrides/13/0 = Vector2(0, 0) cache/0/16/0/kerning_overrides/20/0 = Vector2(0, 0) +cache/0/17/0/ascent = 0.0 +cache/0/17/0/descent = 0.0 +cache/0/17/0/underline_position = 0.0 +cache/0/17/0/underline_thickness = 0.0 +cache/0/17/0/scale = 1.0 +cache/0/17/0/kerning_overrides/17/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/16/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/18/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/14/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/15/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/13/0 = Vector2(0, 0) +cache/0/17/0/kerning_overrides/20/0 = Vector2(0, 0) +cache/0/22/0/ascent = 0.0 +cache/0/22/0/descent = 0.0 +cache/0/22/0/underline_position = 0.0 +cache/0/22/0/underline_thickness = 0.0 +cache/0/22/0/scale = 1.0 cache/0/18/0/ascent = 0.0 cache/0/18/0/descent = 0.0 cache/0/18/0/underline_position = 0.0 @@ -113,8 +118,3 @@ cache/0/19/0/descent = 0.0 cache/0/19/0/underline_position = 0.0 cache/0/19/0/underline_thickness = 0.0 cache/0/19/0/scale = 1.0 -cache/0/22/0/ascent = 0.0 -cache/0/22/0/descent = 0.0 -cache/0/22/0/underline_position = 0.0 -cache/0/22/0/underline_thickness = 0.0 -cache/0/22/0/scale = 1.0 From 021eba8a08e7630e6e147d6c6919f1ce7875bd10 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Wed, 3 Dec 2025 16:51:33 +0300 Subject: [PATCH 04/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/tabs-switch/lbl_ready.gd | 67 +++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index 19ecc2ea..eda1f797 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -22,6 +22,7 @@ class DeviceObserver: var device_name: String var status: Array = [false, false, false] # [online, operational, control_complete] var last_results: Dictionary = {} + var status_uf: bool = false func update_online_state(online: bool) -> bool: if status[DEVICE_STATUS.ONLINE] != online: @@ -59,6 +60,7 @@ class DeviceObserver: var device_observers: Dictionary = {} var overall_prd_state: PRD_STATE = PRD_STATE.NONE +var status_uf: bool = false # Статус УФ (УАРЭП-ЭМС) func _ready() -> void: tooltip_text = 'Нет связи с приборами комплекса' @@ -111,15 +113,17 @@ func _on_prd_control_results(results: Dictionary, prd_module: Object) -> void: _recalculate_overall_state() -func _on_uf_status_receive(_unit_uf: Object) -> void: - # Логика для УФ (раскомментируй если нужно) - # var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1) - # var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) - # var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) - # var IP27B = ((unit_uf.status[2] >> 6) & 1) - # var uf_operational = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B - # signaller.emit_signal('update_uf_serviceability', uf_operational) - pass +func _on_uf_status_receive(unit_uf: Object) -> void: + if unit_uf: + var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1) + var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) + var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) + var IP27B = ((unit_uf.status[2] >> 6) & 1) + + var new_uf_status = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B + if status_uf != new_uf_status: + status_uf = new_uf_status + _recalculate_overall_state() func _recalculate_overall_state() -> void: @@ -127,6 +131,7 @@ func _recalculate_overall_state() -> void: var has_online_devices := false var all_operational := true + # Проверяем только если есть онлайн устройства for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: has_online_devices = true @@ -143,7 +148,10 @@ func _recalculate_overall_state() -> void: # Не прерываем, чтобы проверить все устройства if has_online_devices: - new_state = PRD_STATE.GOOD if all_operational else PRD_STATE.ERR + if all_operational and status_uf: + new_state = PRD_STATE.GOOD + else: + new_state = PRD_STATE.ERR else: new_state = PRD_STATE.NONE @@ -162,15 +170,40 @@ func _update_display() -> void: func _get_tooltip_text() -> String: + var tooltip := "" + match overall_prd_state: PRD_STATE.NONE: - return "Нет связи с приборами комплекса" + tooltip = "Нет связи с приборами комплекса" PRD_STATE.GOOD: - return "Все приборы комплекса исправны" + tooltip = "Все приборы комплекса исправны" PRD_STATE.ERR: - return "Обнаружены неисправности в комплексе" + tooltip = "Обнаружены неисправности в комплексе" _: - return "Неизвестное состояние" + tooltip = "Неизвестное состояние" + + # Добавляем информацию о статусе УФ, если есть онлайн устройства + if overall_prd_state != PRD_STATE.NONE: + tooltip += "\n\n" + tooltip += "Статус УФ (УАРЭП-ЭМС): " + tooltip += "Исправен" if status_uf else "Неисправен" + + # Добавляем детальную информацию о ПРД устройствах + tooltip += "\n\nДетальный статус ПРД:" + var online_count := 0 + var operational_count := 0 + + for device_name in device_observers: + var observer = device_observers[device_name] + if observer.status[DEVICE_STATUS.ONLINE]: + online_count += 1 + if observer.status[DEVICE_STATUS.STATUS]: + operational_count += 1 + + tooltip += "\nПРД онлайн: %d/%d" % [online_count, device_observers.size()] + tooltip += "\nПРД исправны: %d/%d" % [operational_count, online_count] + + return tooltip # Публичные методы для получения информации @@ -181,7 +214,8 @@ func get_device_status(device_name: String) -> Dictionary: "online": observer.status[DEVICE_STATUS.ONLINE], "operational": observer.status[DEVICE_STATUS.STATUS], "control_complete": observer.status[DEVICE_STATUS.CONTROL], - "last_results": observer.last_results.duplicate() + "last_results": observer.last_results.duplicate(), + "status_uf": status_uf } return {} @@ -204,5 +238,6 @@ func get_overall_status() -> Dictionary: "online_devices": online_count, "operational_devices": operational_count, "total_devices": device_observers.size(), - "control_complete_devices": control_complete_count + "control_complete_devices": control_complete_count, + "uf_status": status_uf } From 428831d83f07c7fb8e69529363ea90a0334c8d66 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Thu, 4 Dec 2025 17:10:27 +0300 Subject: [PATCH 05/54] =?UTF-8?q?=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=8F=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- export_presets.cfg | 4 ++-- scenes/контроль/контроль.tscn | 6 +++--- scripts/prd.gd | 6 ++++++ scripts/pribor-prd.gd | 4 ++-- scripts/yau07.gd | 1 + 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index dc12e8f0..1d03d188 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -21,8 +21,8 @@ script_export_mode=0 [preset.0.options] custom_template/debug="" -custom_template/release="" -debug/export_console_wrapper=2 +custom_template/release="/home/user/temp/godot.linuxbsd.template_release.x86_64" +debug/export_console_wrapper=0 binary_format/embed_pck=true texture_format/s3tc_bptc=true texture_format/etc2_astc=false diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 792d41eb..1e3fc626 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -456,7 +456,7 @@ texture_normal = ExtResource("6_i1yfn") stretch_mode = 4 flip_h = true script = ExtResource("3_4pt7j") -state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)] +state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(100, 0, 0, 1)] metadata/online_proc = "on_line_changed" metadata/unit_name = ["уарэп-яу07-1н"] @@ -1424,7 +1424,7 @@ texture_normal = ExtResource("6_i1yfn") stretch_mode = 4 flip_h = true script = ExtResource("3_4pt7j") -state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)] +state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(100, 0, 0, 1)] metadata/unit_name = ["уарэп-яу07-1в"] metadata/online_proc = "on_line_changed" @@ -1511,7 +1511,7 @@ texture_normal = ExtResource("6_i1yfn") stretch_mode = 4 flip_h = true script = ExtResource("3_4pt7j") -state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(0.65, 0.0715, 0.0715, 1)] +state_colors = [Color(1, 1, 1, 1), Color(0, 0.87, 0, 1), Color(100, 0, 0, 1)] metadata/unit_name = ["уарэп-яу07-1к"] metadata/online_proc = "on_line_changed" diff --git a/scripts/prd.gd b/scripts/prd.gd index 33c6e7e8..79bc0446 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -2,6 +2,8 @@ extends Node enum PrdState {WORK, CONTROL} +const TIME_YAU07_SEND = 50 + ## Границы секторов блоков ФС по частоте в режиме РТО. const FS_BAND_RTO: Dictionary = { 0: [200.0, 250.0], @@ -309,9 +311,12 @@ class PRD: return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR func execute_cmd(): + var time_now = Time.get_ticks_msec() + if (time_now - unit_yau07.time_tx) < TIME_YAU07_SEND: return if not len(cmd_array): return if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return var cmd: Array = cmd_array.pop_front() + unit_yau07.time_tx = time_now unit_yau07.send_isa(cmd[0], cmd[1]) func start_load(): @@ -415,6 +420,7 @@ func find_fs_index(aoa: float, freq: int, fs_index_arr: Array): ## Обновление состояния модулей формирователя сигналов func update_fs_state(ecms, trenaz_mode: bool): + var time_now = Time.get_ticks_msec() for fs in fs_dict.values(): ## Запрет модуляции для всех ФС fs.set_modulation(false) for ecm in ecms.values(): ## Выставление состояния помехи в ФС diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index e6385964..c603ea10 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -14,7 +14,7 @@ const PROGRESS_RAY_STATES: float = 50.0 const PROGRESS_COMPLETE: float = 100.0 ## Константы для работы с лучами управления -const COUNT_PACK_POWER_RECIEVE = 15 +const COUNT_PACK_POWER_RECIEVE = 10 const RAY_MASK = 0x07 const SPECIAL_LITERAS = [3, 5, 7] const RAY_m5: String = 'RAY_m5' @@ -160,7 +160,7 @@ var current_status: String = 'Ожидание запуска контроля' ## Сигналы класса signal control_is_over(device_name: String) # Когда контроль завершен signal status_updated(status_text: String) # Сигнал для обновления статуса -signal control_results_updated(control_results: Dictionary) # Обновление результатов контроля +signal control_results_updated(control_results: Dictionary) # Обновление результатов контроля signal update_progress(progress_value: float) # Обновление статуса выполнения контроля signal update_max_value_progress(max_progress_value: int) # Установка максимального значения для прогресс бара diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 54e02478..78861bd3 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -41,6 +41,7 @@ class YaU07 extends unit.Unit: var isa_block: = {} ## Результат выполнения команды "читать массив из порта" var flash_data: = PackedByteArray() ## Данные прочитанные из Flash var flash_len: = 0 ## Длинна данных прочитанных из Flash + var time_tx: int = 0 ## Время последней отправки команды func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) From b022e9e4180284c52839f86301f98f3b5c6f583f Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Thu, 4 Dec 2025 19:58:33 +0300 Subject: [PATCH 06/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BA=D0=BD=D0=BE=D0=BF?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/контроль.tscn | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 1e3fc626..5159058b 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=30 format=3 uid="uid://lwmw4egynmd1"] +[gd_scene load_steps=32 format=3 uid="uid://lwmw4egynmd1"] [ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"] [ext_resource type="Script" uid="uid://q3gmpsqspjfp" path="res://scenes/контроль/внешний.gd" id="2_8r80x"] @@ -256,6 +256,21 @@ shader_parameter/white = Vector3(0.14, 0.13, 0.13) shader_parameter/black = Vector3(0.95, 0.55, 0.05) shader_parameter/gamma = 2.0 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l5wui"] +bg_color = Color(0.47451, 0.47451, 0.47451, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.890196, 0.486275, 0.196078, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_j3xqy"] +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0.890196, 0.486275, 0.196078, 1) + [node name="Контроль" type="Panel"] anchors_preset = 15 anchor_right = 1.0 @@ -1982,6 +1997,11 @@ offset_top = 64.0 offset_right = 1390.0 offset_bottom = 104.0 focus_mode = 0 +theme_override_colors/font_hover_color = Color(1, 1, 1, 1) +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_styles/hover = SubResource("StyleBoxFlat_l5wui") +theme_override_styles/pressed = SubResource("StyleBoxFlat_l5wui") +theme_override_styles/normal = SubResource("StyleBoxFlat_j3xqy") text = "Запуск контроля" script = ExtResource("18_lbx5w") metadata/_edit_lock_ = true From 64703c46dc04d1a69b91d25bf6af4131eb4a0a4a Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Thu, 4 Dec 2025 20:15:43 +0300 Subject: [PATCH 07/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=BA=D0=B8=20=D0=B2=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=81=D1=85=D0=B5=D0=BC=20=D0=AD2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/контроль.tscn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 5159058b..30ddb56f 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1933,7 +1933,7 @@ offset_top = 26.0 offset_right = 1407.0 offset_bottom = 60.0 theme_override_font_sizes/font_size = 22 -text = "Показть функциональную схему Э2" +text = "Показать функциональную схему Э2" flat = true [node name="connect_legend0" type="AnimatedSprite2D" parent="."] From c45842266a9bd28550954127554c07b24db4f4be Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 5 Dec 2025 10:18:21 +0300 Subject: [PATCH 08/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=81=D1=82=D0=BE=D0=BB=D0=B1=D1=86=D0=B0?= =?UTF-8?q?=20=D0=B2=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=D1=85=20=D1=86?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9,=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=D1=83?= =?UTF-8?q?=D1=80=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-threats/scroll-threats.gd | 2 +- scenes/tabs-switch/lbl_ready.gd | 14 +++++++------- scenes/tilemap/tilemap.gd | 2 +- scripts/prd.gd | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scenes/frame-threats/scroll-threats.gd b/scenes/frame-threats/scroll-threats.gd index be9dc979..c224021b 100644 --- a/scenes/frame-threats/scroll-threats.gd +++ b/scenes/frame-threats/scroll-threats.gd @@ -10,7 +10,7 @@ const EmitLed = preload('res://scenes/frame-threats/emit-led.tscn') ## const TABLE_HEADER = [ TableHeader, TableHeader, TableHeader, TableHeader , TableHeader ] ## Описание ряда заголовка. const TABLE_ROW = [ CellLineEdit, CellLineEdit, CellLineEdit, CellLineEdit, EmitLed ] ## Описание ряда. const TABLE_COLUMN_PARAM = ['id', 'aoa', 'freq', 'proto', 'emit' ] ## Параметры цели отображаемые в таблице. -const TABLE_HEADERS_TEXT = ['№', 'Пеленг', 'Частота, МГц', 'Протокол', 'Помеха' ] ## Заголовки таблицы. +const TABLE_HEADERS_TEXT = ['Номер', 'Пеленг', 'Частота, МГц', 'Протокол', 'Помеха' ] ## Заголовки таблицы. const TABLE_COLUMN_SIZE = [ 65, 70, 110, 140, 65] ## Ширины колонок. const TABLE_TEXT_ROWS = 4 diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index eda1f797..f486a2d5 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -119,7 +119,7 @@ func _on_uf_status_receive(unit_uf: Object) -> void: var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) var IP27B = ((unit_uf.status[2] >> 6) & 1) - + var new_uf_status = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B if status_uf != new_uf_status: status_uf = new_uf_status @@ -171,7 +171,7 @@ func _update_display() -> void: func _get_tooltip_text() -> String: var tooltip := "" - + match overall_prd_state: PRD_STATE.NONE: tooltip = "Нет связи с приборами комплекса" @@ -181,28 +181,28 @@ func _get_tooltip_text() -> String: tooltip = "Обнаружены неисправности в комплексе" _: tooltip = "Неизвестное состояние" - + # Добавляем информацию о статусе УФ, если есть онлайн устройства if overall_prd_state != PRD_STATE.NONE: tooltip += "\n\n" tooltip += "Статус УФ (УАРЭП-ЭМС): " tooltip += "Исправен" if status_uf else "Неисправен" - + # Добавляем детальную информацию о ПРД устройствах tooltip += "\n\nДетальный статус ПРД:" var online_count := 0 var operational_count := 0 - + for device_name in device_observers: var observer = device_observers[device_name] if observer.status[DEVICE_STATUS.ONLINE]: online_count += 1 if observer.status[DEVICE_STATUS.STATUS]: operational_count += 1 - + tooltip += "\nПРД онлайн: %d/%d" % [online_count, device_observers.size()] tooltip += "\nПРД исправны: %d/%d" % [operational_count, online_count] - + return tooltip diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index 228d0ab4..f013c667 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -717,7 +717,7 @@ func set_coordinates(lon: float, lat: float, course: float) -> void: add_mark_from_lon_lat(ship_id, lon, lat, ship_instance, 0.0) else: _marks[ship_id].position = lonlat_to_world(lon, lat) - ship_instance.rotation_degrees = fmod(270.0 + course, 360.0) + ship_instance.rotation_degrees = fmod(course, 360.0) queue_redraw() diff --git a/scripts/prd.gd b/scripts/prd.gd index 79bc0446..b908451f 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -153,7 +153,7 @@ class Fs: val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0007) data_arr.append(um_port) data_arr.append(val) - + # Установка готовности модуля ФС к излучению func set_ready(): ready = isg and caps_online and yau_07_online @@ -357,7 +357,7 @@ class PRD: for fs in fs_dic.values(): fs.caps_online = caps_online fs.set_ready() - + func _ready() -> void: check_dir() for prd_name in PRD_NAMES: @@ -498,7 +498,7 @@ func on_navi_data_received(data: Dictionary): func on_caps_line_changed(unit_caps): for pribor_prd in prd_dict.values(): pribor_prd.set_fs_caps_online(unit_caps.online) - signaller.emit_signal('fs_update_state', fs_dict) + signaller.emit_signal('fs_update_state', fs_dict) func on_yau07_line_changed(unit_yau07, prd_pribor): From 5ad837ea3efb2755e1ad0153977a3194c6ba1403 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 5 Dec 2025 13:42:02 +0300 Subject: [PATCH 09/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9E=D0=BF=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/контроль.tscn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 3663cd08..1a72d8d1 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1918,7 +1918,7 @@ offset_top = 15.0 offset_right = 1408.0 offset_bottom = 49.0 theme_override_font_sizes/font_size = 22 -text = "Показть функциональную схему Э2" +text = "Показать функциональную схему Э2" flat = true [node name="connect_legend0" type="AnimatedSprite2D" parent="."] From f89540dfdca71a26b94bb4361ff98bd920c3ceb8 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 5 Dec 2025 16:44:31 +0300 Subject: [PATCH 10/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=8F=D1=89=D0=B8=D0=BA=20?= =?UTF-8?q?=D1=81=D1=83=D0=BD=D0=B4=D1=83=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/pribor-prd-k.gd | 2 +- scenes/pribor-prd-n/pribor-prd-n.gd | 2 +- scenes/pribor-prd-v/pribor-prd-v.gd | 2 +- scripts/interfer.gd | 1 - 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 04da31fb..9491754f 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -21,6 +21,7 @@ func _ready() -> void: signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device')) unit_prd_k.connect('status_updated', Callable(self, '_on_status_updated')) + find_labels(self) # Устанавливаем начальный статус _update_status_text(unit_prd_k.get_current_status()) on_press_device(unit_prd_k.self_name) @@ -43,7 +44,6 @@ func set_frame(node_frame: Node, val: int): node_frame.set_frame(val) func _on_start_control() -> void: set_default_state(get_tree().get_nodes_in_group('default_reset')) set_default_state(get_tree().get_nodes_in_group('power_amplifier')) - find_labels(self) await get_tree().create_timer(1.0).timeout on_press_device(unit_prd_k.self_name) diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 8b16452a..f1de070e 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -21,6 +21,7 @@ func _ready() -> void: signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device')) unit_prd_n.connect('status_updated', Callable(self, '_on_status_updated')) + find_labels(self) # Устанавливаем начальный статус _update_status_text(unit_prd_n.get_current_status()) on_press_device(unit_prd_n.self_name) @@ -43,7 +44,6 @@ func _on_start_control() -> void: set_default_state(get_tree().get_nodes_in_group('power_amplifier')) for um in get_tree().get_nodes_in_group('power_amplifier'): um.value0 = [0, 0, 0, 0, 0, 0] - find_labels(self) await get_tree().create_timer(1.0).timeout on_press_device(unit_prd_n.self_name) diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 2229c2a2..6a170636 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -21,6 +21,7 @@ func _ready() -> void: signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_v.connect('control_is_over', Callable(self, 'on_press_device')) unit_prd_v.connect('status_updated', Callable(self, '_on_status_updated')) + find_labels(self) # Устанавливаем начальный статус _update_status_text(unit_prd_v.get_current_status()) on_press_device(unit_prd_v.self_name) @@ -43,7 +44,6 @@ func _on_start_control() -> void: set_default_state(get_tree().get_nodes_in_group('power_amplifier')) for um in get_tree().get_nodes_in_group('power_amplifier'): um.value0 = [0, 0, 0, 0, 0, 0] - find_labels(self) await get_tree().create_timer(1.0).timeout on_press_device(unit_prd_v.self_name) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 238cf78d..94859343 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -496,7 +496,6 @@ func interfer_create(u, interfer_name, ecms, param, kni, id, dict, source_interf func send_ecm(ecm, unit0) -> void: if ecm.krp != INTERFER_OFF: if not ecm.modulation: - ecm.svk = 0 call_deferred('emit_signal', 'interfer_update', ecm) return msg6_num += 1 From a7c816e6cab025a1ec8fe5784a7f5c4c5dd33661 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Sun, 7 Dec 2025 18:49:03 +0300 Subject: [PATCH 11/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D1=8F=20=D0=A3=D0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uf/uf-ctl.gd | 96 ++++++++++++++++++++++++++++++++++ scenes/pribor-uf/uf-ctl.gd.uid | 1 + scenes/контроль/контроль.tscn | 9 +++- scripts/prd.gd | 1 - 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 scenes/pribor-uf/uf-ctl.gd create mode 100644 scenes/pribor-uf/uf-ctl.gd.uid diff --git a/scenes/pribor-uf/uf-ctl.gd b/scenes/pribor-uf/uf-ctl.gd new file mode 100644 index 00000000..6fda79a2 --- /dev/null +++ b/scenes/pribor-uf/uf-ctl.gd @@ -0,0 +1,96 @@ +class_name UFControl + +signal update_uf_serviceability(status: bool) + +#region Константы и переменные +enum StatusIndex { + SOCKETS = 0, + IP_220_27B = 2 +} + +var unit_uf: Object +var uf_status: Dictionary + +var _self_name: String +var _serviceability: bool = false +var serviceability: bool: + get: + return _serviceability + set(value): + if value != _serviceability: + _serviceability = value + emit_signal('update_uf_serviceability', value) +#endregion + +#region Инициализация +func _init(name: String) -> void: + _self_name = name + unit_uf = network.get_unit_instance(_self_name) + unit_uf.connect('line_changed', on_line_changed) + unit_uf.connect('data_received', on_data_received) +#endregion + +#region Обработчики сигналов +func on_line_changed(status: Object) -> void: + '''Обработка изменения состояния линии связи''' + uf_status['УФ-онлайн'] = status.online + update_serviceability() + +func on_data_received(yau: Object) -> void: + '''Обработка полученных данных от УФ''' + var new_ems_status = control_ems(yau.status) + var status_changed = false + + # Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн' + for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']: + var old_value = uf_status.get(key, false) + var new_value = new_ems_status.get(key, false) + + if old_value != new_value: + uf_status[key] = new_value + status_changed = true + + if status_changed: + update_serviceability() +#endregion + +#region Статус и сервисабельность +func get_current_status() -> Dictionary: + '''Получение текущего статуса (только для чтения)''' + return uf_status.duplicate(true) + +func is_operational() -> bool: + '''Проверка, все ли системы работают нормально''' + return serviceability and uf_status.get('УФ-онлайн', false) + +func update_serviceability() -> void: + '''Обновление общего статуса сервисабельности''' + var new_serviceability: bool = true + + # Проверяем онлайн-статус + if uf_status.get('УФ-онлайн', false) == false: + new_serviceability = false + else: + # Проверяем все статусы КЭМС/ЭМС + for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']: + if uf_status.get(key, true) == false: + new_serviceability = false + break + + # Устанавливаем новое значение через setter + self.serviceability = new_serviceability +#endregion + +#region Вспомогательные методы +static func control_ems(status: Array) -> Dictionary: + '''Анализ статусов КЭМС/ЭМС''' + var status_dic: Dictionary = {} + if status.is_empty() or status.size() < 3: + return status_dic + + status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1) + status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1) + status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1) + status_dic['ИП220-27Б'] = bool((status[StatusIndex.IP_220_27B] >> 6) & 1) + return status_dic +#endregion diff --git a/scenes/pribor-uf/uf-ctl.gd.uid b/scenes/pribor-uf/uf-ctl.gd.uid new file mode 100644 index 00000000..20c27c67 --- /dev/null +++ b/scenes/pribor-uf/uf-ctl.gd.uid @@ -0,0 +1 @@ +uid://b6avo0uvwrxnj diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 30ddb56f..28e7d577 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -54,6 +54,7 @@ const PRIBORS_RES = \\ 'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'], 'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'], } +var uf_control: UFControl var ctl_btn_state := false var cur_pribor_node = null var check_ready_control: Dictionary = {} @@ -106,7 +107,8 @@ func _ready(): prd_module.unit_control.connect('update_max_value_progress', Callable(self, 'on_update_max_value_progress').bind(pribor_node)) prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over')) if item == 'уарэп-эмс': - signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node)) + uf_control = UFControl.new('уарэп-эмс') + uf_control.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node)) # Пиктограммы приборов, которые отображают состояние подключения только for pribor_node in get_tree().get_nodes_in_group('pribor_pics'): @@ -114,7 +116,9 @@ func _ready(): var unit_instance: = network.get_unit_instance(unit_name) var conn_node: = pribor_node.get_node('connect_pribor') unit_instance.connect('line_changed', on_line_changed.bind(conn_node, unit_name)) - + + + signaller.conn(signaller.режим_работа, on_mode_changed) signaller.conn(signaller.режим_журнал, on_mode_changed) signaller.conn(signaller.режим_настройки, on_mode_changed) @@ -170,6 +174,7 @@ func on_serviceability_changed(state: int, prd_pribor_node: Node)-> void: func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void: + print('uf_serviceaability: ', uf_serviceaability) uf_pribor.state = 1 if uf_serviceaability else 2 diff --git a/scripts/prd.gd b/scripts/prd.gd index b908451f..1e9efd5f 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -420,7 +420,6 @@ func find_fs_index(aoa: float, freq: int, fs_index_arr: Array): ## Обновление состояния модулей формирователя сигналов func update_fs_state(ecms, trenaz_mode: bool): - var time_now = Time.get_ticks_msec() for fs in fs_dict.values(): ## Запрет модуляции для всех ФС fs.set_modulation(false) for ecm in ecms.values(): ## Выставление состояния помехи в ФС From c74d5ccdad02c77fe574f3ca76bc3e6c226cbb9c Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Sun, 7 Dec 2025 20:14:51 +0300 Subject: [PATCH 12/54] =?UTF-8?q?=D0=9E=D1=82=D0=BB=D0=B0=D0=B4=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=A3=D0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uf/pribor-uf.gd | 150 +++++++++++++--------------- scenes/pribor-uf/uf-ctl.gd | 33 +++---- scenes/tabs-switch/lbl_ready.gd | 168 ++++++++++++++++++++------------ scenes/контроль/контроль.tscn | 7 +- scripts/signaller.gd | 2 +- 5 files changed, 195 insertions(+), 165 deletions(-) diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index acd59501..a35bc36d 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -1,113 +1,103 @@ @tool class_name pribor_uf extends 'res://scenes/контроль/прибор.gd' -signal control_is_over(device_name: String) # Когда контроль завершен enum STATE_VAL {NONE = 0, GOOD = 1, ERROR = 2} const DEV_LIST: Array = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0'] const USB_TRACKERBALL: String = '13ba:0018' const REVFF: String = '(rev ff)' -var unit_uf: Object +var uf_control: Object var ctrl_pos = 100 func _ready() -> void: if Engine.is_editor_hint(): return - signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device')) - unit_uf = network.get_unit_instance('уарэп-эмс') - unit_uf.connect('line_changed', on_line_changed) - on_line_changed() #control_vk() - control_ems(unit_uf.status) - status_uf() + uf_control = get_parent().uf_control + uf_control.connect('update_uf_serviceability', on_update_uf_serviceability) + var uf_status = uf_control.get_current_status() + control_ems(uf_status) find_labels(self) -func _on_start_contol_device(): - on_line_changed() - control_ems(unit_uf.status) # проверка ЭМС ячеек - status_uf() # отслеживание состояния прибора +func on_update_uf_serviceability(_state: int): + control_ems(uf_control.get_current_status()) -func on_line_changed(): - if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б +#func control_vk() -> void: + #var out_usb_str = '' + #var out_pci_str = '' + #var out_usb = [] + #var out_pci = [] +# + #OS.execute('lsusb', [], out_usb) # TODO: Не переносимое, платформозависимое + #for element in out_usb: + #out_usb_str += element +# + #OS.execute('lspci', [], out_pci) # TODO: Не переносимое, платформозависимое + #for element in out_pci: + #out_pci_str += element +# + #out_usb_str = out_usb_str.split('\n') + #out_pci_str = out_pci_str.split('\n') +# + #var i: int = 0 +# + #for string in out_usb_str: + #if USB_TRACKERBALL in string: + #i += 1 + #break + #for string in out_pci_str: + #for item in DEV_LIST: + #if item in string: + #i += 1 + #if REVFF in string: + #i -= 1 + #break +# + #if i == (DEV_LIST.size() + 1): + #$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD + #else: + #$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR + + +func control_ems(status: Dictionary) -> void: + if status['УФ-онлайн']: $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.GOOD + $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.GOOD - $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD ## заглушка для зеленения ВК-110 + $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if status['КЭМС-Б1'] else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if status['ЭМС-Б1'] else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if status['ЭМС-Б2'] else STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.GOOD if status['ИП220-27Б'] else STATE_VAL.ERROR else: $ref_uf/ref_kassetav13/ref_A7_YAU07.state = STATE_VAL.ERROR + $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.NONE + $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.NONE + $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.NONE - $ref_uf/ref_kassetav13/ref_A3_IP5B.state = STATE_VAL.NONE - $ref_uf/ref_kassetav13/ref_A9_ESW.state = STATE_VAL.NONE $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.NONE - $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.NONE + status_uf(status) -func control_vk() -> void: - var out_usb_str = '' - var out_pci_str = '' - var out_usb = [] - var out_pci = [] - - OS.execute('lsusb', [], out_usb) # TODO: Не переносимое, платформозависимое - for element in out_usb: - out_usb_str += element - - OS.execute('lspci', [], out_pci) # TODO: Не переносимое, платформозависимое - for element in out_pci: - out_pci_str += element - - out_usb_str = out_usb_str.split('\n') - out_pci_str = out_pci_str.split('\n') - - var i: int = 0 - - for string in out_usb_str: - if USB_TRACKERBALL in string: - i += 1 - break - for string in out_pci_str: - for item in DEV_LIST: - if item in string: - i += 1 - if REVFF in string: - i -= 1 - break - - if i == (DEV_LIST.size() + 1): - $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD - else: - $ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR - - -func control_ems(status: Array) -> void: - if status: - $ref_uf/ref_kassetav13/ref_A4_KEMS.state = STATE_VAL.GOOD if ((status[0] >> 0) & 1) and ((status[0] >> 3) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A5_EMS.state = STATE_VAL.GOOD if ((status[0] >> 1) & 1) and ((status[0] >> 4) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A6_EMS.state = STATE_VAL.GOOD if ((status[0] >> 2) & 1) and ((status[0] >> 5) & 1) else STATE_VAL.ERROR - $ref_uf/ref_kassetav13/ref_A12_IP27B.state = STATE_VAL.GOOD if ((status[2] >> 6) & 1) else STATE_VAL.ERROR - - -func status_uf() -> void: - var status_bu: int = $ref_uf/ref_bu1/ref_A8_BU.state - var status_yau: int = $ref_uf/ref_kassetav13/ref_A7_YAU07.state - var status_kyems: int = $ref_uf/ref_kassetav13/ref_A4_KEMS.state - var status_yems0: int = $ref_uf/ref_kassetav13/ref_A5_EMS.state - var status_yems1: int = $ref_uf/ref_kassetav13/ref_A6_EMS.state - var status_ip5: int = $ref_uf/ref_kassetav13/ref_A3_IP5B.state - var status_ip27: int = $ref_uf/ref_kassetav13/ref_A12_IP27B.state - - if (status_yau == 1) and (status_bu == 1) and (status_kyems == 1) \ - and (status_yems0 == 1) and (status_yems1 == 1) and (status_ip5 == 1) and (status_ip27 == 1): - $lbl_header2.text = 'Прибор исправен' - $lbl_header2.modulate = Color.GREEN - else: - $lbl_header2.text = 'Прибор неисправен' - $lbl_header2.modulate = Color.RED +func status_uf(status_uf_dic: Dictionary) -> void: + var is_ok: bool = true + if not status_uf_dic['УФ-онлайн']: + $lbl_header2.text = 'Ожидание связи с ЯУ-07Б' + $lbl_header2.modulate = Color.WHITE + elif status_uf_dic['УФ-онлайн']: + for socket in status_uf_dic: + if not status_uf_dic[socket]: + is_ok = false + if is_ok: + $lbl_header2.text = 'Прибор исправен' + $lbl_header2.modulate = Color.GREEN + elif not is_ok: + $lbl_header2.text = 'Прибор неисправен' + $lbl_header2.modulate = Color.RED $lbl_header2.visible = true - emit_signal('control_is_over', unit_uf.name) func find_labels(node1: Node): diff --git a/scenes/pribor-uf/uf-ctl.gd b/scenes/pribor-uf/uf-ctl.gd index 6fda79a2..602eb439 100644 --- a/scenes/pribor-uf/uf-ctl.gd +++ b/scenes/pribor-uf/uf-ctl.gd @@ -1,30 +1,27 @@ -class_name UFControl +class_name UFControl extends Node -signal update_uf_serviceability(status: bool) +signal update_uf_serviceability(status: int) #region Константы и переменные -enum StatusIndex { - SOCKETS = 0, - IP_220_27B = 2 -} - +enum StatusIndex {SOCKETS = 0, IP_220_27B = 2} +enum STATE_VAL {NONE = 0, GOOD = 1, ERROR = 2} var unit_uf: Object -var uf_status: Dictionary +var uf_status: Dictionary = {'УФ-онлайн': false, 'КЭМС-Б1': false, 'ЭМС-Б1': false, 'ЭМС-Б2': false, 'ИП220-27Б': false} var _self_name: String -var _serviceability: bool = false -var serviceability: bool: +var _serviceability: int = STATE_VAL.NONE +var serviceability: int: get: return _serviceability set(value): if value != _serviceability: _serviceability = value - emit_signal('update_uf_serviceability', value) + signaller.emit_signal('update_uf_serviceability', value) #endregion #region Инициализация -func _init(name: String) -> void: - _self_name = name +func _init(name_uf: String) -> void: + _self_name = name_uf unit_uf = network.get_unit_instance(_self_name) unit_uf.connect('line_changed', on_line_changed) unit_uf.connect('data_received', on_data_received) @@ -63,21 +60,21 @@ func is_operational() -> bool: '''Проверка, все ли системы работают нормально''' return serviceability and uf_status.get('УФ-онлайн', false) + func update_serviceability() -> void: '''Обновление общего статуса сервисабельности''' - var new_serviceability: bool = true + var new_serviceability: int = STATE_VAL.GOOD # Проверяем онлайн-статус if uf_status.get('УФ-онлайн', false) == false: - new_serviceability = false + new_serviceability = STATE_VAL.NONE else: # Проверяем все статусы КЭМС/ЭМС for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']: if uf_status.get(key, true) == false: - new_serviceability = false + new_serviceability = STATE_VAL.ERROR break - - # Устанавливаем новое значение через setter + # Новое значение через setter self.serviceability = new_serviceability #endregion diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index f486a2d5..a9dd3d2a 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -1,6 +1,6 @@ extends Label -enum PRD_STATE { +enum DEVICE_STATE { NONE, # Нет связи GOOD, # Исправно ERR # Отказ @@ -13,16 +13,15 @@ enum DEVICE_STATUS { } const STATUS_CONFIG := { - PRD_STATE.NONE: {"text": "Нет связи", "color": Color.WHITE, "font_color": Color.BLACK}, - PRD_STATE.GOOD: {"text": "Исправно", "color": Color.GREEN, "font_color": Color.BLACK}, - PRD_STATE.ERR: {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE} + DEVICE_STATE.NONE: {"text": "Нет связи", "color": Color.WHITE, "font_color": Color.BLACK}, + DEVICE_STATE.GOOD: {"text": "Исправно", "color": Color.GREEN, "font_color": Color.BLACK}, + DEVICE_STATE.ERR: {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE} } class DeviceObserver: var device_name: String var status: Array = [false, false, false] # [online, operational, control_complete] var last_results: Dictionary = {} - var status_uf: bool = false func update_online_state(online: bool) -> bool: if status[DEVICE_STATUS.ONLINE] != online: @@ -59,8 +58,8 @@ class DeviceObserver: return changed var device_observers: Dictionary = {} -var overall_prd_state: PRD_STATE = PRD_STATE.NONE -var status_uf: bool = false # Статус УФ (УАРЭП-ЭМС) +var overall_prd_state: DEVICE_STATE = DEVICE_STATE.NONE +var status_uf: int = DEVICE_STATE.NONE # Статус УФ (УАРЭП-ЭМС) func _ready() -> void: tooltip_text = 'Нет связи с приборами комплекса' @@ -79,10 +78,8 @@ func _ready() -> void: prd_module.unit_yau07.connect('line_changed', Callable(self, '_on_prd_online_changed').bind(prd_module)) # Подписка на УФ - var unit_uf = network.get_unit_instance('уарэп-эмс') - if unit_uf: - unit_uf.data_received.connect(Callable(self, '_on_uf_status_receive')) - + signaller.connect('update_uf_serviceability', _on_uf_status_receive) + # Инициализация начального состояния _recalculate_overall_state() @@ -113,48 +110,52 @@ func _on_prd_control_results(results: Dictionary, prd_module: Object) -> void: _recalculate_overall_state() -func _on_uf_status_receive(unit_uf: Object) -> void: - if unit_uf: - var KEMS_B = ((unit_uf.status[0] >> 0) & 1) and ((unit_uf.status[0] >> 3) & 1) - var EMS_B_1 = ((unit_uf.status[0] >> 1) & 1) and ((unit_uf.status[0] >> 4) & 1) - var EMS_B_2 = ((unit_uf.status[0] >> 2) & 1) and ((unit_uf.status[0] >> 5) & 1) - var IP27B = ((unit_uf.status[2] >> 6) & 1) - - var new_uf_status = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B - if status_uf != new_uf_status: - status_uf = new_uf_status - _recalculate_overall_state() +func _on_uf_status_receive(unit_uf_status: int) -> void: + if status_uf != unit_uf_status: + status_uf = unit_uf_status + _recalculate_overall_state() func _recalculate_overall_state() -> void: - var new_state := PRD_STATE.NONE - var has_online_devices := false - var all_operational := true - - # Проверяем только если есть онлайн устройства + var new_state := DEVICE_STATE.NONE + + # Проверяем статус ПРД + var prd_state := DEVICE_STATE.NONE + var has_online_prd := false + var all_prd_operational := true + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: - has_online_devices = true - + has_online_prd = true + if observer.status[DEVICE_STATUS.CONTROL]: - # Если контроль завершен - строгая проверка if not observer.status[DEVICE_STATUS.STATUS]: - all_operational = false + all_prd_operational = false break else: - # Если контроль в процессе - мягкая проверка if not observer.status[DEVICE_STATUS.STATUS]: - all_operational = false - # Не прерываем, чтобы проверить все устройства - - if has_online_devices: - if all_operational and status_uf: - new_state = PRD_STATE.GOOD + all_prd_operational = false + + if has_online_prd: + if all_prd_operational: + prd_state = DEVICE_STATE.GOOD else: - new_state = PRD_STATE.ERR + prd_state = DEVICE_STATE.ERR else: - new_state = PRD_STATE.NONE - + prd_state = DEVICE_STATE.NONE + + # Комбинируем статусы по правилу: + # 1. Если хоть один ERROR → ERROR + # 2. Если нет ERROR и хоть один GOOD → GOOD + # 3. Иначе → NONE + + if prd_state == DEVICE_STATE.ERR or status_uf == DEVICE_STATE.ERR: + new_state = DEVICE_STATE.ERR + elif prd_state == DEVICE_STATE.GOOD or status_uf == DEVICE_STATE.GOOD: + new_state = DEVICE_STATE.GOOD + else: + new_state = DEVICE_STATE.NONE + if overall_prd_state != new_state: overall_prd_state = new_state _update_display() @@ -171,39 +172,82 @@ func _update_display() -> void: func _get_tooltip_text() -> String: var tooltip := "" - + + # Получаем статистику по ПРД + var prd_summary = _get_prd_summary() + var uf_status_str = _get_uf_status_text() + match overall_prd_state: - PRD_STATE.NONE: - tooltip = "Нет связи с приборами комплекса" - PRD_STATE.GOOD: - tooltip = "Все приборы комплекса исправны" - PRD_STATE.ERR: + DEVICE_STATE.NONE: + tooltip = "Нет исправных систем в комплексе" + DEVICE_STATE.GOOD: + tooltip = "Комплекс исправен" + DEVICE_STATE.ERR: tooltip = "Обнаружены неисправности в комплексе" - _: - tooltip = "Неизвестное состояние" + + tooltip += "\n\nСтатус ПРД систем: " + prd_summary + tooltip += "\nСтатус УФ: " + uf_status_str + + # Детализация по источникам статуса + tooltip += "\n\nСостояние систем:" + + # ПРД системы + var prd_ok_count = 0 + var prd_total = 0 + for observer in device_observers.values(): + if observer.status[DEVICE_STATUS.ONLINE]: + prd_total += 1 + if observer.status[DEVICE_STATUS.STATUS]: + prd_ok_count += 1 + + tooltip += "\nПРД: %d/%d исправно" % [prd_ok_count, prd_total] + + # УФ система + tooltip += "\nУФ: " + _get_uf_status_text() + + return tooltip - # Добавляем информацию о статусе УФ, если есть онлайн устройства - if overall_prd_state != PRD_STATE.NONE: - tooltip += "\n\n" - tooltip += "Статус УФ (УАРЭП-ЭМС): " - tooltip += "Исправен" if status_uf else "Неисправен" - # Добавляем детальную информацию о ПРД устройствах - tooltip += "\n\nДетальный статус ПРД:" +func _get_prd_summary() -> String: var online_count := 0 var operational_count := 0 - - for device_name in device_observers: - var observer = device_observers[device_name] + + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: online_count += 1 if observer.status[DEVICE_STATUS.STATUS]: operational_count += 1 + + if online_count == 0: + return "Нет связи" + else: + return "%d/%d исправно" % [operational_count, online_count] - tooltip += "\nПРД онлайн: %d/%d" % [online_count, device_observers.size()] - tooltip += "\nПРД исправны: %d/%d" % [operational_count, online_count] - return tooltip +func _get_uf_status_text() -> String: + match status_uf: + DEVICE_STATE.NONE: + return "Нет данных" + DEVICE_STATE.GOOD: + return "Исправен" + DEVICE_STATE.ERR: + return "Неисправен" + _: + return "Неизвестно" + + +func _has_prd_errors() -> bool: + for observer in device_observers.values(): + if observer.status[DEVICE_STATUS.ONLINE] and not observer.status[DEVICE_STATUS.STATUS]: + return true + return false + + +func _has_operational_prd() -> bool: + for observer in device_observers.values(): + if observer.status[DEVICE_STATUS.ONLINE] and observer.status[DEVICE_STATUS.STATUS]: + return true + return false # Публичные методы для получения информации diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 28e7d577..7a5c209c 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -108,7 +108,7 @@ func _ready(): prd_module.unit_control.connect('control_is_over', Callable(self, 'on_control_is_over')) if item == 'уарэп-эмс': uf_control = UFControl.new('уарэп-эмс') - uf_control.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node)) + signaller.connect('update_uf_serviceability', Callable(self, 'on_update_uf_serviceability').bind(pribor_node)) # Пиктограммы приборов, которые отображают состояние подключения только for pribor_node in get_tree().get_nodes_in_group('pribor_pics'): @@ -173,9 +173,8 @@ func on_serviceability_changed(state: int, prd_pribor_node: Node)-> void: prd_pribor_node.state = state -func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void: - print('uf_serviceaability: ', uf_serviceaability) - uf_pribor.state = 1 if uf_serviceaability else 2 +func on_update_uf_serviceability(uf_serviceaability: int, uf_pribor: Node)-> void: + uf_pribor.state = uf_serviceaability func _on_chk_show_functional_toggled(toggled_on: bool) -> void: diff --git a/scripts/signaller.gd b/scripts/signaller.gd index 434df1ea..c2271316 100644 --- a/scripts/signaller.gd +++ b/scripts/signaller.gd @@ -204,7 +204,7 @@ signal update_coordinates_map(new_coordinates) ## Вызывается при изменении исправности прибора УФ.[br] ## [param uf_serviceaability] - обновленное значение состояния исправности ([b]true[/b] -signal update_uf_serviceability(uf_serviceaability: bool) +signal update_uf_serviceability(uf_serviceaability: int) signal tool_tip(new_ctrl_pos) From 426da5ff04f88862bb5f4af34e1bf69a6372ce51 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Sun, 7 Dec 2025 21:05:41 +0300 Subject: [PATCH 13/54] =?UTF-8?q?=D0=9E=D0=B1=D1=8A=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=90=D0=BB=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=D0=B0=D0=BD=D0=B4=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uf/pribor-uf.gd | 2 +- scenes/pribor-uf/uf-ctl.gd | 6 +++--- scenes/контроль/контроль.tscn | 6 +++--- scripts/pribor-prd.gd | 14 ++++++-------- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index a35bc36d..4ae83252 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -13,7 +13,7 @@ func _ready() -> void: if Engine.is_editor_hint(): return #control_vk() uf_control = get_parent().uf_control - uf_control.connect('update_uf_serviceability', on_update_uf_serviceability) + signaller.connect('update_uf_serviceability', on_update_uf_serviceability) var uf_status = uf_control.get_current_status() control_ems(uf_status) find_labels(self) diff --git a/scenes/pribor-uf/uf-ctl.gd b/scenes/pribor-uf/uf-ctl.gd index 602eb439..c9c48e64 100644 --- a/scenes/pribor-uf/uf-ctl.gd +++ b/scenes/pribor-uf/uf-ctl.gd @@ -10,7 +10,7 @@ var uf_status: Dictionary = {'УФ-онлайн': false, 'КЭМС-Б1': false, var _self_name: String var _serviceability: int = STATE_VAL.NONE -var serviceability: int: +var serviceability_uf: int: get: return _serviceability set(value): @@ -58,7 +58,7 @@ func get_current_status() -> Dictionary: func is_operational() -> bool: '''Проверка, все ли системы работают нормально''' - return serviceability and uf_status.get('УФ-онлайн', false) + return serviceability_uf and uf_status.get('УФ-онлайн', false) func update_serviceability() -> void: @@ -75,7 +75,7 @@ func update_serviceability() -> void: new_serviceability = STATE_VAL.ERROR break # Новое значение через setter - self.serviceability = new_serviceability + self.serviceability_uf = new_serviceability #endregion #region Вспомогательные методы diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 6be0fd78..7e4ad11f 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -566,7 +566,6 @@ metadata/unit_name = ["уарэп-эмс"] metadata/online_proc = "on_line_changed" [node name="label" type="Label" parent="pribor_uf"] -self_modulate = Color(0, 1, 0, 1) layout_mode = 0 offset_left = 15.0 offset_top = -44.0 @@ -1937,6 +1936,7 @@ offset_top = 15.0 offset_right = 1408.0 offset_bottom = 49.0 theme_override_font_sizes/font_size = 22 +disabled = true text = "Показать функциональную схему Э2" flat = true @@ -1996,9 +1996,9 @@ default_color = Color(1, 1, 1, 0.352941) [node name="control_prd_button" type="Button" parent="."] layout_mode = 0 -offset_left = 1043.0 +offset_left = 1040.0 offset_top = 64.0 -offset_right = 1390.0 +offset_right = 1416.0 offset_bottom = 104.0 focus_mode = 0 theme_override_colors/font_hover_color = Color(1, 1, 1, 1) diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index c603ea10..e95e9494 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -390,7 +390,6 @@ func _handle_init_state() -> void: if _get_current_ecm(): return state = STATE_MACHINE.CHEK_KASSETA_Y5 else: - if _get_current_ecm(): return # Завершение контроля если литеры закончились flags.control_is_over = true power_result = prep_power(power_for_litera, self_name) @@ -996,18 +995,17 @@ static func on_y5_control_result(block_kasseta: Dictionary) -> bool: ## Установка угла и аттенюации для УМ static func on_ug_setting(prd_unit: Object, settings_ug: Dictionary, prd_cmd_array: Array, cur_litera: int) -> bool: var result_1: int - var result_2: int if cur_litera == 1: result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result_1]]) prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3]]) else: - #if cur_litera in [2, 4, 6]: - result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) - prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result_1]]) - #elif cur_litera in [3, 5, 7]: - result_2 = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) - prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_2, result_2]]) + if cur_litera in [2, 4, 6]: + result_1 = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) + prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result_1]]) + elif cur_litera in [3, 5, 7]: + result_1 = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) + prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_2, result_1]]) return true From 6864b960fb6083d7856b01ef92aa3f8adf2c97bc Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 09:06:05 +0300 Subject: [PATCH 14/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.=20=D0=A1=D0=BA=D1=80=D0=B8=D0=BF=D1=82=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20=D0=9D=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 285 +++++++++++++++++++++++++++++ scenes/настройки/настройки.gd.uid | 1 + scenes/настройки/настройки.tscn | 291 +----------------------------- 3 files changed, 288 insertions(+), 289 deletions(-) create mode 100644 scenes/настройки/настройки.gd create mode 100644 scenes/настройки/настройки.gd.uid diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd new file mode 100644 index 00000000..43b92d8c --- /dev/null +++ b/scenes/настройки/настройки.gd @@ -0,0 +1,285 @@ +class_name configure extends Panel + +const TableHeader = preload('res://table/header.tscn') +const TableToggle = preload('res://table/settings-toggle.tscn') +const TableEdit = preload('res://table/ячейка-2.tscn') + +const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER] +const HEADER_ROW = [TableHeader, TableHeader] +const HEADER_ROW_TEXT = ['Параметр', 'Значение'] +const SETTING_TABLE = [ + ['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'], + ['Кнопка «ПД-М4»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ПД-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ОРН-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «К1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «СВ-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'], + ['Внешнее указание Трасса', TableEdit, TableToggle, 'Разрешить постановку помех от Трасса'], + ['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], + ['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'], + ['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \"ЭМС-2\"'], + ['Отладка контроля', TableEdit, TableToggle, 'Отображать отладку контроля'], + ['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'], + ['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'], + ['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'], + ['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], + ['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'], + ['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'], + ['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'], + ['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'], + ['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'], + ['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'], + ['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'], + ['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'], + ['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'], + ['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'], + ['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'], + ['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'], + ['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'], + ['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'], + ['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'], + ['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'], + ['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'], + ['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'], + ['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \"{x}\", \"{y}\", \"{z}\" для подстановки индекса плитки'], + ['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], + ['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], + ['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], + ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], + ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ], + ['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ], + ['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], + ['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'], + ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ] + +const EXTERNAL_CU = 16 ## Внешнее целеуказание +const TRASSA = 17 +const SUPPRESS = 18 ## Строка - Подавление +const KEYBOARD = 19 ## Строка - Виртуальная клавиатура +const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 +const DEBAG_CONTROL = 21## Строка - Отладка контроля +const COMMIT = 22 ## Строка - Версия УАРЭП +const GOS_BTN = 52 ## Разрешить работу по своим целям + +var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки + +func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row) + + +## Вызывается, когда узел впервые попадает в дерево сцены. +func _ready() -> void: + setting_tab() + if not OS.get_cmdline_args().has('++ограниченный'): + return + $Label2.text = 'Текущий режим доступа: ограниченный' + for node in $GridContainer.get_children().filter(func(b): return b is Button): + node.disabled = true + + +func on_external_cu_btn_pressed(btn) -> void: + ProjectSettings.set_setting('application/config/Внешнее управление', btn.button_pressed) + if btn.button_pressed: + signaller.emit_signal('interfer_off_all') + + +func on_trassa_btn_pressed(btn) -> void: + ProjectSettings.set_setting('application/config/Внешнее указание Трасса', btn.button_pressed) + + +func on_vk_pressed(btn) -> void: + signaller.emit_signal('kb_pressed', btn.button_pressed) + + +func on_gos_pressed(btn) -> void: + ProjectSettings.set_setting('application/config/Включить работу по своим целям', btn.button_pressed) + + +func on_ems2_pressed(btn) -> void: + var state = btn.button_pressed + signaller.emit_signal('ems2_hide_pressed', state) + + +func on_debag_control_pressed(btn) -> void: + var state = btn.button_pressed + signaller.emit_signal("debag_control_pressed", state) + + +func on_row_pressed(i_row: int): + $scroll_set/table.clear_rows_selected() + $scroll_set/table.set_row_selected(i_row, true) + + +func parse_cmd_line_args(settings_data: Dictionary): + var args = OS.get_cmdline_args() + for i in range(0, args.size(), 2): + var key: String = args[i] + key = key.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes() + if not settings_data.has(key): + continue + if not ((i + 1) < args.size()): + push_error('для аргумента \"%s\" не указано значение.' % key) + break + var val0 = args[i + 1] + var val1 = settings_data[key] + val0 = val0.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes() + if typeof(val1) == TYPE_BOOL: + if val0 not in ['yes', 'true', 'да', 'no', 'false', 'нет']: + push_error('для аргумента \"%s\" указано неверное значение \"%s\".' % [key, val0]) + break + settings_data[key] = true if val0 in ['yes', 'true', 'да'] else false + elif typeof(val1) == TYPE_ARRAY: + var val0s = val0.split(',') + if val0s.size() != val1.size(): + push_error('для аргумента \"%s\" указано неверное значение \"%s\" (исходное: \"%s\").' % [key, val0, val1]) + break + for j in val0s.size(): + var val: String = val0s[j] + val = val.lstrip('\'\" ').rstrip('\'\" ').strip_edges().strip_escapes() + if tools.type_is_num(val): + val0s[j] = int(val) + elif val in ['true', 'false']: + val0s[j] = true if val == 'true' else false + else: + val0s[j] = val + elif typeof(val1) == TYPE_STRING: + settings_data[key] = val0 + + +func setting_tab(): + $heard_table.set_header(HEADER_ROW) + $heard_table.set_header_text(HEADER_ROW_TEXT) + $heard_table.set_columns_min_size([600, 950]) + $heard_table.set_columns_alignments(ALIGNMENT) + var settings_data = {} + parse_cmd_line_args(settings_data) + for key in settings_data: + ProjectSettings.set_setting('application/config/%s' % key, settings_data[key]) + for i in SETTING_TABLE.size(): + var tbl_row = SETTING_TABLE[i] + var param_name = tbl_row[0] + var node_label = tbl_row[1] + var node_value = tbl_row[2] + var tootip_text = tbl_row[3] + name_to_line_index[param_name] = i + $scroll_set/table.add_row([node_label, node_value]) + var label_instance = $scroll_set/table.get_node2(0, i) + label_instance.text = param_name + label_instance.tooltip_text = tootip_text + $scroll_set/table.set_node_editable(0, i, false) + var node_values = $scroll_set/table.get_node2(1, i).get_children() + var edit_node = $scroll_set/table.get_node2(1, i) + if node_values.size(): + var child = node_values[0] + if child is CheckButton: + child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i)) + var val = ProjectSettings.get_setting('application/config/%s' % param_name, true) + child.set_pressed(val) + else: + if settings_data.has(param_name): + var val = settings_data[param_name] + if typeof(val) == TYPE_STRING: + $scroll_set/table.get_node2(1, i).text = settings_data[param_name] + if edit_node: + if edit_node is LineEdit: + $scroll_set/table.set_node_control(1, i, true) + $scroll_set/table.set_node_editable(1, COMMIT, false) + $scroll_set/table.set_columns_min_size([600, 950]) + $scroll_set/table.set_columns_alignments(ALIGNMENT) + $scroll_set/table.connect('row_pressed', Callable(self, 'on_row_pressed')) + var commit_instance = $scroll_set/table.get_node2(1, COMMIT) + commit_instance.text = '%s' % commit.VCS_HEAD + for i in SETTING_TABLE.size(): + var param_name = SETTING_TABLE[i][0] + var profile = $scroll_set/table.get_node2(1, i) + if settings.UnitProfiles.has(param_name): + var unit_data = settings.UnitProfiles[param_name][1] + profile.text = '' + for val in unit_data: + profile.text += str(val) + ',' + profile.text = profile.text.trim_suffix(',') + continue + var psk = 'application/config/%s' % param_name + if ProjectSettings.has_setting(psk): + var unit_data = ProjectSettings.get_setting(psk) + if is_instance_of(unit_data, TYPE_STRING): + profile.text = unit_data + button_settings() + + +func button_settings(): + var extern_cu_node = $scroll_set/table.get_node2(1, EXTERNAL_CU).get_children()[0] + extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node)) + on_external_cu_btn_pressed(extern_cu_node) + var trassa_node = $scroll_set/table.get_node2(1, TRASSA).get_children() + trassa_node = trassa_node[0] + trassa_node.connect('pressed', on_trassa_btn_pressed.bind(trassa_node)) + var vk_node = $scroll_set/table.get_node2(1, KEYBOARD).get_children()[0] + vk_node.connect('pressed', on_vk_pressed.bind(vk_node)) + var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[0] + ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node)) + ems2_hide_node.set_pressed(true) + on_ems2_pressed(ems2_hide_node) + var gos_node = $scroll_set/table.get_node2(1, GOS_BTN).get_children()[0] + gos_node.connect('pressed', on_gos_pressed.bind(gos_node)) + var debag_control = $scroll_set/table.get_node2(1, DEBAG_CONTROL).get_children()[0] + debag_control.connect('pressed', on_debag_control_pressed.bind(debag_control)) + debag_control.set_pressed(false) + on_debag_control_pressed(debag_control) + + +func _on_btn_save_settings_pressed(): + var json_data = {} + for i in SETTING_TABLE.size(): + var parameter = SETTING_TABLE[i][0] + if parameter in settings.UnitProfiles: + var ref_profile = settings.UnitProfiles[parameter][1] + var profiles = $scroll_set/table.get_node2(1, i) + var value = profiles.get_text() + if parameter not in json_data: + var row: = [] + for token in value.split(','): + var j: = row.size() + if token.is_valid_int(): + token = int(token) + elif token == 'false': + token = false + elif token == 'true': + token = true + if typeof(ref_profile[j]) == typeof(token): + row.append(token) + else: + # TODO: Это надо вывести на экран пользователю + push_error([parameter, j, type_string(typeof(ref_profile[j])), type_string(typeof(token))]) + row.append(ref_profile[j]) + json_data[parameter] = row + else: + var children = $scroll_set/table.get_node2(1, i).get_children() + if len(children): + var child = children[0] + json_data[parameter] = child.is_pressed() + else: + var row = $scroll_set/table.get_row(i) + json_data[parameter] = row[1].text + for key in json_data: + ProjectSettings.set_setting('application/config/%s' % key, json_data[key]) + var settings_file: = settings.get_settings_file_path() + var file: = FileAccess.open(settings_file, FileAccess.WRITE) + var abs_path: = ProjectSettings.globalize_path(settings_file) + if not file: + log.error('Не удалось открыть файл для записи \"%s\"' % abs_path) + return + var json_string: = JSON.stringify(json_data, ' ', true) + if file.store_string(json_string): + log.info('Настройки сохранены в файл \"%s\"' % abs_path) + file.close() diff --git a/scenes/настройки/настройки.gd.uid b/scenes/настройки/настройки.gd.uid new file mode 100644 index 00000000..88fb51c0 --- /dev/null +++ b/scenes/настройки/настройки.gd.uid @@ -0,0 +1 @@ +uid://dabpum5iqxc7y diff --git a/scenes/настройки/настройки.tscn b/scenes/настройки/настройки.tscn index d115368b..950d3e74 100644 --- a/scenes/настройки/настройки.tscn +++ b/scenes/настройки/настройки.tscn @@ -1,296 +1,9 @@ [gd_scene load_steps=7 format=3 uid="uid://bnptm4rlp60dq"] +[ext_resource type="Script" uid="uid://dabpum5iqxc7y" path="res://scenes/настройки/настройки.gd" id="1_60bya"] [ext_resource type="Script" uid="uid://c5pq0hbrij34d" path="res://table/table.gd" id="2_6sx73"] [ext_resource type="Texture2D" uid="uid://csnts8f155sf7" path="res://data/save1.png" id="3_dbpks"] -[sub_resource type="GDScript" id="GDScript_fc87o"] -script/source = "class_name configure extends Panel - -const TableHeader = preload('res://table/header.tscn') -const TableToggle = preload('res://table/settings-toggle.tscn') -const TableEdit = preload('res://table/ячейка-2.tscn') - -const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER] -const HEADER_ROW = [TableHeader, TableHeader] -const HEADER_ROW_TEXT = ['Параметр', 'Значение'] -const SETTING_TABLE = [ - ['Ограниченный режим', TableEdit, TableToggle, 'Ограничть возможности по постановке помех'], - ['Кнопка «ПД-М4»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ПД-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ОЗП-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «МЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ОРН-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ОРН-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ЛЧМ-1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ПД-М4С»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ПД-ЧМ»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «СВ-И1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «К1»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «СВ-М2»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «ОРН»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «JTIDS»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Кнопка «КУПД»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Внешнее управление', TableEdit, TableToggle, 'Передать управление в 5П28'], - ['Внешнее указание Трасса', TableEdit, TableToggle, 'Разрешить постановку помех от Трасса'], - ['Кнопка «Подавление»', TableEdit, TableToggle, 'Разрешить отображение кнопки'], - ['Виртуальная клавиатура', TableEdit, TableToggle, 'Включить отображение экранной клавиатуры'], - ['Скрыть вкладку ЭМС 2', TableEdit, TableToggle, 'Отображать вкладку \\\"ЭМС-2\\\"'], - ['Отладка контроля', TableEdit, TableToggle, 'Отображать отладку контроля'], - ['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'], - ['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'], - ['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'], - ['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], - ['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'], - ['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'], - ['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'], - ['уарэп-яу07-2к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 2'], - ['уарэп-яу07-4в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 4'], - ['уарэп-яу07-4н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 4'], - ['уарэп-яу07-4к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 4'], - ['уарэп-яу07-1в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 1'], - ['уарэп-яу07-1н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 1'], - ['уарэп-яу07-1к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 1'], - ['уарэп-яу07-3в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 3'], - ['уарэп-яу07-3н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 3'], - ['уарэп-яу07-3к', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-К 3'], - ['уарэп-5п28', TableEdit, TableEdit, 'IP-адрес для связи с 5П28'], - ['навигация', TableEdit, TableEdit, 'Порт назначения для получения данных от АКНГ'], - ['уарэп-щ3', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором Щ3'], - ['уарэп-спт25-1', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 1'], - ['уарэп-спт25-2', TableEdit, TableEdit, 'Путь к UART-устройству для связи с прибором СПТ-25 2'], - ['Шаблон адреса сервера карт', TableEdit, TableEdit, 'Шаблон URL-адреса сервера карт, должен содержать поля \\\"{x}\\\", \\\"{y}\\\", \\\"{z}\\\" для подстановки индекса плитки'], - ['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], - ['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'], - ['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], - ['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'], - ['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ], - ['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ], - ['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], - ['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'], - ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ] - -const EXTERNAL_CU = 16 ## Внешнее целеуказание -const TRASSA = 17 -const SUPPRESS = 18 ## Строка - Подавление -const KEYBOARD = 19 ## Строка - Виртуальная клавиатура -const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 -const DEBAG_CONTROL = 21## Строка - Отладка контроля -const COMMIT = 22 ## Строка - Версия УАРЭП -const GOS_BTN = 52 ## Разрешить работу по своим целям - -var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки - -func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row) - - -## Вызывается, когда узел впервые попадает в дерево сцены. -func _ready() -> void: - setting_tab() - if not OS.get_cmdline_args().has('++ограниченный'): - return - $Label2.text = 'Текущий режим доступа: ограниченный' - for node in $GridContainer.get_children().filter(func(b): return b is Button): - node.disabled = true - - -func on_external_cu_btn_pressed(btn) -> void: - ProjectSettings.set_setting('application/config/Внешнее управление', btn.button_pressed) - if btn.button_pressed: - signaller.emit_signal('interfer_off_all') - - -func on_trassa_btn_pressed(btn) -> void: - ProjectSettings.set_setting('application/config/Внешнее указание Трасса', btn.button_pressed) - - -func on_vk_pressed(btn) -> void: - signaller.emit_signal('kb_pressed', btn.button_pressed) - - -func on_gos_pressed(btn) -> void: - ProjectSettings.set_setting('application/config/Включить работу по своим целям', btn.button_pressed) - - -func on_ems2_pressed(btn) -> void: - var state = btn.button_pressed - signaller.emit_signal('ems2_hide_pressed', state) - - -func on_debag_control_pressed(btn) -> void: - var state = btn.button_pressed - signaller.emit_signal(\"debag_control_pressed\", state) - - -func on_row_pressed(i_row: int): - $scroll_set/table.clear_rows_selected() - $scroll_set/table.set_row_selected(i_row, true) - - -func parse_cmd_line_args(settings_data: Dictionary): - var args = OS.get_cmdline_args() - for i in range(0, args.size(), 2): - var key: String = args[i] - key = key.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes() - if not settings_data.has(key): - continue - if not ((i + 1) < args.size()): - push_error('для аргумента \\\"%s\\\" не указано значение.' % key) - break - var val0 = args[i + 1] - var val1 = settings_data[key] - val0 = val0.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes() - if typeof(val1) == TYPE_BOOL: - if val0 not in ['yes', 'true', 'да', 'no', 'false', 'нет']: - push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\".' % [key, val0]) - break - settings_data[key] = true if val0 in ['yes', 'true', 'да'] else false - elif typeof(val1) == TYPE_ARRAY: - var val0s = val0.split(',') - if val0s.size() != val1.size(): - push_error('для аргумента \\\"%s\\\" указано неверное значение \\\"%s\\\" (исходное: \\\"%s\\\").' % [key, val0, val1]) - break - for j in val0s.size(): - var val: String = val0s[j] - val = val.lstrip('\\'\\\" ').rstrip('\\'\\\" ').strip_edges().strip_escapes() - if tools.type_is_num(val): - val0s[j] = int(val) - elif val in ['true', 'false']: - val0s[j] = true if val == 'true' else false - else: - val0s[j] = val - elif typeof(val1) == TYPE_STRING: - settings_data[key] = val0 - - -func setting_tab(): - $heard_table.set_header(HEADER_ROW) - $heard_table.set_header_text(HEADER_ROW_TEXT) - $heard_table.set_columns_min_size([600, 950]) - $heard_table.set_columns_alignments(ALIGNMENT) - var settings_data = {} - parse_cmd_line_args(settings_data) - for key in settings_data: - ProjectSettings.set_setting('application/config/%s' % key, settings_data[key]) - for i in SETTING_TABLE.size(): - var tbl_row = SETTING_TABLE[i] - var param_name = tbl_row[0] - var node_label = tbl_row[1] - var node_value = tbl_row[2] - var tootip_text = tbl_row[3] - name_to_line_index[param_name] = i - $scroll_set/table.add_row([node_label, node_value]) - var label_instance = $scroll_set/table.get_node2(0, i) - label_instance.text = param_name - label_instance.tooltip_text = tootip_text - $scroll_set/table.set_node_editable(0, i, false) - var node_values = $scroll_set/table.get_node2(1, i).get_children() - var edit_node = $scroll_set/table.get_node2(1, i) - if node_values.size(): - var child = node_values[0] - if child is CheckButton: - child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i)) - var val = ProjectSettings.get_setting('application/config/%s' % param_name, true) - child.set_pressed(val) - else: - if settings_data.has(param_name): - var val = settings_data[param_name] - if typeof(val) == TYPE_STRING: - $scroll_set/table.get_node2(1, i).text = settings_data[param_name] - if edit_node: - if edit_node is LineEdit: - $scroll_set/table.set_node_control(1, i, true) - $scroll_set/table.set_node_editable(1, COMMIT, false) - $scroll_set/table.set_columns_min_size([600, 950]) - $scroll_set/table.set_columns_alignments(ALIGNMENT) - $scroll_set/table.connect('row_pressed', Callable(self, 'on_row_pressed')) - var commit_instance = $scroll_set/table.get_node2(1, COMMIT) - commit_instance.text = '%s' % commit.VCS_HEAD - for i in SETTING_TABLE.size(): - var param_name = SETTING_TABLE[i][0] - var profile = $scroll_set/table.get_node2(1, i) - if settings.UnitProfiles.has(param_name): - var unit_data = settings.UnitProfiles[param_name][1] - profile.text = '' - for val in unit_data: - profile.text += str(val) + ',' - profile.text = profile.text.trim_suffix(',') - continue - var psk = 'application/config/%s' % param_name - if ProjectSettings.has_setting(psk): - var unit_data = ProjectSettings.get_setting(psk) - if is_instance_of(unit_data, TYPE_STRING): - profile.text = unit_data - button_settings() - - -func button_settings(): - var extern_cu_node = $scroll_set/table.get_node2(1, EXTERNAL_CU).get_children()[0] - extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node)) - on_external_cu_btn_pressed(extern_cu_node) - var trassa_node = $scroll_set/table.get_node2(1, TRASSA).get_children() - trassa_node = trassa_node[0] - trassa_node.connect('pressed', on_trassa_btn_pressed.bind(trassa_node)) - var vk_node = $scroll_set/table.get_node2(1, KEYBOARD).get_children()[0] - vk_node.connect('pressed', on_vk_pressed.bind(vk_node)) - var ems2_hide_node = $scroll_set/table.get_node2(1, HIDE_EMS2).get_children()[0] - ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node)) - ems2_hide_node.set_pressed(true) - on_ems2_pressed(ems2_hide_node) - var gos_node = $scroll_set/table.get_node2(1, GOS_BTN).get_children()[0] - gos_node.connect('pressed', on_gos_pressed.bind(gos_node)) - var debag_control = $scroll_set/table.get_node2(1, DEBAG_CONTROL).get_children()[0] - debag_control.connect('pressed', on_debag_control_pressed.bind(debag_control)) - debag_control.set_pressed(false) - on_debag_control_pressed(debag_control) - - -func _on_btn_save_settings_pressed(): - var json_data = {} - for i in SETTING_TABLE.size(): - var parameter = SETTING_TABLE[i][0] - if parameter in settings.UnitProfiles: - var ref_profile = settings.UnitProfiles[parameter][1] - var profiles = $scroll_set/table.get_node2(1, i) - var value = profiles.get_text() - if parameter not in json_data: - var row: = [] - for token in value.split(','): - var j: = row.size() - if token.is_valid_int(): - token = int(token) - elif token == 'false': - token = false - elif token == 'true': - token = true - if typeof(ref_profile[j]) == typeof(token): - row.append(token) - else: - # TODO: Это надо вывести на экран пользователю - push_error([parameter, j, type_string(typeof(ref_profile[j])), type_string(typeof(token))]) - row.append(ref_profile[j]) - json_data[parameter] = row - else: - var children = $scroll_set/table.get_node2(1, i).get_children() - if len(children): - var child = children[0] - json_data[parameter] = child.is_pressed() - else: - var row = $scroll_set/table.get_row(i) - json_data[parameter] = row[1].text - for key in json_data: - ProjectSettings.set_setting('application/config/%s' % key, json_data[key]) - var settings_file: = settings.get_settings_file_path() - var file: = FileAccess.open(settings_file, FileAccess.WRITE) - var abs_path: = ProjectSettings.globalize_path(settings_file) - if not file: - log.error('Не удалось открыть файл для записи \\\"%s\\\"' % abs_path) - return - var json_string: = JSON.stringify(json_data, ' ', true) - if file.store_string(json_string): - log.info('Настройки сохранены в файл \\\"%s\\\"' % abs_path) - file.close() -" - [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_pyq6h"] texture = ExtResource("3_dbpks") modulate_color = Color(0.8, 0.533333, 0.27451, 1) @@ -305,7 +18,7 @@ modulate_color = Color(0.8, 0.533333, 0.27451, 1) texture = ExtResource("3_dbpks") [node name="Настройки" type="Panel"] -script = SubResource("GDScript_fc87o") +script = ExtResource("1_60bya") [node name="heard_table" type="GridContainer" parent="."] layout_mode = 0 From 7e31052148b6f8775d7b7323f0f6daeaf4bd151d Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:19:15 +0300 Subject: [PATCH 15/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 03896213..d202615a 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,6 @@ - После клонирования запустить скрипт `git-hooks-config.sh` - В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` - При необходимости обновить `settings.json` +- Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` +и `ProjectSettings.get_setting('application/config/%s` % key_name)` для доступа к настройкам. + - `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE` From f62dab4e4e41d81e30c34c03de4319772b79328a Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:40:13 +0300 Subject: [PATCH 16/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20"=D0=9F=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 11 ++++++++++- scenes/работа/работа.gd | 4 +++- table/ячейка-цвет.tscn | 8 ++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 table/ячейка-цвет.tscn diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 43b92d8c..75f4f0d2 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -3,6 +3,7 @@ class_name configure extends Panel const TableHeader = preload('res://table/header.tscn') const TableToggle = preload('res://table/settings-toggle.tscn') const TableEdit = preload('res://table/ячейка-2.tscn') +const TableColorPick = preload('res://table/ячейка-цвет.tscn') const ALIGNMENT = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER] const HEADER_ROW = [TableHeader, TableHeader] @@ -61,7 +62,8 @@ const SETTING_TABLE = [ ['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ], ['уарэп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'], ['Включить работу по своим целям', TableEdit, TableToggle, 'Разрешает работу в секторе со своей целью'], - ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ] + ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], + ['Цвет кнопки \"Подавление\"', TableEdit, TableColorPick, 'Цвет кнопки. Введено по требованию ПЗ' ] ] const EXTERNAL_CU = 16 ## Внешнее целеуказание const TRASSA = 17 @@ -236,6 +238,13 @@ func button_settings(): debag_control.connect('pressed', on_debag_control_pressed.bind(debag_control)) debag_control.set_pressed(false) on_debag_control_pressed(debag_control) + var color_btn_act = $scroll_set/table.get_node2(1, COLOR_BTN_ACT) + color_btn_act.connect('popup_closed', on_color_closed.bind(color_btn_act)) + + +func on_color_closed(color_btn_act: ColorPickerButton): + var col = [color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, 1.0] + ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', col) func _on_btn_save_settings_pressed(): diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index c2fe4edc..4528bfca 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -38,6 +38,7 @@ var color_select: Color var color_emit: Color var color_emit_sel: Color var color_closed: Color +var col_btn_act: Color = Color.WHITE var color_closed_emit: Color var signal_conections: Array @@ -149,6 +150,7 @@ func on_settings_changed(): color_closed *= Color(1.0, 1.0, 1.0, 0.0) color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) + col_btn_act = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) ## Обработчик сигнала изменения списка целей. @@ -571,7 +573,7 @@ func update_fs_colors(): $canvas.set_band_failures(fs_failed) if fs_emit.size(): if $btn_activate.pressed: - $btn_activate.self_modulate = Color.RED + $btn_activate.self_modulate = col_btn_act else: $btn_activate.self_modulate = Color.WHITE else: diff --git a/table/ячейка-цвет.tscn b/table/ячейка-цвет.tscn new file mode 100644 index 00000000..e239b982 --- /dev/null +++ b/table/ячейка-цвет.tscn @@ -0,0 +1,8 @@ +[gd_scene format=3 uid="uid://cug5xjbfdm7x7"] + +[node name="ячейка-цвет" type="ColorPickerButton"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 From 167048af54d945e7017a8509b8ea0b16f1b78820 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:41:37 +0300 Subject: [PATCH 17/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index d202615a..b8ea9db9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +# Разработка + +- После клонирования запустить скрипт `git-hooks-config.sh` +- В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` +- При необходимости обновить `settings.json` +- Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` +и `ProjectSettings.get_setting('application/config/%s` % key_name)` для доступа к настройкам. + - `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE` +- Следовать [общим правилам](http://gitea.srez.local:3000/sasha80/gitea-tniis). + # Ссылки на составные части - [Исполняемые файлы для шаблонов экспорта и редактора](http://gitea.srez.local:3000/sasha80/godot-bin) @@ -31,12 +41,3 @@ необходимые для этого настройки. - Для доступа к последовательным портам расположенным на другом вычислительном модуле, следует использовать [проброс портов](http://gitea.srez.local:3000/sasha80/uart-forwarder). - -# Разработка - -- После клонирования запустить скрипт `git-hooks-config.sh` -- В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` -- При необходимости обновить `settings.json` -- Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` -и `ProjectSettings.get_setting('application/config/%s` % key_name)` для доступа к настройкам. - - `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE` From 3eb35faa7723d81a5a862449aa03b10d8221e402 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:48:48 +0300 Subject: [PATCH 18/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8ea9db9..24187887 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ - В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` - При необходимости обновить `settings.json` - Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` -и `ProjectSettings.get_setting('application/config/%s` % key_name)` для доступа к настройкам. +и `ProjectSettings.get_setting('application/config/%s % key_name)` для доступа к настройкам. - `key_name` брать из таблицы `res://scenes/настройки/настройки.gd/SETTING_TABLE` - Следовать [общим правилам](http://gitea.srez.local:3000/sasha80/gitea-tniis). From 0c36709b54c90232e512fc4b2dfce00361a53da0 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:49:35 +0300 Subject: [PATCH 19/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=D0=B0=D0=B6=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24187887..bdc8ad58 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Разработка - После клонирования запустить скрипт `git-hooks-config.sh` -- В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` + - В среде **Windows** запуск скрипта `git-hooks-config.sh` производить из оболочки `git bash` - При необходимости обновить `settings.json` - Использовать выражения вида `ProjectSettings.set_setting('application/config/%s' % key_name` и `ProjectSettings.get_setting('application/config/%s % key_name)` для доступа к настройкам. From b7a5d24de8081231f6f60d836380b7160951f5b7 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:51:25 +0300 Subject: [PATCH 20/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20"=D0=9F=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 75f4f0d2..6c4f8ad1 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -73,6 +73,8 @@ const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 const DEBAG_CONTROL = 21## Строка - Отладка контроля const COMMIT = 22 ## Строка - Версия УАРЭП const GOS_BTN = 52 ## Разрешить работу по своим целям +const COLOR_BTN_ACT = 54 ## Цвет кнопки "Подавление" + var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки From 4843d3294ae6c6254258d2ec90af71aaa9be699f Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 10:53:18 +0300 Subject: [PATCH 21/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 6c4f8ad1..8b6d2eb3 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -65,14 +65,16 @@ const SETTING_TABLE = [ ['Список своих протоколов', TableEdit, TableEdit, 'Список протоколов целей, по которым запрещено работать' ], ['Цвет кнопки \"Подавление\"', TableEdit, TableColorPick, 'Цвет кнопки. Введено по требованию ПЗ' ] ] -const EXTERNAL_CU = 16 ## Внешнее целеуказание -const TRASSA = 17 -const SUPPRESS = 18 ## Строка - Подавление -const KEYBOARD = 19 ## Строка - Виртуальная клавиатура -const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 -const DEBAG_CONTROL = 21## Строка - Отладка контроля -const COMMIT = 22 ## Строка - Версия УАРЭП -const GOS_BTN = 52 ## Разрешить работу по своим целям +## TODO: Придумать как избавиться от индексов +## Индексы строк таблицы. +const EXTERNAL_CU = 16 ## Внешнее целеуказание +const TRASSA = 17 ## Строка - Трасса +const SUPPRESS = 18 ## Строка - Подавление +const KEYBOARD = 19 ## Строка - Виртуальная клавиатура +const HIDE_EMS2 = 20 ## Строка - Скрыть вкладку ЭМС 2 +const DEBAG_CONTROL = 21 ## Строка - Отладка контроля +const COMMIT = 22 ## Строка - Версия УАРЭП +const GOS_BTN = 52 ## Разрешить работу по своим целям const COLOR_BTN_ACT = 54 ## Цвет кнопки "Подавление" From fd9cf0317f527295a4fa68eb366bbed8c5c64fce Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 8 Dec 2025 16:05:18 +0300 Subject: [PATCH 22/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B9=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=B2=D0=B5=D0=B4=D0=BA=D0=B8=20=D0=B2=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=B1=D0=BE=D1=80=D0=B0=D1=85=20=D0=90=D0=A4=D0=A1=D0=9F?= =?UTF-8?q?=20=D0=B8=20=D0=91=D0=9F=D0=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 4dcc22dc..985e71e9 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -111,6 +111,12 @@ var gos_nmfs: Array ## Список номеров var fs_closed: Dictionary ## Словарь секторов запрета +## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10) +enum AFSP_BPO_MODE { + run = 1, + test = 2 } + + ## Сеанс помехи. class Interfer: var ispp: int = 0 ## Индекс сеанса. @@ -127,6 +133,7 @@ class Interfer: var um: float ## Угол места для помехи. var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ var priority: int = 0 ## Приоритет помехи + static var afsp_bpo_mode: = AFSP_BPO_MODE.run ## Режим работы АФСП и БПО func _to_string() -> String: return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] @@ -138,6 +145,7 @@ class Interfer: data_to_json['ispp'] = ispp data_to_json['krp'] = ITERFER_MODE[krp][0] data_to_json['nmfs'] = nmfs + data_to_json['sa'] = afsp_bpo_mode if krp != INTERFER_OFF: data_to_json['kni'] = kni data_to_json['powp'] = powp @@ -211,6 +219,8 @@ func _ready() -> void: signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno')) signaller.connect('emit_changed', Callable(self, 'on_emit_changed').bind(ecms)) signaller.connect('режим_тренаж', on_trenazh_mode) + signaller.connect('режим_контроль', on_kontrol_mode) + signaller.connect('режим_работа', on_rabota_mode) signaller.connect('update_fs_closed', Callable(self, 'on_update_fs_closed')) threats.connect('threat_lost', Callable(self, 'on_threats_lost').bind(ecms, unit_caps)) threats.connect('threats_resized', Callable(self, 'on_threats_resized')) @@ -222,6 +232,8 @@ func _ready() -> void: func on_trenazh_mode(val: bool): trenazh_mode = val +func on_kontrol_mode(): Interfer.afsp_bpo_mode = AFSP_BPO_MODE.test +func on_rabota_mode(): Interfer.afsp_bpo_mode = AFSP_BPO_MODE.run func on_nav_data_received(coords: Dictionary, unit_caps): From 12fbb1fd557adf62e8bf3e3422e5916882fafad6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 08:49:21 +0300 Subject: [PATCH 23/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D0=B5=D1=91=20=D0=BA=D0=BE=D0=B4=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/yau07.gd | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 54e02478..9c5e2fb8 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -303,24 +303,24 @@ class YaU07 extends unit.Unit: if cmd_result != 1: # Команда не выполнена return false - var cmd_code: CmdCode = rx_data[cmd_code_pos] as CmdCode # "код команды" - var rc: = true - if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA): - rc = parse_isa(rx_data, status_len) + var cmd_code: int = rx_data[cmd_code_pos] # Код команды - elif (cmd_code == CmdCode.READ_BLOCK) or (cmd_code == CmdCode.WRITE_BLOCK): - rc = parse_block(rx_data, status_len) + if (cmd_state == CmdState.WAIT) and (cmd_num_rx == cmd_num_tx) and (cmd_code == cmd_code_tx): + cmd_code_rx = cmd_code + cmd_state = CmdState.DONE + var rc: = true + if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA): + rc = parse_isa(rx_data, status_len) + elif (cmd_code == CmdCode.READ_BLOCK) or (cmd_code == CmdCode.WRITE_BLOCK): + rc = parse_block(rx_data, status_len) + elif (cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \ + or (cmd_code == CmdCode.READ_FLASH_MP550) or (cmd_code == CmdCode.WRITE_FLASH_MP550) \ + or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH): + rc = parse_flash(rx_data, status_len, cmd_code) - elif (cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \ - or (cmd_code == CmdCode.READ_FLASH_MP550) or (cmd_code == CmdCode.WRITE_FLASH_MP550) \ - or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH): - rc = parse_flash(rx_data, status_len, cmd_code) - - if rc: - if (cmd_state == CmdState.WAIT) and (cmd_num_rx == cmd_num_tx): - cmd_state = CmdState.DONE - cmd_code_rx = cmd_code + if rc: emit_signal('command_done', self) - else: - emit_signal('parse_failed', self) + else: + emit_signal('parse_failed', self) + return true From bd78e1010dde819b3da70f7f77b11528a9bf421b Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 10:26:14 +0300 Subject: [PATCH 24/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=20=D0=BE=D1=82=20ide=20=D1=82=D0=B0=D0=B1=D1=83?= =?UTF-8?q?=D0=BB=D1=8F=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uf/pribor-uf.gd | 2 +- scenes/tabs-switch/lbl_ready.gd | 36 ++++++++++++++++----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index 4ae83252..8d23ab15 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -90,7 +90,7 @@ func status_uf(status_uf_dic: Dictionary) -> void: elif status_uf_dic['УФ-онлайн']: for socket in status_uf_dic: if not status_uf_dic[socket]: - is_ok = false + is_ok = false if is_ok: $lbl_header2.text = 'Прибор исправен' $lbl_header2.modulate = Color.GREEN diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index a9dd3d2a..00eadda9 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -79,7 +79,7 @@ func _ready() -> void: # Подписка на УФ signaller.connect('update_uf_serviceability', _on_uf_status_receive) - + # Инициализация начального состояния _recalculate_overall_state() @@ -118,16 +118,16 @@ func _on_uf_status_receive(unit_uf_status: int) -> void: func _recalculate_overall_state() -> void: var new_state := DEVICE_STATE.NONE - + # Проверяем статус ПРД var prd_state := DEVICE_STATE.NONE var has_online_prd := false var all_prd_operational := true - + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: has_online_prd = true - + if observer.status[DEVICE_STATUS.CONTROL]: if not observer.status[DEVICE_STATUS.STATUS]: all_prd_operational = false @@ -135,7 +135,7 @@ func _recalculate_overall_state() -> void: else: if not observer.status[DEVICE_STATUS.STATUS]: all_prd_operational = false - + if has_online_prd: if all_prd_operational: prd_state = DEVICE_STATE.GOOD @@ -143,19 +143,19 @@ func _recalculate_overall_state() -> void: prd_state = DEVICE_STATE.ERR else: prd_state = DEVICE_STATE.NONE - + # Комбинируем статусы по правилу: # 1. Если хоть один ERROR → ERROR # 2. Если нет ERROR и хоть один GOOD → GOOD # 3. Иначе → NONE - + if prd_state == DEVICE_STATE.ERR or status_uf == DEVICE_STATE.ERR: new_state = DEVICE_STATE.ERR elif prd_state == DEVICE_STATE.GOOD or status_uf == DEVICE_STATE.GOOD: new_state = DEVICE_STATE.GOOD else: new_state = DEVICE_STATE.NONE - + if overall_prd_state != new_state: overall_prd_state = new_state _update_display() @@ -172,11 +172,11 @@ func _update_display() -> void: func _get_tooltip_text() -> String: var tooltip := "" - + # Получаем статистику по ПРД var prd_summary = _get_prd_summary() var uf_status_str = _get_uf_status_text() - + match overall_prd_state: DEVICE_STATE.NONE: tooltip = "Нет исправных систем в комплексе" @@ -184,13 +184,13 @@ func _get_tooltip_text() -> String: tooltip = "Комплекс исправен" DEVICE_STATE.ERR: tooltip = "Обнаружены неисправности в комплексе" - + tooltip += "\n\nСтатус ПРД систем: " + prd_summary tooltip += "\nСтатус УФ: " + uf_status_str - + # Детализация по источникам статуса tooltip += "\n\nСостояние систем:" - + # ПРД системы var prd_ok_count = 0 var prd_total = 0 @@ -199,25 +199,25 @@ func _get_tooltip_text() -> String: prd_total += 1 if observer.status[DEVICE_STATUS.STATUS]: prd_ok_count += 1 - + tooltip += "\nПРД: %d/%d исправно" % [prd_ok_count, prd_total] - + # УФ система tooltip += "\nУФ: " + _get_uf_status_text() - + return tooltip func _get_prd_summary() -> String: var online_count := 0 var operational_count := 0 - + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: online_count += 1 if observer.status[DEVICE_STATUS.STATUS]: operational_count += 1 - + if online_count == 0: return "Нет связи" else: From 55253b091502959b7c4992e4efb4a502d4ada6c4 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 11:17:16 +0300 Subject: [PATCH 25/54] Godot4.4 --- scenes/контроль/контроль.tscn | 1 - 1 file changed, 1 deletion(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 1a72d8d1..cb6726ff 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -547,7 +547,6 @@ metadata/unit_name = ["уарэп-эмс"] metadata/online_proc = "on_line_changed" [node name="label" type="Label" parent="pribor_uf"] -self_modulate = Color(0, 1, 0, 1) layout_mode = 0 offset_left = 15.0 offset_top = -44.0 From 4ea8a4c254d4b42c1cdc13525d679e4ed26dc797 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 12:16:02 +0300 Subject: [PATCH 26/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20"=D0=9F=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 9 +++++++-- scenes/работа/работа.gd | 4 +++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 8b6d2eb3..c02da6d7 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -244,11 +244,16 @@ func button_settings(): on_debag_control_pressed(debag_control) var color_btn_act = $scroll_set/table.get_node2(1, COLOR_BTN_ACT) color_btn_act.connect('popup_closed', on_color_closed.bind(color_btn_act)) + var json_col = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', '[1.0, 1.0, 1.0, 1.0]') + var arr_col = JSON.parse_string(json_col) + color_btn_act.color = Color(arr_col[0], arr_col[1], arr_col[2], arr_col[3]) if arr_col else Color.WHITE + color_btn_act.text = JSON.stringify(arr_col) func on_color_closed(color_btn_act: ColorPickerButton): - var col = [color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, 1.0] - ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', col) + var col = [color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, color_btn_act.color.a] + color_btn_act.text = JSON.stringify(col) + ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', color_btn_act.text) func _on_btn_save_settings_pressed(): diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 4528bfca..ddec9e24 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -150,7 +150,9 @@ func on_settings_changed(): color_closed *= Color(1.0, 1.0, 1.0, 0.0) color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) - col_btn_act = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) + var json_col = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', '[1.0, 1.0, 1.0, 1.0]') + var arr_col = JSON.parse_string(json_col) + col_btn_act = Color(arr_col[0], arr_col[1], arr_col[2], arr_col[3]) if arr_col else Color.WHITE ## Обработчик сигнала изменения списка целей. From 92ff74efef89c834ed38bb9c6d4fed45db255633 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 12:17:03 +0300 Subject: [PATCH 27/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/yau07.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 9c5e2fb8..d479647e 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -171,7 +171,7 @@ class YaU07 extends unit.Unit: cmd_code_tx = cmd_code return true - func send_load_ems_done(cmd_code: int): + func send_load_ems_done(cmd_code: int) -> bool: if (cmd_state == CmdState.WAIT) \ or (cmd_state == CmdState.SEND) \ or (cmd_state == CmdState.UNCK): @@ -185,6 +185,7 @@ class YaU07 extends unit.Unit: tx_len = 7 cmd_state = CmdState.SEND cmd_code_tx = cmd_code + return true ## Возвращает код команды ЯУ-07. ## rx_data - Принятые данные. From 9be115a53550439095fccfa5a9f77f970843e433 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 12:19:30 +0300 Subject: [PATCH 28/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=9F=D1=83=D1=81=D1=82=D1=8C=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B5=20"=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=BE"=20=D0=B2=D1=8B=D0=B7?= =?UTF-8?q?=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B5=D1=81=D0=BB?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=D0=B0=20=D1=83=D1=81=D0=BF=D0=B5=D1=88=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BF=D1=80=D0=BE=D0=B9=D0=B4=D0=B5=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/yau07.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index d479647e..ad2a1b5d 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -306,9 +306,8 @@ class YaU07 extends unit.Unit: var cmd_code: int = rx_data[cmd_code_pos] # Код команды + cmd_code_rx = cmd_code if (cmd_state == CmdState.WAIT) and (cmd_num_rx == cmd_num_tx) and (cmd_code == cmd_code_tx): - cmd_code_rx = cmd_code - cmd_state = CmdState.DONE var rc: = true if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA): rc = parse_isa(rx_data, status_len) @@ -320,6 +319,7 @@ class YaU07 extends unit.Unit: rc = parse_flash(rx_data, status_len, cmd_code) if rc: + cmd_state = CmdState.DONE emit_signal('command_done', self) else: emit_signal('parse_failed', self) From b3322ee591cf1c35207b3694908907eb6d62fb69 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 9 Dec 2025 12:42:31 +0300 Subject: [PATCH 29/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-v/pribor-prd-v.gd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 2229c2a2..78707464 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -178,16 +178,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void: func find_labels(node1: Node): if node1 is Label: - if node1.name in ["lbl_rname", "rname"]: - if not node1.has_meta("tooltip_set"): + if node1.name in ['lbl_rname', 'rname']: + if not node1.has_meta('tooltip_set'): ctrl_pos += 1 var box_number = ceili(float(ctrl_pos) / 10.0) var position_number = ctrl_pos % 10 if position_number == 0: position_number = 10 - node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number] + node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number] node1.mouse_filter = Control.MOUSE_FILTER_STOP - node1.set_meta("tooltip_set", true) + node1.set_meta('tooltip_set', true) for child in node1.get_children(): find_labels(child) @@ -199,12 +199,12 @@ func _on_status_updated(status_text: String) -> void: func _update_status_text(text: String) -> void: $control_result.text = text # Можно добавить смену цвета в зависимости от статуса - if "Ошибка" in text or "неисправен" in text: + if 'Ошибка' in text or 'неисправен' in text: $control_result.add_theme_color_override('font_color', Color.RED) log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_v.self_name]) - elif "Ограничена" in text or "Предупреждение" in text: + elif 'Ограничена' in text or 'Предупреждение' in text: $control_result.add_theme_color_override('font_color', Color.YELLOW) - elif "исправен" in text or "завершён" in text: + elif 'исправен' in text or 'завершён' in text: $control_result.add_theme_color_override('font_color', Color.GREEN) log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_v.self_name]) else: From 9156249e7458a2a3df1cf83deed40fdb8125eb2f Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:47:25 +0300 Subject: [PATCH 30/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=AD=D0=9C=D0=A1-=D0=A2?= =?UTF-8?q?=D0=93=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B4=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=B8?= =?UTF-8?q?=D1=81=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс2/эмс2.tscn | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 90bde52a..b8e71422 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -485,11 +485,15 @@ text = "Изделие" [node name="Label" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = -33.0 -offset_top = -10.2857 +offset_top = -17.1429 offset_right = 35.0 -offset_bottom = 8.71429 +offset_bottom = 13.8571 theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Комплекс" +theme_override_font_sizes/font_size = 12 +text = "Источник +информации" +horizontal_alignment = 1 +vertical_alignment = 3 [node name="Label3" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = 133.0 @@ -519,19 +523,22 @@ horizontal_alignment = 1 [node name="Label6" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = 516.75 -offset_top = -10.2857 +offset_top = -18.8572 offset_right = 574.75 -offset_bottom = 8.7143 +offset_bottom = 22.1428 theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Верхняя" +text = "Верхняя +частота" [node name="Label7" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = 441.0 -offset_top = -10.2857 +offset_top = -19.7143 offset_right = 495.0 -offset_bottom = 8.7143 +offset_bottom = 21.2857 theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Нижняя" +text = "Нижняя +частота" +horizontal_alignment = 1 [node name="Label8" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = 362.25 From 115004194bd0fbca3bf3afe38d8c5aa6c02f00fd Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:48:30 +0300 Subject: [PATCH 31/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=A4=D0=A1-=D0=AD2=20=D0=BF=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B8=D1=81=D1=81=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-flat/button-flat.tscn | 4 +-- scenes/контроль/контроль.tscn | 50 +++++++++++++++++++---------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index 607ed5f6..93657443 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -61,8 +61,8 @@ script = ExtResource("1_ui6sg") visible = false z_as_relative = false layout_mode = 2 -border_color = Color(0, 0.549509, 0.921779, 1) -border_width = 5.0 +border_color = Color(0, 0.51, 0.85, 1) +border_width = 7.0 editor_only = false [node name="back" type="Sprite2D" parent="."] diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 7260fc28..56f9ec6f 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=32 format=3 uid="uid://lwmw4egynmd1"] +[gd_scene load_steps=33 format=3 uid="uid://lwmw4egynmd1"] [ext_resource type="Texture2D" uid="uid://bar8k5qef7kch" path="res://data/УФ.png" id="2_0nvm1"] [ext_resource type="Script" uid="uid://q3gmpsqspjfp" path="res://scenes/контроль/внешний.gd" id="2_8r80x"] @@ -68,8 +68,8 @@ func on_serv_changed(u, pribor_node, _pribor_meta): pribor_node.state = int(u.se func on_mode_changed(): clean_pribor_items() reset_pribor_buttons() - $chk_show_functional.disabled = true - $chk_show_functional.button_pressed = false + $frame_button/chk_show_functional.disabled = true + $frame_button/chk_show_functional.button_pressed = false func reset_pribor_buttons(): @@ -145,8 +145,8 @@ func clean_pribor_items(): func on_pribor_press(pribor_path, header_text, pribor_node): if cur_pribor_node: cur_pribor_node.show_functional = false - $chk_show_functional.disabled = false - $chk_show_functional.button_pressed = false + $frame_button/chk_show_functional.disabled = false + $frame_button/chk_show_functional.button_pressed = false cur_pribor_node = pribor_node clean_pribor_items() var pribor_obj = load(pribor_path) @@ -158,7 +158,7 @@ func on_pribor_press(pribor_path, header_text, pribor_node): push_error('экземпляр не создан: \\\"%s\\\" (%s)' % [pribor_path, header_text]) return $lbl_header.text = header_text - $chk_show_functional.disabled = false + $frame_button/chk_show_functional.disabled = false var meta_list = pribor_node.get_meta_list() if meta_list.find('unit_name') > -1: var unit_name = pribor_node.get_meta('unit_name') @@ -222,8 +222,8 @@ func _on_gui_input(event: InputEvent) -> void: node.button_pressed = false clean_pribor_items() cur_pribor_node = null - $chk_show_functional.button_pressed = false - $chk_show_functional.disabled = true + $frame_button/chk_show_functional.button_pressed = false + $frame_button/chk_show_functional.disabled = true func on_control_button_pressed(state: bool) -> void: @@ -255,10 +255,17 @@ animations = [{ [sub_resource type="ShaderMaterial" id="ShaderMaterial_71ec4"] shader = ExtResource("9_71ec4") -shader_parameter/white = Vector3(0.14, 0.13, 0.13) -shader_parameter/black = Vector3(0.95, 0.55, 0.05) +shader_parameter/white = Vector3(0, 0, 0) +shader_parameter/black = Vector3(1, 1, 1) shader_parameter/gamma = 2.0 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6hcgs"] +bg_color = Color(0.6, 0.6, 0.6, 0) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l5wui"] bg_color = Color(0.47451, 0.47451, 0.47451, 1) border_width_left = 2 @@ -1928,15 +1935,24 @@ text = "Контроль исправности прибора" horizontal_alignment = 1 vertical_alignment = 1 -[node name="chk_show_functional" type="CheckButton" parent="."] +[node name="frame_button" type="Panel" parent="."] layout_mode = 0 -offset_left = 1029.0 -offset_top = 15.0 -offset_right = 1408.0 -offset_bottom = 49.0 +offset_left = 1040.0 +offset_top = 12.0 +offset_right = 1416.0 +offset_bottom = 52.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_6hcgs") + +[node name="chk_show_functional" type="CheckButton" parent="frame_button"] +layout_mode = 0 +offset_left = 2.0 +offset_top = 3.0 +offset_right = 374.0 +offset_bottom = 37.0 +focus_mode = 0 theme_override_font_sizes/font_size = 22 disabled = true -text = "Показать функциональную схему Э2" +text = "Функциональная схема Э2" flat = true [node name="connect_legend0" type="AnimatedSprite2D" parent="."] @@ -2037,5 +2053,5 @@ texture = ExtResource("22_1s34a") [connection signal="toggled" from="pribor_prd_v_4" to="pribor_prd_v_4" method="_on_toggled"] [connection signal="toggled" from="pribor_prd_n_4" to="pribor_prd_n_4" method="_on_toggled"] [connection signal="toggled" from="pribor_prd_k_4" to="pribor_prd_k_4" method="_on_toggled"] -[connection signal="toggled" from="chk_show_functional" to="." method="_on_chk_show_functional_toggled"] +[connection signal="toggled" from="frame_button/chk_show_functional" to="." method="_on_chk_show_functional_toggled"] [connection signal="pressed" from="control_prd_button" to="." method="_on_control_prd_pressed"] From cb1637e21c7c561925bc07a8167d37ae0d6ba776 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:49:49 +0300 Subject: [PATCH 32/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9E=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD=D0=BE=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=85=D0=B8=20=D0=BE=D1=82=20=D0=A1=D0=A2?= =?UTF-8?q?=D0=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index c9410a2a..bf8770a8 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -652,9 +652,20 @@ func get_krp(threat: threats.Threat): for key in ITERFER_MODE.keys(): var ecm_params = ITERFER_MODE[key][1] if not ecm_params.has('files'): continue - if ecm_params['files'] == threat.rparams['filename']: - krp = key - return krp + if typeof(ecm_params['files']) == TYPE_DICTIONARY: + for value in ecm_params['files'].values(): + if typeof(value) == TYPE_STRING: + if value == threat.rparams['filename']: + krp = key + return krp + elif typeof(value) == TYPE_ARRAY: + if value[0] == threat.rparams['filename']: + krp = key + return krp + elif typeof(ecm_params['files']) == TYPE_STRING: + if ecm_params['files'] == threat.rparams['filename']: + krp = key + return krp return krp From b44b0aafd1ac61a51a12bfb924498e4ab9619de4 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:51:00 +0300 Subject: [PATCH 33/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-ecm-list/scroll-ecm-list.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 8ad0a9fd..7433d7b2 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -127,6 +127,7 @@ func on_interfer_new(ecm, table_index): func on_interfer_off(ecm, table_index): + if not table_index.has(ecm.ispp): return $table.remove_row(table_index[ecm.ispp]) rehash(table_index) var sel_rows: Array From e7076354b447db3a93268f5a9cefb6e8de599e92 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:51:54 +0300 Subject: [PATCH 34/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9F=D1=80=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=BC=D0=BE=D1=89=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=D0=B0=20=D0=BE=D1=82=20?= =?UTF-8?q?=D1=86=D0=B5=D0=BB=D0=B8=20=D0=BE=D1=82=20=D0=A1=D0=A2=D0=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/threats.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/threats.gd b/scripts/threats.gd index 1070cd29..7ad59b32 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -39,6 +39,7 @@ class Threat: func set_from_dic(dic: Dictionary): var items: = fflags.keys().filter(func(vn): return dic.has(vn)) items.any(func(vn): set(vn, dic[vn]); fflags[vn] = true; return false) + if dic.has('pow'): power = dic['pow'] signal threat_new(th: Threat) From 2f4ee7be3ce492abcc194cc3566f168bc2be37c0 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 15:53:02 +0300 Subject: [PATCH 35/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=BC=D0=B0=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D1=81=20?= =?UTF-8?q?=D0=AF=D0=A3-07=D0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс/yems-boards.gd | 2 ++ scripts/yau07.gd | 2 ++ 2 files changed, 4 insertions(+) diff --git a/scenes/эмс/yems-boards.gd b/scenes/эмс/yems-boards.gd index eac8030a..16e8f641 100644 --- a/scenes/эмс/yems-boards.gd +++ b/scenes/эмс/yems-boards.gd @@ -310,10 +310,12 @@ class EmsBoard: return true func set_load_done(): + if unit_ems.cmd_state != unit_ems.CmdState.DONE: return state_board = LOADING unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE) func execute_cmd(): + if unit_ems.cmd_state != unit_ems.CmdState.DONE: return if len(cmd_array): state_board = WRITE var cmd: Array = cmd_array.pop_front() diff --git a/scripts/yau07.gd b/scripts/yau07.gd index ca6e1514..9c932da1 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -73,6 +73,8 @@ class YaU07 extends unit.Unit: rc = Error.OK cmd_tick_tx = tick cmd_retry -= 1 + cmd_num_tx = (cmd_num_rx + 1) % 0xffff + tx_data.encode_u16(2, cmd_num_tx) else: cmd_state = CmdState.FAIL emit_signal('command_fail', self) From cdb884f18d7bd41650abcb99fe55bc2b9f2a32a2 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 9 Dec 2025 16:14:07 +0300 Subject: [PATCH 36/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B0=D0=BC=D0=BA=D0=B8=20=D1=80=D0=B5=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B4=D1=83=D0=B5=D0=BC=D0=BE=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D1=85=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/button-flat/button-flat.tscn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index 607ed5f6..35c9aa87 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -61,8 +61,8 @@ script = ExtResource("1_ui6sg") visible = false z_as_relative = false layout_mode = 2 -border_color = Color(0, 0.549509, 0.921779, 1) -border_width = 5.0 +border_color = Color(0.0941176, 0.0941176, 0.698039, 1) +border_width = 10.0 editor_only = false [node name="back" type="Sprite2D" parent="."] From f34984872ef8e97e09a8f28925662977c334fd5d Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Tue, 9 Dec 2025 19:42:49 +0300 Subject: [PATCH 37/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=20=D0=B1=D0=B0=D1=80=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=A3?= =?UTF-8?q?=D0=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/tabs-switch/tab-switch.tscn | 19 +++----- scenes/контроль/контроль.tscn | 72 +++++++++++++++++++++++------- scenes/работа/работа.gd | 10 ++++- scenes/работа/работа.tscn | 1 - 4 files changed, 71 insertions(+), 31 deletions(-) diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn index 1c958ecf..110a4fdb 100644 --- a/scenes/tabs-switch/tab-switch.tscn +++ b/scenes/tabs-switch/tab-switch.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=3 uid="uid://3slb0i3pvowc"] +[gd_scene load_steps=19 format=3 uid="uid://3slb0i3pvowc"] [ext_resource type="Script" uid="uid://bvo6tcreqyuex" path="res://scenes/tabs-switch/tab-switch.gd" id="1_fg0vd"] [ext_resource type="PackedScene" uid="uid://b276iygic5itk" path="res://scenes/работа/работа.tscn" id="2_u7p16"] @@ -22,16 +22,13 @@ [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o1r22"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nmdfd"] -bg_color = Color(0.061, 100, 0.051, 1) - [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cw2ss"] -bg_color = Color(0.473976, 0.473976, 0.473976, 1) +bg_color = Color(0.47451, 0.47451, 0.47451, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nmdfd"] +bg_color = Color(0, 100, 0, 1) [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_41d34"] -bg_color = Color(0.39, 100, 0.327, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_imu1q"] [node name="panel" type="Panel"] offset_right = 1600.0 @@ -100,12 +97,10 @@ offset_bottom = 27.0 tooltip_text = "Задействовать режим Тренаж" focus_mode = 0 theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1) -theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_colors/font_pressed_color = Color(0, 0, 0, 1) -theme_override_styles/hover_pressed = SubResource("StyleBoxFlat_nmdfd") theme_override_styles/hover = SubResource("StyleBoxFlat_cw2ss") -theme_override_styles/pressed = SubResource("StyleBoxFlat_41d34") -theme_override_styles/normal = SubResource("StyleBoxFlat_imu1q") +theme_override_styles/pressed = SubResource("StyleBoxFlat_nmdfd") +theme_override_styles/normal = SubResource("StyleBoxFlat_41d34") toggle_mode = true text = "Тренаж" script = ExtResource("9_41d34") diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 56f9ec6f..fa22a302 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -122,7 +122,7 @@ func _ready(): signaller.conn(signaller.режим_журнал, on_mode_changed) signaller.conn(signaller.режим_настройки, on_mode_changed) signaller.conn(signaller.режим_эмс, on_mode_changed) - signaller.connect('debag_control_pressed', Callable(self, 'on_control_button_pressed')) + signaller.connect('debag_control_pressed', Callable(self, 'on_debag_button_pressed')) func online_change_arr(_u, conn_node, pribor_meta): @@ -187,8 +187,36 @@ func _on_control_prd_pressed() -> void: for pribor in get_tree().get_nodes_in_group('pribor_buttons'): pribor.state = 0 # NONE signaller.emit_signal('start_contol_device') + # Показываем прогресс бар + $pribor_uf/control_progress.visible = true + $pribor_uf/control_progress.value = 0 + + # Создаем твин для анимации с плавным началом и концом + var tween = create_tween() + tween.tween_property($pribor_uf/control_progress, \"value\", 100, 2.0)\\ + .set_trans(Tween.TRANS_SINE)\\ + .set_ease(Tween.EASE_IN_OUT) + + tween.tween_callback(func(): + $pribor_uf/control_progress.visible = false + $pribor_uf.state = uf_control.serviceability_uf + ) +func on_debag_button_pressed(state: bool) -> void: + ctl_btn_state = state + update_pribor_items_visibility() + + +func update_pribor_items_visibility(): + var pribor_items = get_tree().get_nodes_in_group('pribor_items') + for pribor in pribor_items: + for child_name in ['input_0', 'output_0', 'input_1', 'output_1', 'input_2', 'output_2']: + if pribor.has_node(child_name): + pribor.get_node(child_name).visible = ctl_btn_state + + +#region Управление прогресс барами в контроле func on_update_progress(value_progress: float, pribor_node: Node) -> void: pribor_node.progress_value = value_progress pribor_node.progress_visible = value_progress > 0 @@ -196,6 +224,7 @@ func on_update_progress(value_progress: float, pribor_node: Node) -> void: func on_update_max_value_progress(max_value_progress: int, pribor_node: Node) -> void: pribor_node.progress_max_value = max_value_progress +#endregion func on_control_is_over(pribor_name: String) -> void: @@ -224,19 +253,6 @@ func _on_gui_input(event: InputEvent) -> void: cur_pribor_node = null $frame_button/chk_show_functional.button_pressed = false $frame_button/chk_show_functional.disabled = true - - -func on_control_button_pressed(state: bool) -> void: - ctl_btn_state = state - update_pribor_items_visibility() - - -func update_pribor_items_visibility(): - var pribor_items = get_tree().get_nodes_in_group('pribor_items') - for pribor in pribor_items: - for child_name in ['input_0', 'output_0', 'input_1', 'output_1', 'input_2', 'output_2']: - if pribor.has_node(child_name): - pribor.get_node(child_name).visible = ctl_btn_state " [sub_resource type="SpriteFrames" id="SpriteFrames_foasq"] @@ -265,6 +281,7 @@ border_width_left = 2 border_width_top = 2 border_width_right = 2 border_width_bottom = 2 +border_color = Color(0.6, 0.6, 0.6, 1) [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l5wui"] bg_color = Color(0.47451, 0.47451, 0.47451, 1) @@ -616,6 +633,28 @@ offset_bottom = 311.0 scale = Vector2(0.789429, 0.789429) texture = ExtResource("11_gjf0t") +[node name="control_progress" type="TextureProgressBar" parent="pribor_uf"] +visible = false +offset_left = 9.0 +offset_top = 191.0 +offset_right = 102.0 +offset_bottom = 201.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tooltip_text = " +Текущее: 0.00" +mouse_filter = 0 +max_value = 30.0 +nine_patch_stretch = true +stretch_margin_left = 5 +stretch_margin_top = 5 +stretch_margin_right = 5 +stretch_margin_bottom = 5 +texture_under = ExtResource("9_w6m6a") +texture_progress = ExtResource("10_lbx5w") +tint_under = Color(1, 1, 1, 0.419608) +tint_progress = Color(0.890196, 0.486275, 0.196078, 1) + [node name="pribor_rtr" type="TextureButton" parent="." groups=["pribor_buttons"]] editor_description = "Кнопка для выбора прибора." layout_mode = 0 @@ -1938,9 +1977,9 @@ vertical_alignment = 1 [node name="frame_button" type="Panel" parent="."] layout_mode = 0 offset_left = 1040.0 -offset_top = 12.0 +offset_top = 16.0 offset_right = 1416.0 -offset_bottom = 52.0 +offset_bottom = 56.0 theme_override_styles/panel = SubResource("StyleBoxFlat_6hcgs") [node name="chk_show_functional" type="CheckButton" parent="frame_button"] @@ -1954,6 +1993,7 @@ theme_override_font_sizes/font_size = 22 disabled = true text = "Функциональная схема Э2" flat = true +alignment = 1 [node name="connect_legend0" type="AnimatedSprite2D" parent="."] light_mask = 3 diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 527ed7db..a26110b3 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -149,8 +149,14 @@ func on_settings_changed(): color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2) color_closed *= Color(1.0, 1.0, 1.0, 0.0) color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) - - col_btn_act = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) + var act_value = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) + if act_value is Array and act_value.size() >= 4: + col_btn_act = Color(act_value[0], act_value[1], act_value[2], act_value[3]) + elif act_value is Color: + col_btn_act = act_value + else: + col_btn_act = Color.WHITE # значение по умолчанию + push_warning("Некорректный тип цвета: %s" % str(act_value)) ## Обработчик сигнала изменения списка целей. diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index 368e95d4..c8fd4dff 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -380,7 +380,6 @@ texture_normal = ExtResource("14_ggrwd") [connection signal="drag_continue" from="." to="." method="_on_drag_continue"] [connection signal="toggled" from="btn_view" to="." method="on_button_view_toggled"] [connection signal="toggled" from="chk_auto" to="." method="on_value_changed"] -[connection signal="toggled" from="btn_activate" to="." method="on_btn_activate"] [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] From e2237742b4b3722d5ab07383809e305b95158212 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Tue, 9 Dec 2025 20:10:57 +0300 Subject: [PATCH 38/54] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=87=D0=B8=D1=85=20=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D1=83=D1=80=20=D0=A3=D0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/pribor-prd-k.gd | 2 +- scenes/pribor-prd-n/pribor-prd-n.gd | 2 +- scenes/pribor-prd-v/pribor-prd-v.gd | 2 +- scenes/tabs-switch/tab-switch.tscn | 1 + scenes/контроль/блок-в.tscn | 10 +++++----- scenes/контроль/блок-к.tscn | 18 +++++++++--------- scenes/контроль/контроль.tscn | 1 + scenes/работа/работа.tscn | 2 +- 8 files changed, 20 insertions(+), 18 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 9491754f..0ed27ad8 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -16,7 +16,7 @@ func _ready() -> void: unit_prd_k = prd_k_module.unit_control var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') for temp in power_amplifier: - temp.value1 = -70 + temp.value1 = -100 # Подписываемся на сигналы signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device')) diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index f1de070e..9e16dce8 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -16,7 +16,7 @@ func _ready() -> void: unit_prd_n = prd_n_module.unit_control var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') for temp in power_amplifier: - temp.value1 = -70 + temp.value1 = -100 # Подписываемся на сигналы signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device')) diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 6a170636..7660fcf9 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -16,7 +16,7 @@ func _ready() -> void: unit_prd_v = prd_v_module.unit_control var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') for temp in power_amplifier: - temp.value1 = -70 + temp.value1 = -100 # Подписываемся на сигналы signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_control')) unit_prd_v.connect('control_is_over', Callable(self, 'on_press_device')) diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn index 110a4fdb..618318ed 100644 --- a/scenes/tabs-switch/tab-switch.tscn +++ b/scenes/tabs-switch/tab-switch.tscn @@ -97,6 +97,7 @@ offset_bottom = 27.0 tooltip_text = "Задействовать режим Тренаж" focus_mode = 0 theme_override_colors/font_hover_pressed_color = Color(0, 0, 0, 1) +theme_override_colors/font_color = Color(0, 0, 0, 1) theme_override_colors/font_pressed_color = Color(0, 0, 0, 1) theme_override_styles/hover = SubResource("StyleBoxFlat_cw2ss") theme_override_styles/pressed = SubResource("StyleBoxFlat_nmdfd") diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn index 5275bec3..051eea41 100644 --- a/scenes/контроль/блок-в.tscn +++ b/scenes/контроль/блок-в.tscn @@ -35,7 +35,7 @@ signal pressed(control: PanelContainer) if not is_inside_tree(): return $margin/vbox/grid1/level7.value = v - $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 50 else Color.GOLD if v >= 40 else Color.WHITE + $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 55 else Color.WHITE on_level_changed(v, $margin/vbox/grid1/level7, value1_info) @@ -273,9 +273,9 @@ 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] -min_value1 = -40.0 +min_value1 = -60.0 max_value0 = 1400.0 -max_value1 = 55.0 +max_value1 = 75.0 step0 = 1.0 step1 = 1.0 value_name0 = "P,%" @@ -478,8 +478,8 @@ tooltip_text = " Текущее: 0.00 Диапазон: -40.00…55.00" mouse_filter = 0 -min_value = -40.0 -max_value = 55.0 +min_value = -60.0 +max_value = 75.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 diff --git a/scenes/контроль/блок-к.tscn b/scenes/контроль/блок-к.tscn index 6ffeb644..1bf682fc 100644 --- a/scenes/контроль/блок-к.tscn +++ b/scenes/контроль/блок-к.tscn @@ -35,7 +35,7 @@ signal pressed(control: PanelContainer) if not is_inside_tree(): return $margin/vbox/grid1/level7.value = v - $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 50 else Color.GOLD if v >= 40 else Color.WHITE + $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 55 else Color.WHITE on_level_changed(v, $margin/vbox/grid1/level7, value1_info) @@ -259,10 +259,10 @@ theme_override_styles/panel = SubResource("StyleBoxEmpty_3nd2u") script = SubResource("GDScript_oj3k3") textures = [ExtResource("1_uojqc"), ExtResource("2_a8ar3"), ExtResource("3_xwd13")] value0 = [20.0, 30.0, 40.0, 50.0, 60.0, 70.0] -value1 = -40.0 -min_value1 = -40.0 +value1 = -100.0 +min_value1 = -60.0 max_value0 = 1400.0 -max_value1 = 55.0 +max_value1 = 75.0 step0 = 1.0 step1 = 1.0 value_name0 = "P,%" @@ -365,12 +365,12 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " -Текущее: -40.00 -Диапазон: -40.00…55.00" +Текущее: -100.00 +Диапазон: -60.00…75.00" mouse_filter = 0 -min_value = -40.0 -max_value = 55.0 -value = -40.0 +min_value = -60.0 +max_value = 75.0 +value = -60.0 fill_mode = 3 nine_patch_stretch = true stretch_margin_left = 8 diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index fa22a302..316c3d61 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -635,6 +635,7 @@ texture = ExtResource("11_gjf0t") [node name="control_progress" type="TextureProgressBar" parent="pribor_uf"] visible = false +layout_mode = 0 offset_left = 9.0 offset_top = 191.0 offset_right = 102.0 diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index c8fd4dff..c08c2b77 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -383,8 +383,8 @@ texture_normal = ExtResource("14_ggrwd") [connection signal="toggled" from="btn_activate" to="." method="on_btn_activate_toggled"] [connection signal="toggled" from="btn_center" to="." method="on_btn_center_toggled"] [connection signal="button_down" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_down"] -[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_plus_button_up"] +[connection signal="button_up" from="zoom_plus" to="tilemap" method="_on_zoom_button_up"] [connection signal="button_down" from="zoom_minus" to="tilemap" method="_on_zoom_minus_button_down"] [connection signal="button_up" from="zoom_minus" to="tilemap" method="_on_zoom_button_up"] [connection signal="pressed" from="btn_all_work" to="." method="_on_btn_all_work_pressed"] From 3073d49715449ec7105ee20225ff9f7a280053cd Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Tue, 9 Dec 2025 20:29:35 +0300 Subject: [PATCH 39/54] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=AF=D0=A3-07=D0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/контроль.tscn | 2 +- scripts/pribor-prd.gd | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 316c3d61..5f2c8459 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -307,7 +307,7 @@ grow_vertical = 2 script = SubResource("GDScript_iqgf5") metadata/_edit_lock_ = true metadata/_edit_vertical_guides_ = [21.0, 1578.0] -metadata/_edit_horizontal_guides_ = [200.0, 51.0] +metadata/_edit_horizontal_guides_ = [200.0, 51.0, 952.0, 1128.0] [node name="capsrpb" type="TextureRect" parent="." groups=["pribor_pics"]] editor_description = "Кнопка для отображения внешних соединений." diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index e95e9494..4a22200e 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -289,6 +289,8 @@ func _process(_delta: float) -> void: ## Обработка данных от ЯУ-07 func on_data_received(unit_pribor: Object) -> void: var status: PackedByteArray = unit_pribor.status + if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return + temperature_um = check_temperature_um(status) flags.temperature_ok = check_overheating(temperature_um) block_ip_config = check_block_ip(status, block_ip_config) From c8e67775a0135043f31aabc3d850a0248bf31bae Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Tue, 9 Dec 2025 21:40:08 +0300 Subject: [PATCH 40/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=BA=D0=BD?= =?UTF-8?q?=D0=BE=D0=BF=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/настройки/настройки.gd | 19 +++++++++++++++---- scenes/работа/работа.gd | 11 ++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 8b6d2eb3..5bd06710 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -78,7 +78,8 @@ const GOS_BTN = 52 ## Разрешить работу по своим ц const COLOR_BTN_ACT = 54 ## Цвет кнопки "Подавление" -var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки +var name_to_line_index: = {} ## Для преобразования названия параметра в номер строки +var table_color_instance: Node ## Нода цвета кнопки подавления func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row) @@ -86,8 +87,8 @@ func on_checkbutton_pressed(i_row: int): on_row_pressed(i_row) ## Вызывается, когда узел впервые попадает в дерево сцены. func _ready() -> void: setting_tab() - if not OS.get_cmdline_args().has('++ограниченный'): - return + table_color_instance = TableColorPick.instantiate() + if not OS.get_cmdline_args().has('++ограниченный'): return $Label2.text = 'Текущий режим доступа: ограниченный' for node in $GridContainer.get_children().filter(func(b): return b is Button): node.disabled = true @@ -218,6 +219,11 @@ func setting_tab(): var psk = 'application/config/%s' % param_name if ProjectSettings.has_setting(psk): var unit_data = ProjectSettings.get_setting(psk) + if 'Цвет кнопки \"Подавление\"' in psk: + if not unit_data is Array: return + if unit_data.size() < 4: return + var color_btn_act = $scroll_set/table.get_node2(1, COLOR_BTN_ACT) + color_btn_act.color = Color(unit_data[0], unit_data[1], unit_data[2], unit_data[3]) if is_instance_of(unit_data, TYPE_STRING): profile.text = unit_data button_settings() @@ -247,8 +253,9 @@ func button_settings(): func on_color_closed(color_btn_act: ColorPickerButton): - var col = [color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, 1.0] + var col: Color = Color(color_btn_act.color.r, color_btn_act.color.g, color_btn_act.color.b, 1.0) ProjectSettings.set_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', col) + table_color_instance.color = col func _on_btn_save_settings_pressed(): @@ -284,6 +291,10 @@ func _on_btn_save_settings_pressed(): else: var row = $scroll_set/table.get_row(i) json_data[parameter] = row[1].text + if parameter == 'Цвет кнопки \"Подавление\"': + var col = table_color_instance.color + json_data[parameter] = [col.r, col.g, col.b, col.a] + for key in json_data: ProjectSettings.set_setting('application/config/%s' % key, json_data[key]) var settings_file: = settings.get_settings_file_path() diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index a26110b3..ac977358 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -149,14 +149,11 @@ func on_settings_changed(): color_emit_sel *= Color(1.0, 1.0, 1.0, 0.2) color_closed *= Color(1.0, 1.0, 1.0, 0.0) color_closed_emit *= Color(1.0, 1.0, 1.0, 1.0) - var act_value = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) - if act_value is Array and act_value.size() >= 4: - col_btn_act = Color(act_value[0], act_value[1], act_value[2], act_value[3]) - elif act_value is Color: - col_btn_act = act_value + var act_btn_color = ProjectSettings.get_setting('application/config/%s' % 'Цвет кнопки \"Подавление\"', Color.WHITE) + if act_btn_color is Array: + col_btn_act = Color(act_btn_color[0], act_btn_color[1], act_btn_color[2], act_btn_color[3]) if act_btn_color.size() >= 4 else Color.WHITE else: - col_btn_act = Color.WHITE # значение по умолчанию - push_warning("Некорректный тип цвета: %s" % str(act_value)) + col_btn_act = act_btn_color ## Обработчик сигнала изменения списка целей. From 788a62505f89d0428844b37e9c0b5503051ebe04 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 10 Dec 2025 10:28:20 +0300 Subject: [PATCH 41/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-ecm-list/scroll-ecm-list.gd | 2 +- scenes/контроль/кнопка-прибора.gd | 15 +++++++-------- scripts/unit.gd | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 8ad0a9fd..498f0311 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -37,7 +37,7 @@ const INTERFER_NAMES = { 'k1': 'K1', 'svm2': 'СВ-М2', 'ozp1': 'ОЗП-1', - 'eprls': 'ЕПРЛС',} + 'eprls': 'ЕПРЛС' } ## Индексы колонок diff --git a/scenes/контроль/кнопка-прибора.gd b/scenes/контроль/кнопка-прибора.gd index 157514db..eb17a3a9 100644 --- a/scenes/контроль/кнопка-прибора.gd +++ b/scenes/контроль/кнопка-прибора.gd @@ -8,12 +8,12 @@ extends TextureButton func _ready(): toggle_mode = true focus_mode = Control.FOCUS_ALL - connect("focus_entered", _on_focus_entered) - connect("focus_exited", _on_focus_exited) + connect('focus_entered', _on_focus_entered) + connect('focus_exited', _on_focus_exited) func _enter_tree() -> void: - if has_node("label"): + if is_inside_tree(): $label.self_modulate = state_colors[state] @@ -21,11 +21,11 @@ func update_progress_bar(target_value) -> void: if tween: tween.kill() tween = create_tween() - tween.tween_property($control_progress, "value", target_value, 0.3) + tween.tween_property($control_progress, 'value', target_value, 0.3) func _on_toggled(toggled_on): - if has_node("frame"): + if has_node('frame'): $frame.visible = toggled_on @@ -40,7 +40,7 @@ func _on_focus_exited(): func enter_press(): var enter_event = InputEventAction.new() - enter_event.action = "ui_accept" + enter_event.action = 'ui_accept' enter_event.pressed = true Input.parse_input_event(enter_event) @@ -49,14 +49,13 @@ func enter_press(): set(v): v = 0 if v < 0 else v % state_colors.size() state = v - if is_inside_tree() and has_node("label"): + if is_inside_tree(): $label.self_modulate = state_colors[v] @export var progress_value: float = 0.0: set(v): progress_value = v - if is_inside_tree(): update_progress_bar(v) var max_val = $control_progress.get('max_value') diff --git a/scripts/unit.gd b/scripts/unit.gd index db8e8b33..bffe7961 100644 --- a/scripts/unit.gd +++ b/scripts/unit.gd @@ -9,7 +9,7 @@ class Unit extends Object: SEND, ## Буфер готов для отправки. WAIT, ## Ожидание выполнения. DONE, ## Команда выполнена. - FAIL, ## Команда не выполнена. + FAIL ## Команда не выполнена. } signal line_changed(unit) ## Вызывается при изменении состояния связи @@ -18,7 +18,7 @@ class Unit extends Object: signal parse_failed(unit) ## Вызывается при обнаружении ошибки во входных данных signal data_received(data) ## Вызывается по приёму данных - var cmd_state = CmdState.UNCK ## Состояние выполнения команды + var cmd_state: = CmdState.UNCK ## Состояние выполнения команды var tx_data: = PackedByteArray() ## Буфер для отправки. var tx_len: int = 0 ## Длина последнего отправленного пакета. var tx_tick: int = 0 ## Тик-время отправки буфера From 9a8763a9d762b2b305d0b11b41545b7a10ca2d05 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 10 Dec 2025 10:29:24 +0300 Subject: [PATCH 42/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=92=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=20=D0=BE=D1=82=D1=81=D1=83=D1=82?= =?UTF-8?q?=D1=81=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=BC=D1=83=20=D1=8D=D0=BB?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/frame-ecm-list/scroll-ecm-list.gd | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 498f0311..47506b7a 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -127,7 +127,10 @@ func on_interfer_new(ecm, table_index): func on_interfer_off(ecm, table_index): - $table.remove_row(table_index[ecm.ispp]) + if not table_index.has(ecm.ispp): + return + var i_row = table_index[ecm.ispp] + $table.remove_row(i_row) rehash(table_index) var sel_rows: Array $table.get_selected_rows(sel_rows) From 94f5159ad9105fd77139aaf91147410e5f04d43b Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 10 Dec 2025 10:32:32 +0300 Subject: [PATCH 43/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0.=20=D0=92=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B5=D0=B5.=20=D0=9F=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=B2=D1=85=D0=BE=D0=B4=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85.=20=D0=97=D0=B4=D0=B5?= =?UTF-8?q?=D1=81=D1=8C=20=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс/yems-boards.gd | 3 --- 1 file changed, 3 deletions(-) diff --git a/scenes/эмс/yems-boards.gd b/scenes/эмс/yems-boards.gd index eac8030a..3c090549 100644 --- a/scenes/эмс/yems-boards.gd +++ b/scenes/эмс/yems-boards.gd @@ -54,9 +54,6 @@ class EmsBoard: ## Устанавливает состояние входов и выходов платы func set_status(status: PackedByteArray): - if not status.size(): - push_error('status.size():%d' % status.size()) - return var offset = 0 if id_board < 3: offset = yemsconsts.STATUS_OFFSET[id_board] From c9304134ca4f60543d77538de4a9a519a5a46a7d Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 10 Dec 2025 13:15:47 +0300 Subject: [PATCH 44/54] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D1=81=D0=B2?= =?UTF-8?q?=D0=BE=D0=B5=D0=B9=20=D1=86=D0=B5=D0=BB=D0=B8=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B5=D0=BB=D0=B5=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 -- scenes/работа/работа.gd | 5 ++++- scripts/threats.gd | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/project.godot b/project.godot index 922bfd47..4e4c6857 100644 --- a/project.godot +++ b/project.godot @@ -206,8 +206,6 @@ common/enable_object_picking=false [rendering] -renderer/rendering_method="gl_compatibility" -renderer/rendering_method.mobile="gl_compatibility" shader_compiler/shader_cache/strip_debug=true quality/driver/fallback_to_gles2=true diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index ac977358..85153223 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -305,7 +305,10 @@ func map_threat_to_bip(th: threats.Threat, bip: Control) -> bool: func on_threat_update(th: threats.Threat): var bip = get_node('%d' % th.id) bip.update(th.tick_rx) - bip.set_bip_color(Color.CORAL if th.proto else Color.WHITE) + if th.gos: + bip.set_bip_color(Color.GREEN) + else: + bip.set_bip_color(Color.CORAL if th.proto else Color.WHITE) bip.visible = map_threat_to_bip(th, bip) diff --git a/scripts/threats.gd b/scripts/threats.gd index 7ad59b32..f7744505 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -2,6 +2,8 @@ extends Node ## Работа с целями. +var gos_flag = true ## Флаг работать по своим целям +var gos_protocols: PackedStringArray ## Список протоколов своих целей ## Цель class Threat: @@ -31,6 +33,7 @@ class Threat: var emit_state: int = 0 ## 0 - подавление не назначено, 1 - назначено, 2 - выполняется var nmfs: int ## Индекс модуля ФС, в зону действия которого попала цель var priority: int ## Приоритет опасности цели + var gos: bool = false ## Своя или чужая цель func _init(): clear_fflags() func _to_string() -> String: return 'номер: %d пеленг: %0.1f частота: %0.1f МГц' % [id, aoa, freq] @@ -69,6 +72,8 @@ func _ready() -> void: signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats)) signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats)) signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats)) + + ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats)) ## Периодически удаляет устаревшие цели. @@ -148,12 +153,31 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, threats: Dictionary): th.priority = 1 else: th.priority = 0 + set_gos(th) call_deferred('emit_signal', 'threat_update', th) + else: var th: = Threat.new() th.set_from_dic(dic_th) threats[id] = th th.tick_rx = unit.tick + set_gos(th) call_deferred('emit_signal', 'threat_new', th) if sz != threats.size(): call_deferred('emit_signal', 'threats_resized', threats) + + +func on_settings_changed(ths): + gos_flag = ProjectSettings.get_setting('application/config/Включить работу по своим целям', true) + var protocols: String = ProjectSettings.get_setting('application/config/Список своих протоколов', '') + gos_protocols = protocols.split(",", true) + for th in ths.values(): + set_gos(th) + + + +func set_gos(th: Threat): + if gos_flag: + th.gos = false + elif (th.proto in gos_protocols) and th.fflags.proto: + th.gos = true From 304a8c6453d6478a13c2c988e916cc15a10e9c93 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 11 Dec 2025 11:14:38 +0300 Subject: [PATCH 45/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/элемент-я.gd | 4 ++-- scripts/interfer.gd | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scenes/контроль/элемент-я.gd b/scenes/контроль/элемент-я.gd index fd6a9442..bd73ac97 100644 --- a/scenes/контроль/элемент-я.gd +++ b/scenes/контроль/элемент-я.gd @@ -54,7 +54,7 @@ func _on_resized() -> void: func _enter_tree() -> void: if Engine.is_editor_hint(): return - var unit_any = network.get_unit_instance(unit_name) + 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 @@ -65,6 +65,6 @@ func _enter_tree() -> void: func _exit_tree() -> void: if Engine.is_editor_hint(): return - var unit_any = network.get_unit_instance(unit_name) + 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/scripts/interfer.gd b/scripts/interfer.gd index 985e71e9..1514d6a7 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -273,7 +273,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v gos_nmfs.clear() for thr in threats.values(): var fs_arr: Array = [] - var th_aoa = fposmod(thr.aoa - course, 360) + var th_aoa: = fposmod(thr.aoa - course, 360) prd.find_fs_index(th_aoa, thr.freq, fs_arr) if fs_arr.size(): for item in fs_arr: From 4057da3b750e4708240826e102ddcd5b10b49317 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 11 Dec 2025 11:22:56 +0300 Subject: [PATCH 46/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/pribor-prd-k.gd | 14 +++++++------- scenes/pribor-prd-n/pribor-prd-n.gd | 14 +++++++------- scenes/pribor-uf/pribor-uf.gd | 8 ++++---- scenes/tabs-switch/тренаж_режим.gd | 6 +++--- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 04da31fb..ce2a22d0 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -196,16 +196,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void: func find_labels(node1: Node): if node1 is Label: - if node1.name in ["lbl_rname", "rname"]: - if not node1.has_meta("tooltip_set"): + if node1.name in ['lbl_rname', 'rname']: + if not node1.has_meta('tooltip_set'): ctrl_pos += 1 var box_number = ceili(float(ctrl_pos) / 10.0) var position_number = ctrl_pos % 10 if position_number == 0: position_number = 10 - node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number] + node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number] node1.mouse_filter = Control.MOUSE_FILTER_STOP - node1.set_meta("tooltip_set", true) + node1.set_meta('tooltip_set', true) for child in node1.get_children(): find_labels(child) @@ -217,12 +217,12 @@ func _on_status_updated(status_text: String) -> void: func _update_status_text(text: String) -> void: $control_result.text = text # Можно добавить смену цвета в зависимости от статуса - if "Ошибка" in text or "неисправен" in text: + if 'Ошибка' in text or 'неисправен' in text: $control_result.add_theme_color_override('font_color', Color.RED) log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_k.self_name]) - elif "Ограничена" in text or "Предупреждение" in text: + elif 'Ограничена' in text or 'Предупреждение' in text: $control_result.add_theme_color_override('font_color', Color.YELLOW) - elif "исправен" in text or "завершён" in text: + elif 'исправен' in text or 'завершён' in text: $control_result.add_theme_color_override('font_color', Color.GREEN) log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_k.self_name]) else: diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 8b16452a..5aac3593 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -182,16 +182,16 @@ static func on_control_result(for_result_dic: Dictionary) -> void: func find_labels(node1: Node): if node1 is Label: - if node1.name in ["lbl_rname", "rname"]: - if not node1.has_meta("tooltip_set"): + if node1.name in ['lbl_rname', 'rname']: + if not node1.has_meta('tooltip_set'): ctrl_pos += 1 var box_number = ceili(float(ctrl_pos) / 10.0) var position_number = ctrl_pos % 10 if position_number == 0: position_number = 10 - node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number] + node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number] node1.mouse_filter = Control.MOUSE_FILTER_STOP - node1.set_meta("tooltip_set", true) + node1.set_meta('tooltip_set', true) for child in node1.get_children(): find_labels(child) @@ -203,12 +203,12 @@ func _on_status_updated(status_text: String) -> void: func _update_status_text(text: String) -> void: $control_result.text = text # Можно добавить смену цвета в зависимости от статуса - if "Ошибка" in text or "неисправен" in text: + if 'Ошибка' in text or 'неисправен' in text: $control_result.add_theme_color_override('font_color', Color.RED) log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_n.self_name]) - elif "Ограничена" in text or "Предупреждение" in text: + elif 'Ограничена' in text or 'Предупреждение' in text: $control_result.add_theme_color_override('font_color', Color.YELLOW) - elif "исправен" in text or "завершён" in text: + elif 'исправен' in text or 'завершён' in text: $control_result.add_theme_color_override('font_color', Color.GREEN) log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_n.self_name]) else: diff --git a/scenes/pribor-uf/pribor-uf.gd b/scenes/pribor-uf/pribor-uf.gd index acd59501..b045864f 100644 --- a/scenes/pribor-uf/pribor-uf.gd +++ b/scenes/pribor-uf/pribor-uf.gd @@ -112,15 +112,15 @@ func status_uf() -> void: func find_labels(node1: Node): if node1 is Label: - if node1.name in ["lbl_rname", "rname"]: - if not node1.has_meta("tooltip_set"): + if node1.name in ['lbl_rname', 'rname']: + if not node1.has_meta('tooltip_set'): ctrl_pos += 1 var box_number = ceili(float(ctrl_pos) / 10.0) var position_number = ctrl_pos % 10 if position_number == 0: position_number = 10 - node1.tooltip_text = "Ящик - %d, Позиция - %d" % [box_number, position_number] + node1.tooltip_text = 'Ящик - %d, Позиция - %d' % [box_number, position_number] node1.mouse_filter = Control.MOUSE_FILTER_STOP - node1.set_meta("tooltip_set", true) + node1.set_meta('tooltip_set', true) for child in node1.get_children(): find_labels(child) diff --git a/scenes/tabs-switch/тренаж_режим.gd b/scenes/tabs-switch/тренаж_режим.gd index ab278048..cbcd599e 100644 --- a/scenes/tabs-switch/тренаж_режим.gd +++ b/scenes/tabs-switch/тренаж_режим.gd @@ -1,11 +1,11 @@ extends Button func _ready(): - connect("toggled", Callable(self, "_on_button_toggled")) + connect('toggled', Callable(self, '_on_button_toggled')) func _on_button_toggled(mode: bool): if mode: - tooltip_text = "Режим \"Тренаж\" задействован\nТекущее состояние: включено" + tooltip_text = 'Режим \"Тренаж\" задействован\nТекущее состояние: включено' else: - tooltip_text = "Задейстовать режим \"Тренаж\"\nТекущее состояние: отключено" + tooltip_text = 'Задейстовать режим \"Тренаж\"\nТекущее состояние: отключено' From 36811852fc5602044822422556732bee8bcf0cca Mon Sep 17 00:00:00 2001 From: sasha80 Date: Thu, 11 Dec 2025 13:39:30 +0300 Subject: [PATCH 47/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20ERROR:=20Unable=20to=20open?= =?UTF-8?q?=20file:=20res://.godot/imported/=D0=9E=D0=BA=D0=BD=D0=BE=20?= =?UTF-8?q?=D1=87=D0=B0=D1=81=D1=82=D0=BE=D1=820.png-6b01791c971bddb01337c?= =?UTF-8?q?af9077bf060.ctex.=20=20=20=20at:=20=5Fload=5Fdata=20(scene/reso?= =?UTF-8?q?urces/compressed=5Ftexture.cpp:41)=20ERROR:=20Unable=20to=20ope?= =?UTF-8?q?n=20file:=20res://.godot/imported/=D0=A1=D0=BA=D1=80=D1=83?= =?UTF-8?q?=D0=B3=D0=BB=D1=91=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=B2=D0=B0?= =?UTF-8?q?=D0=B4=D1=80=D0=B0=D1=82=20=D1=81=D0=B5=D1=80=D1=8B=D0=B9.png-4?= =?UTF-8?q?655829309cca3b1dec2c9ae01376d54.ctex.=20=20=20=20at:=20=5Fload?= =?UTF-8?q?=5Fdata=20(scene/resources/compressed=5Ftexture.cpp:41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/Окно частот0.png.import | 2 +- data/Скруглённый квадрат серый.png.import | 2 +- scenes/эмс2/эмс-тг.tscn | 6 ++---- scenes/эмс2/эмс2.tscn | 17 +++++++---------- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/data/Окно частот0.png.import b/data/Окно частот0.png.import index 3b53336a..a345503a 100644 --- a/data/Окно частот0.png.import +++ b/data/Окно частот0.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://b1dw06ahtftq2" +uid="uid://csxruavk0s40l" path="res://.godot/imported/Окно частот0.png-79ada2e7504614b9bdf58bce1aff61fb.ctex" metadata={ "vram_texture": false diff --git a/data/Скруглённый квадрат серый.png.import b/data/Скруглённый квадрат серый.png.import index c348d23a..9d16be2e 100644 --- a/data/Скруглённый квадрат серый.png.import +++ b/data/Скруглённый квадрат серый.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bymxiptkbufvs" +uid="uid://fuhhvsa5um4m" path="res://.godot/imported/Скруглённый квадрат серый.png-2111d7338e52a03a41f05d6ffbbc3eb6.ctex" metadata={ "vram_texture": false diff --git a/scenes/эмс2/эмс-тг.tscn b/scenes/эмс2/эмс-тг.tscn index 4a39180c..726dbaae 100644 --- a/scenes/эмс2/эмс-тг.tscn +++ b/scenes/эмс2/эмс-тг.tscn @@ -6,15 +6,13 @@ [ext_resource type="Texture2D" uid="uid://cckk3jk5r32bh" path="res://data/ГО.png" id="5_qxr47"] [ext_resource type="Texture2D" uid="uid://kyrnn1mqpc08" path="res://data/РЛС1.png" id="6_8sxps"] [ext_resource type="Texture2D" uid="uid://cx0f3wcx76u1k" path="res://data/РЛС2.png" id="7_0bfmy"] +[ext_resource type="Texture2D" uid="uid://csxruavk0s40l" path="res://data/Окно частот0.png" id="8_4em3i"] [ext_resource type="Texture2D" uid="uid://duu8q7sv0jwfh" path="res://data/ННВС.png" id="8_aiy4x"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] -load_path = "res://.godot/imported/Окно частот0.png-6b01791c971bddb01337caf9077bf060.ctex" [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_pd85g"] -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_4em3i"] - [node name="Control" type="Panel"] [node name="Sprite2D" type="Sprite2D" parent="."] @@ -96,4 +94,4 @@ texture = SubResource("CompressedTexture2D_pd85g") [node name="ТаблицаЧастот" type="Sprite2D" parent="."] position = Vector2(808.166, 537.125) scale = Vector2(0.956689, 0.95669) -texture = SubResource("CompressedTexture2D_4em3i") +texture = ExtResource("8_4em3i") diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 90bde52a..957f7b92 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -23,6 +23,7 @@ [ext_resource type="Texture2D" uid="uid://b1kuhj03yigih" path="res://data/Квадрат салатный 454.png" id="23_h11e0"] [ext_resource type="Texture2D" uid="uid://d3v1r4r62na8" path="res://data/Квадрат салатный ОР-63.png" id="24_2pcsf"] [ext_resource type="Texture2D" uid="uid://ddm55bo28sxcs" path="res://data/Квадрат салатный РЛС1.png" id="25_wmu4u"] +[ext_resource type="Texture2D" uid="uid://fuhhvsa5um4m" path="res://data/Скруглённый квадрат серый.png" id="26_2spgl"] [ext_resource type="Texture2D" uid="uid://dneqjcul4ipub" path="res://data/Квадрат салатный РЛС2.png" id="26_w5eif"] [ext_resource type="Texture2D" uid="uid://cyb60nh23ys6k" path="res://data/Квадрат салатный ГО.png" id="27_2ft3r"] [ext_resource type="Texture2D" uid="uid://cw8sd7v5f31ww" path="res://data/Квадрат салатный с трубкой.png" id="28_rra4y"] @@ -34,10 +35,6 @@ [ext_resource type="Texture2D" uid="uid://3siondd3feev" path="res://data/Скруглённый прямоугольник белый.png" id="33_5ifkb"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] -load_path = "res://.godot/imported/Окно частот0.png-6b01791c971bddb01337caf9077bf060.ctex" - -[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_l3ueu"] -load_path = "res://.godot/imported/Скруглённый квадрат серый.png-4655829309cca3b1dec2c9ae01376d54.ctex" [node name="Panel" type="Panel"] script = ExtResource("1_l3ueu") @@ -262,7 +259,7 @@ texture = ExtResource("28_rra4y") [node name="СкруглённыйКвадрат" type="Sprite2D" parent="."] position = Vector2(1299, 873) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="СкруглённыйКвадратБелый" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(0, 49) @@ -386,23 +383,23 @@ texture = ExtResource("15_2spgl") [node name="СкруглённыйКвадратСерый2" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(49, 49) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="СкруглённыйКвадратСерый3" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(98, 98) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="СкруглённыйКвадратСерый4" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(147, 147) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="СкруглённыйКвадратСерый5" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(245, 245) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="СкруглённыйКвадратСерый6" type="Sprite2D" parent="СкруглённыйКвадрат"] position = Vector2(196, 196) -texture = SubResource("CompressedTexture2D_l3ueu") +texture = ExtResource("26_2spgl") [node name="Label" type="Label" parent="."] layout_mode = 0 From f2034a0edd9fee9da2c1f5c400d0b3d41c83a0f2 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 15 Dec 2025 14:00:02 +0300 Subject: [PATCH 48/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=98=D0=BC=D1=8F=20power=20?= =?UTF-8?q?=D0=B2=20threats=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=B0=20pow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/threats.gd | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/threats.gd b/scripts/threats.gd index f7744505..407ef74b 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -17,7 +17,7 @@ class Threat: var id: int ## Идентификатор цели. var lat: float ## Текущие координаты, широта в градусах. var lon: float ## Текущие координаты, долгота в градусах. - var power: float ## Уровень принимаемого сигнала, дБм. + var pow: float ## Уровень принимаемого сигнала, дБм. var proto: String ## Тип протокола источника сигнала. var rkrp: String ## Рекомендуемый режим помехи. var rparams: Dictionary ## Рекомендуемые параметры помехи. @@ -42,7 +42,6 @@ class Threat: func set_from_dic(dic: Dictionary): var items: = fflags.keys().filter(func(vn): return dic.has(vn)) items.any(func(vn): set(vn, dic[vn]); fflags[vn] = true; return false) - if dic.has('pow'): power = dic['pow'] signal threat_new(th: Threat) @@ -72,7 +71,7 @@ func _ready() -> void: signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats)) signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats)) signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats)) - + ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats)) From bbd3f9aa7f29215c313c767ddb5bcc0060981fa8 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 15 Dec 2025 14:00:24 +0300 Subject: [PATCH 49/54] =?UTF-8?q?Godot4.=20=D0=90=D0=B2=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=20=D1=83=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D1=8B=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 1 - scenes/контроль/контроль.tscn | 4 ++-- scenes/эмс2/эмс2.tscn | 4 +--- scripts/interfer.gd | 2 +- scripts/pribor-prd.gd | 2 +- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/project.godot b/project.godot index 4e4c6857..dc2a071e 100644 --- a/project.godot +++ b/project.godot @@ -74,7 +74,6 @@ gdscript/warnings/unassigned_variable_op_assign=2 gdscript/warnings/unused_signal=0 gdscript/warnings/shadowed_variable=2 gdscript/warnings/shadowed_variable_base_class=2 -gdscript/warnings/shadowed_global_identifier=2 gdscript/warnings/unsafe_cast=1 gdscript/warnings/assert_always_true=2 gdscript/warnings/assert_always_false=2 diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 5f2c8459..ac8b04bf 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -12,7 +12,7 @@ [ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="7_6j01w"] [ext_resource type="Texture2D" uid="uid://u3tnejvpm8it" path="res://data/disconnect-a.png" id="8_gs2be"] [ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="8_isjua"] -[ext_resource type="Shader" uid="uid://83fx15q1xlid" path="res://shaders/two-color.gdshader" id="9_71ec4"] +[ext_resource type="Shader" path="res://shaders/two-color.gdshader" id="9_71ec4"] [ext_resource type="Texture2D" uid="uid://b4isaggma6q3" path="res://data/Грани22.png" id="9_iqgf5"] [ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="9_ll0vs"] [ext_resource type="Texture2D" uid="uid://bktiige0i2lhl" path="res://data/У-РЭП-РПД-Н.png" id="9_qe1go"] @@ -23,7 +23,7 @@ [ext_resource type="Texture2D" uid="uid://vdhmga62vjsj" path="res://data/АФСП-РТР.png" id="13_32yvq"] [ext_resource type="Texture2D" uid="uid://dm350ta8noa0v" path="res://data/У-РЭП-РПД-К.png" id="16_32yvq"] [ext_resource type="Texture2D" uid="uid://c3cyog3gy24ft" path="res://data/У-ЭП.png" id="16_gjf0t"] -[ext_resource type="Script" uid="uid://xjs7owe2iexn" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"] +[ext_resource type="Script" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"] [ext_resource type="Texture2D" uid="uid://b2vf7en1jj8dv" path="res://data/У-РЭП-РПД-В.png" id="20_l5wui"] [ext_resource type="Texture2D" uid="uid://cllxcfa130vqu" path="res://data/УА-РЭП.png" id="22_1s34a"] diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index b8e71422..7581536a 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=35 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] -[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс_тг.gd" id="1_l3ueu"] +[ext_resource type="Script" path="res://scenes/эмс2/эмс_тг.gd" id="1_l3ueu"] [ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_8gk36"] [ext_resource type="Texture2D" uid="uid://coxhivvc6uibs" path="res://data/Состояние РЭС 40.png" id="4_b3mus"] [ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_nqi0i"] @@ -34,10 +34,8 @@ [ext_resource type="Texture2D" uid="uid://3siondd3feev" path="res://data/Скруглённый прямоугольник белый.png" id="33_5ifkb"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] -load_path = "res://.godot/imported/Окно частот0.png-6b01791c971bddb01337caf9077bf060.ctex" [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_l3ueu"] -load_path = "res://.godot/imported/Скруглённый квадрат серый.png-4655829309cca3b1dec2c9ae01376d54.ctex" [node name="Panel" type="Panel"] script = ExtResource("1_l3ueu") diff --git a/scripts/interfer.gd b/scripts/interfer.gd index bf8770a8..7dc0e726 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -654,7 +654,7 @@ func get_krp(threat: threats.Threat): if not ecm_params.has('files'): continue if typeof(ecm_params['files']) == TYPE_DICTIONARY: for value in ecm_params['files'].values(): - if typeof(value) == TYPE_STRING: + if typeof(value) == TYPE_STRING: if value == threat.rparams['filename']: krp = key return krp diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 4a22200e..bc86e8ab 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -290,7 +290,7 @@ func _process(_delta: float) -> void: func on_data_received(unit_pribor: Object) -> void: var status: PackedByteArray = unit_pribor.status if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return - + temperature_um = check_temperature_um(status) flags.temperature_ok = check_overheating(temperature_um) block_ip_config = check_block_ip(status, block_ip_config) From a8e7a1c6aad4af84823dfbbd878b88b7be161a22 Mon Sep 17 00:00:00 2001 From: Maxim Date: Mon, 15 Dec 2025 14:09:00 +0300 Subject: [PATCH 50/54] =?UTF-8?q?WIP=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=A0=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B2=D0=BE=20=D0=B2=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-uf/uf-ctl.gd | 10 +++++----- scenes/tabs-switch/lbl_ready.gd | 6 ++---- scenes/работа/работа.gd | 2 +- scripts/interfer.gd | 2 +- scripts/pribor-prd.gd | 14 +++++++------- scripts/threats.gd | 2 +- 6 files changed, 17 insertions(+), 19 deletions(-) diff --git a/scenes/pribor-uf/uf-ctl.gd b/scenes/pribor-uf/uf-ctl.gd index c9c48e64..c44a0d97 100644 --- a/scenes/pribor-uf/uf-ctl.gd +++ b/scenes/pribor-uf/uf-ctl.gd @@ -37,16 +37,16 @@ func on_data_received(yau: Object) -> void: '''Обработка полученных данных от УФ''' var new_ems_status = control_ems(yau.status) var status_changed = false - + # Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн' for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']: var old_value = uf_status.get(key, false) var new_value = new_ems_status.get(key, false) - + if old_value != new_value: uf_status[key] = new_value status_changed = true - + if status_changed: update_serviceability() #endregion @@ -64,7 +64,7 @@ func is_operational() -> bool: func update_serviceability() -> void: '''Обновление общего статуса сервисабельности''' var new_serviceability: int = STATE_VAL.GOOD - + # Проверяем онлайн-статус if uf_status.get('УФ-онлайн', false) == false: new_serviceability = STATE_VAL.NONE @@ -84,7 +84,7 @@ static func control_ems(status: Array) -> Dictionary: var status_dic: Dictionary = {} if status.is_empty() or status.size() < 3: return status_dic - + status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1) status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1) status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1) diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index 00eadda9..e924e135 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -31,7 +31,6 @@ class DeviceObserver: func update_control_results(results: Dictionary) -> bool: var changed := false - last_results = results.duplicate() if results.get('is_over_control', false): # Контроль завершен - проверяем все результаты @@ -162,8 +161,7 @@ func _recalculate_overall_state() -> void: func _update_display() -> void: - var config: Dictionary = STATUS_CONFIG[overall_prd_state].duplicate() - + var config: Dictionary text = config.text modulate = config.color add_theme_color_override("font_color", config.font_color) @@ -258,7 +256,7 @@ func get_device_status(device_name: String) -> Dictionary: "online": observer.status[DEVICE_STATUS.ONLINE], "operational": observer.status[DEVICE_STATUS.STATUS], "control_complete": observer.status[DEVICE_STATUS.CONTROL], - "last_results": observer.last_results.duplicate(), + "last_results": observer.last_results, "status_uf": status_uf } return {} diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 85153223..e4efed09 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -560,7 +560,7 @@ func set_fs_color(ecms): func update_fs_colors(): - var fs_colors = $canvas.fs_default_colors.duplicate() + var fs_colors = $canvas.fs_default_colors for key in fs_active.keys(): fs_colors[key] = color_ecm for key in fs_emit.keys(): diff --git a/scripts/interfer.gd b/scripts/interfer.gd index bf8770a8..7dc0e726 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -654,7 +654,7 @@ func get_krp(threat: threats.Threat): if not ecm_params.has('files'): continue if typeof(ecm_params['files']) == TYPE_DICTIONARY: for value in ecm_params['files'].values(): - if typeof(value) == TYPE_STRING: + if typeof(value) == TYPE_STRING: if value == threat.rparams['filename']: krp = key return krp diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index 4a22200e..1097ddde 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -290,7 +290,7 @@ func _process(_delta: float) -> void: func on_data_received(unit_pribor: Object) -> void: var status: PackedByteArray = unit_pribor.status if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return - + temperature_um = check_temperature_um(status) flags.temperature_ok = check_overheating(temperature_um) block_ip_config = check_block_ip(status, block_ip_config) @@ -1140,7 +1140,7 @@ static func _create_fs_mapping(s_name: String) -> Dictionary: ## Получение статуса ФС static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary: - var updated_results := fs_results.duplicate() + var updated_results := fs_results for fs_num in packet_type_7: if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']): continue @@ -1209,19 +1209,19 @@ static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array: if power_data.size() != 6: if max_power_values.is_empty(): - max_power_values = power_data.duplicate() + max_power_values = power_data elif power_data[0] > max_power_values[0]: - max_power_values = power_data.duplicate() + max_power_values = power_data return max_power_values if max_power_values.is_empty(): - max_power_values = power_data.duplicate() + max_power_values = power_data else: for i in 6: if power_data[i] > max_power_values[i]: max_power_values[i] = power_data[i] - return max_power_values.duplicate() + return max_power_values ## Подготовка принятых данных по контролю для передачи в сцену @@ -1322,7 +1322,7 @@ func _deep_copy_power_structure() -> Dictionary: for litera in power_for_litera: copy[litera] = {} for ray_type in power_for_litera[litera]: - copy[litera][ray_type] = power_for_litera[litera][ray_type].duplicate() + copy[litera][ray_type] = power_for_litera[litera][ray_type] return copy ## Восстановление состояний по умолчанию diff --git a/scripts/threats.gd b/scripts/threats.gd index f7744505..354b1b3f 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -72,7 +72,7 @@ func _ready() -> void: signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats)) signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats)) signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats)) - + ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats)) From 69a72ae9931825ed2a9ce8c75eae68a44ee8a6a5 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 15 Dec 2025 14:17:24 +0300 Subject: [PATCH 51/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F.=20=D0=A3=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D0=B2=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D0=B2=20=D0=AF=D0=A3-07?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/prd.gd | 3 --- scripts/yau07.gd | 1 - 2 files changed, 4 deletions(-) diff --git a/scripts/prd.gd b/scripts/prd.gd index 1e9efd5f..8a56a356 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -311,12 +311,9 @@ class PRD: return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR func execute_cmd(): - var time_now = Time.get_ticks_msec() - if (time_now - unit_yau07.time_tx) < TIME_YAU07_SEND: return if not len(cmd_array): return if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return var cmd: Array = cmd_array.pop_front() - unit_yau07.time_tx = time_now unit_yau07.send_isa(cmd[0], cmd[1]) func start_load(): diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 9c932da1..e31d5ac2 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -41,7 +41,6 @@ class YaU07 extends unit.Unit: var isa_block: = {} ## Результат выполнения команды "читать массив из порта" var flash_data: = PackedByteArray() ## Данные прочитанные из Flash var flash_len: = 0 ## Длинна данных прочитанных из Flash - var time_tx: int = 0 ## Время последней отправки команды func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]]) From 814f013da1f6909309a86864455f904bd946f0fb Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 15 Dec 2025 14:42:33 +0300 Subject: [PATCH 52/54] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс2/{эмс_тг.gd => эмс-тг.gd} | 0 scenes/эмс2/{эмс_тг.gd.uid => эмс-тг.gd.uid} | 0 scenes/эмс2/эмс2.tscn | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename scenes/эмс2/{эмс_тг.gd => эмс-тг.gd} (100%) rename scenes/эмс2/{эмс_тг.gd.uid => эмс-тг.gd.uid} (100%) diff --git a/scenes/эмс2/эмс_тг.gd b/scenes/эмс2/эмс-тг.gd similarity index 100% rename from scenes/эмс2/эмс_тг.gd rename to scenes/эмс2/эмс-тг.gd diff --git a/scenes/эмс2/эмс_тг.gd.uid b/scenes/эмс2/эмс-тг.gd.uid similarity index 100% rename from scenes/эмс2/эмс_тг.gd.uid rename to scenes/эмс2/эмс-тг.gd.uid diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 9fbf3164..93e8f86c 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=35 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] -[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс_тг.gd" id="1_l3ueu"] +[ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] [ext_resource type="Texture2D" uid="uid://0w6q4vfst0ry" path="res://data/OP-63.png" id="3_8gk36"] [ext_resource type="Texture2D" uid="uid://coxhivvc6uibs" path="res://data/Состояние РЭС 40.png" id="4_b3mus"] [ext_resource type="Texture2D" uid="uid://073el51yholj" path="res://data/454.png" id="4_nqi0i"] From 857d2a9f9dbd9052912f2304e811f905a7eef9b7 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 15 Dec 2025 14:54:05 +0300 Subject: [PATCH 53/54] =?UTF-8?q?=D0=A7=D0=B8=D1=81=D1=82=D0=BA=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- export_presets.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/export_presets.cfg b/export_presets.cfg index 1d03d188..23d800df 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -21,7 +21,7 @@ script_export_mode=0 [preset.0.options] custom_template/debug="" -custom_template/release="/home/user/temp/godot.linuxbsd.template_release.x86_64" +custom_template/release="" debug/export_console_wrapper=0 binary_format/embed_pck=true texture_format/s3tc_bptc=true From 88e0ea58abc23ef3457889f34450faf3799c4e4f Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 15 Dec 2025 15:35:03 +0300 Subject: [PATCH 54/54] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5.=20=D0=9D=D0=B5=20=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=88=D0=BA=D0=B0=D0=BB=D1=8B=20=D1=87=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=82=20=D0=B2=20=D0=AD=D0=9C=D0=A12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/контроль/контроль.tscn | 4 +-- scenes/эмс2/эмс-тг.tscn | 3 +- scenes/эмс2/эмс2.tscn | 52 ++++++++++++++++++----------------- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index ac8b04bf..5f2c8459 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -12,7 +12,7 @@ [ext_resource type="Texture2D" uid="uid://c6nve6f8sfyj2" path="res://data/состояние-исправности-0.png" id="7_6j01w"] [ext_resource type="Texture2D" uid="uid://u3tnejvpm8it" path="res://data/disconnect-a.png" id="8_gs2be"] [ext_resource type="Texture2D" uid="uid://dnreyfh3cd1k2" path="res://data/состояние-исправности-1.png" id="8_isjua"] -[ext_resource type="Shader" path="res://shaders/two-color.gdshader" id="9_71ec4"] +[ext_resource type="Shader" uid="uid://83fx15q1xlid" path="res://shaders/two-color.gdshader" id="9_71ec4"] [ext_resource type="Texture2D" uid="uid://b4isaggma6q3" path="res://data/Грани22.png" id="9_iqgf5"] [ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="9_ll0vs"] [ext_resource type="Texture2D" uid="uid://bktiige0i2lhl" path="res://data/У-РЭП-РПД-Н.png" id="9_qe1go"] @@ -23,7 +23,7 @@ [ext_resource type="Texture2D" uid="uid://vdhmga62vjsj" path="res://data/АФСП-РТР.png" id="13_32yvq"] [ext_resource type="Texture2D" uid="uid://dm350ta8noa0v" path="res://data/У-РЭП-РПД-К.png" id="16_32yvq"] [ext_resource type="Texture2D" uid="uid://c3cyog3gy24ft" path="res://data/У-ЭП.png" id="16_gjf0t"] -[ext_resource type="Script" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"] +[ext_resource type="Script" uid="uid://xjs7owe2iexn" path="res://scenes/контроль/control_prd.gd" id="18_lbx5w"] [ext_resource type="Texture2D" uid="uid://b2vf7en1jj8dv" path="res://data/У-РЭП-РПД-В.png" id="20_l5wui"] [ext_resource type="Texture2D" uid="uid://cllxcfa130vqu" path="res://data/УА-РЭП.png" id="22_1s34a"] diff --git a/scenes/эмс2/эмс-тг.tscn b/scenes/эмс2/эмс-тг.tscn index 726dbaae..a5c5f5f0 100644 --- a/scenes/эмс2/эмс-тг.tscn +++ b/scenes/эмс2/эмс-тг.tscn @@ -92,6 +92,5 @@ scale = Vector2(0.911215, 0.911215) texture = SubResource("CompressedTexture2D_pd85g") [node name="ТаблицаЧастот" type="Sprite2D" parent="."] -position = Vector2(808.166, 537.125) -scale = Vector2(0.956689, 0.95669) +position = Vector2(794, 569) texture = ExtResource("8_4em3i") diff --git a/scenes/эмс2/эмс2.tscn b/scenes/эмс2/эмс2.tscn index 93e8f86c..fd4280ec 100644 --- a/scenes/эмс2/эмс2.tscn +++ b/scenes/эмс2/эмс2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=35 format=3 uid="uid://musb21x2u0xs"] +[gd_scene load_steps=36 format=3 uid="uid://musb21x2u0xs"] [ext_resource type="Texture2D" uid="uid://hkcvl2waf63s" path="res://data/вид сверху.png" id="1_b7vcf"] [ext_resource type="Script" uid="uid://bvlqgv7aapebl" path="res://scenes/эмс2/эмс-тг.gd" id="1_l3ueu"] @@ -33,6 +33,7 @@ [ext_resource type="Texture2D" uid="uid://7ody4v7qy36g" path="res://data/Скруглённый прямоугольник серый.png" id="31_b5v2s"] [ext_resource type="Texture2D" uid="uid://carr8bw5rwiwj" path="res://data/Кнопка подтверждения01.png" id="32_p41nv"] [ext_resource type="Texture2D" uid="uid://3siondd3feev" path="res://data/Скруглённый прямоугольник белый.png" id="33_5ifkb"] +[ext_resource type="Texture2D" uid="uid://csxruavk0s40l" path="res://data/Окно частот0.png" id="34_b5v2s"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u4bk"] @@ -401,26 +402,6 @@ texture = ExtResource("26_2spgl") position = Vector2(196, 196) texture = ExtResource("26_2spgl") -[node name="Label" type="Label" parent="."] -layout_mode = 0 -offset_left = 800.0 -offset_top = 246.0 -offset_right = 873.0 -offset_bottom = 265.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_font_sizes/font_size = 16 -text = "Излучение" - -[node name="Label2" type="Label" parent="."] -layout_mode = 0 -offset_left = 813.0 -offset_top = 503.0 -offset_right = 861.0 -offset_bottom = 522.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -theme_override_font_sizes/font_size = 16 -text = "Приём" - [node name="СкруглённыйПрямоугСалатный" type="Sprite2D" parent="."] position = Vector2(84, 828) scale = Vector2(1.33333, 1.16667) @@ -524,8 +505,7 @@ offset_top = -18.8572 offset_right = 574.75 offset_bottom = 22.1428 theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Верхняя -частота" +text = "Верхняя частота" [node name="Label7" type="Label" parent="СкруглённыйПрямоугСалатный"] offset_left = 441.0 @@ -533,8 +513,7 @@ offset_top = -19.7143 offset_right = 495.0 offset_bottom = 21.2857 theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Нижняя -частота" +text = "Нижняя частота" horizontal_alignment = 1 [node name="Label8" type="Label" parent="СкруглённыйПрямоугСалатный"] @@ -1196,3 +1175,26 @@ offset_bottom = 9.0 theme_override_colors/font_color = Color(0, 0, 0, 1) text = "--" horizontal_alignment = 1 + +[node name="ТаблицаЧастот" type="Sprite2D" parent="."] +position = Vector2(800, 502.25) +scale = Vector2(0.987573, 0.885314) +texture = ExtResource("34_b5v2s") + +[node name="Label" type="Label" parent="ТаблицаЧастот"] +offset_left = -6.0755 +offset_top = -293.757 +offset_right = 66.9245 +offset_bottom = -274.757 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 16 +text = "Излучение" + +[node name="Label2" type="Label" parent="ТаблицаЧастот"] +offset_left = 8.10067 +offset_top = -7.05967 +offset_right = 65.1007 +offset_bottom = 11.9403 +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_font_sizes/font_size = 16 +text = "Приём"