From ecee717ba57cb77cd9e5a4d2491fcaa2017853d6 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 31 Oct 2025 12:10:04 +0300 Subject: [PATCH 01/37] =?UTF-8?q?=D0=A1=D0=BE=D0=BC=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE.=20=D0=A3=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=8C=D1=88=D0=B8=D1=82=D1=8C=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=B2=20=D1=81=D1=82=D1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/navigation.gd | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/navigation.gd b/scripts/navigation.gd index 2e8ed4a..245c9b8 100644 --- a/scripts/navigation.gd +++ b/scripts/navigation.gd @@ -4,10 +4,12 @@ class_name navigation extends Node const ONLINE_TIMEOUT: = 5000 ## Время ожидания пакета, миллисекунды const pow_2_30: = pow(2.0, 30.0) +const FRACT_MAX: int = 3 ## Источник данных навигации class NaviSource extends unit.Unit: var cmd_tick_rx: int = 0 + var fract: int = 0 var data: = {} ## Принятые данные var source_addr: = [] ## Адрес отправителя const akng_mode = {0:'тестовый', 1:'основной', 2:'резервный', 3:'аварийный'} @@ -43,5 +45,8 @@ class NaviSource extends unit.Unit: if flags & (1 << 3): data['speed'] = rx_data.decode_float(20) # Скорость, м/с data['err'] = rx_data.decode_u16(24) # - emit_signal('data_received', data) + if fract == 0: + emit_signal('data_received', data) + fract += 1 + fract %= FRACT_MAX return true From 0824b2d51b957bb54cd8916afe72e897846039a7 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 31 Oct 2025 13:04:21 +0300 Subject: [PATCH 02/37] =?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 --- scenes/tilemap/tilemap.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index e363d95..c89af31 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -152,7 +152,7 @@ func _ready() -> void: threats.connect('threat_new', Callable(self, '_on_threat_new')) threats.connect('threat_lost', Callable(self, '_on_threat_lost')) threats.connect('threat_update', Callable(self, '_on_threat_update')) - + func _settings_changed(): From 1fb1e75594069fd4c7731799d9dabd016ca9a3ad Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Fri, 31 Oct 2025 13:06:49 +0300 Subject: [PATCH 03/37] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D1=8F.=20=D0=9F=D0=BE=D0=B2=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D1=82=20=D0=BF=D0=BE=20=D0=BA=D1=83=D1=80=D1=81=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/tilemap/tilemap.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/tilemap/tilemap.gd b/scenes/tilemap/tilemap.gd index c89af31..78e0437 100644 --- a/scenes/tilemap/tilemap.gd +++ b/scenes/tilemap/tilemap.gd @@ -707,7 +707,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 = course + ship_instance.rotation_degrees = fmod(270.0 + course, 360.0) queue_redraw() From b6792816a92d5d4fb7065b9691e3ae5dc9abb5bb Mon Sep 17 00:00:00 2001 From: sasha80 Date: Fri, 31 Oct 2025 13:34:35 +0300 Subject: [PATCH 04/37] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D1=8F.=20=D0=9D=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/sch3.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sch3.gd b/scripts/sch3.gd index baa615a..a7d3155 100644 --- a/scripts/sch3.gd +++ b/scripts/sch3.gd @@ -107,7 +107,7 @@ class Sch3 extends unit.Unit: var unit_prof = ProjectSettings.get_setting('application/config/%s' % unit_sch3.name) if unit_prof: unit_sch3.port = unit_prof[0] - unit_sch3.params = unit_prof[1] + unit_sch3.params = unit_prof.slice(1, -1) step_fsm = Sch3Fsm.CONNECT From 21973541449a0df399845fc1dd5a3ffafd0c0d21 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Sat, 1 Nov 2025 11:21:22 +0300 Subject: [PATCH 05/37] =?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=A1=D0=9A=D0=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a3b149b..4762b6c 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ modbus/serial/__pycache__ /scenes/pribor-prd-k/kasseta-fs-kd.tscn.bak /scenes/pribor-prd-k/pribor-prd-k.tscn.bak /scenes/pribor-prd-n/kasseta-fs-nd.tscn.bak + +*.patch From 3f18a03d5770849ac5cc2d65f19a1e14367d3318 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Sat, 1 Nov 2025 12:47:17 +0300 Subject: [PATCH 06/37] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D1=8F.=20=D0=9D=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=205=D0=9F28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 2b4e62b..2404b92 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -199,7 +199,7 @@ func _ready() -> void: unit_caps.connect('data_received', Callable(self, 'on_data_capsrpb_received').bind(ecms, seczaps)) unit_5p28.connect('get_interfers', Callable(self, 'on_get_interfers').bind(unit_5p28, ecms)) signaller.connect('interfer_create', Callable(self, 'on_interfer_create').bind(unit_caps, ecms)) - signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, ecms)) + signaller.connect('interfer_rcv', Callable(self, 'on_interfer_rcv').bind(unit_5p28, unit_caps, ecms)) signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind(unit_caps)) signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit_caps, ecms)) signaller.connect('th_aoa_update', Callable(self, 'on_th_aoa_update').bind(ecms, unit_caps)) @@ -397,7 +397,7 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) -func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: +func on_interfer_rcv(interfer_params: Array, unit0, unit_caps, ecms) -> void: var err: bool = false var mode = interfer_params[0] var id = interfer_params[1] @@ -425,7 +425,7 @@ func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: if interfer_name == '': err = true if not err: - interfer_create(unit0, interfer_name, ecms, param, aoa, id, cu, SOURCE_INTERFER[2], POW_DEFAULT) + interfer_create(unit_caps, interfer_name, ecms, param, aoa, id, cu, SOURCE_INTERFER[2], POW_DEFAULT) unit0.on_interfer_accept(err) From 23c12ffb2dbd04ece8c8ee31c88711eb1e70ea34 Mon Sep 17 00:00:00 2001 From: lepshiy Date: Sat, 1 Nov 2025 11:44:31 +0300 Subject: [PATCH 07/37] =?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[PATCH]=20=D0=AD=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=AD=D0=9C=D0=A1=20=D0=A2=D0=93=20-=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс2/454.png | Bin 0 -> 4233 bytes scenes/эмс2/454.png.import | 34 ++++++ scenes/эмс2/OP-63.png | Bin 0 -> 23754 bytes scenes/эмс2/OP-63.png.import | 34 ++++++ scenes/эмс2/img4302.png | Bin 0 -> 1729 bytes scenes/эмс2/img4302.png.import | 34 ++++++ scenes/эмс2/imgOP-63.png | Bin 0 -> 2388 bytes scenes/эмс2/imgOP-63.png.import | 34 ++++++ scenes/эмс2/imgМР231-3.png | Bin 0 -> 1377 bytes scenes/эмс2/imgМР231-3.png.import | 34 ++++++ scenes/эмс2/imgМР231S.png | Bin 0 -> 1505 bytes scenes/эмс2/imgМР231S.png.import | 34 ++++++ scenes/эмс2/imgП454К.png | Bin 0 -> 1296 bytes scenes/эмс2/imgП454К.png.import | 34 ++++++ scenes/эмс2/imgЦИВС.png | Bin 0 -> 1263 bytes scenes/эмс2/imgЦИВС.png.import | 34 ++++++ scenes/эмс2/ГО.png | Bin 0 -> 12888 bytes scenes/эмс2/ГО.png.import | 34 ++++++ scenes/эмс2/Излучение.png | Bin 0 -> 3374 bytes scenes/эмс2/Излучение.png.import | 34 ++++++ scenes/эмс2/Квадрат марс 454.png | Bin 0 -> 3072 bytes scenes/эмс2/Квадрат марс 454.png.import | 34 ++++++ scenes/эмс2/Квадрат марс ГО.png | Bin 0 -> 4235 bytes scenes/эмс2/Квадрат марс ГО.png.import | 34 ++++++ scenes/эмс2/Квадрат марс ОР-63.png | Bin 0 -> 4644 bytes scenes/эмс2/Квадрат марс ОР-63.png.import | 34 ++++++ scenes/эмс2/Квадрат марс РЛС1.png | Bin 0 -> 3922 bytes scenes/эмс2/Квадрат марс РЛС1.png.import | 34 ++++++ scenes/эмс2/Квадрат марс РЛС2.png | Bin 0 -> 3725 bytes scenes/эмс2/Квадрат марс РЛС2.png.import | 34 ++++++ scenes/эмс2/Квадрат марс с трубкой.png | Bin 0 -> 3160 bytes scenes/эмс2/Квадрат марс с трубкой.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный 454.png | Bin 0 -> 2975 bytes scenes/эмс2/Квадрат салатный 454.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный ГО.png | Bin 0 -> 4177 bytes scenes/эмс2/Квадрат салатный ГО.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный ОР-63.png | Bin 0 -> 4584 bytes scenes/эмс2/Квадрат салатный ОР-63.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный РЛС1.png | Bin 0 -> 3949 bytes scenes/эмс2/Квадрат салатный РЛС1.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный РЛС2.png | Bin 0 -> 3836 bytes scenes/эмс2/Квадрат салатный РЛС2.png.import | 34 ++++++ scenes/эмс2/Квадрат салатный с трубкой.png | Bin 0 -> 3121 bytes .../Квадрат салатный с трубкой.png.import | 34 ++++++ scenes/эмс2/Кнопка подтверждения01.png | Bin 0 -> 7982 bytes scenes/эмс2/Кнопка подтверждения01.png.import | 34 ++++++ scenes/эмс2/Кнопка подтверждения11.png | Bin 0 -> 8052 bytes scenes/эмс2/Кнопка подтверждения11.png.import | 34 ++++++ scenes/эмс2/ННВС.png | Bin 0 -> 9847 bytes scenes/эмс2/ННВС.png.import | 34 ++++++ scenes/эмс2/ННВС3.png | Bin 0 -> 7150 bytes scenes/эмс2/ННВС3.png.import | 34 ++++++ scenes/эмс2/ННВС4.png | Bin 0 -> 8943 bytes scenes/эмс2/ННВС4.png.import | 34 ++++++ scenes/эмс2/Окно частот0.png | Bin 0 -> 16534 bytes scenes/эмс2/Окно частот0.png.import | 34 ++++++ scenes/эмс2/Приём.png | Bin 0 -> 3772 bytes scenes/эмс2/Приём.png.import | 34 ++++++ scenes/эмс2/РЛС1.png | Bin 0 -> 8189 bytes scenes/эмс2/РЛС1.png.import | 34 ++++++ scenes/эмс2/РЛС2.png | Bin 0 -> 9449 bytes scenes/эмс2/РЛС2.png.import | 34 ++++++ scenes/эмс2/РЛС201.png | Bin 0 -> 4576 bytes scenes/эмс2/РЛС201.png.import | 34 ++++++ scenes/эмс2/Скруглённый квадрат белый.png | Bin 0 -> 1072 bytes .../эмс2/Скруглённый квадрат белый.png.import | 34 ++++++ scenes/эмс2/Скруглённый квадрат серый.png | Bin 0 -> 1033 bytes .../эмс2/Скруглённый квадрат серый.png.import | 34 ++++++ scenes/эмс2/Скруглённый прямоуг салатный.png | Bin 0 -> 2574 bytes .../Скруглённый прямоуг салатный.png.import | 34 ++++++ .../эмс2/Скруглённый прямоугольник белый.png | Bin 0 -> 2732 bytes .../Скруглённый прямоугольник белый.png.import | 34 ++++++ .../эмс2/Скруглённый прямоугольник серый.png | Bin 0 -> 1073 bytes .../Скруглённый прямоугольник серый.png.import | 34 ++++++ scenes/эмс2/Состояние РЭС 1.png | Bin 0 -> 1046 bytes scenes/эмс2/Состояние РЭС 1.png.import | 34 ++++++ scenes/эмс2/Состояние РЭС 20.png | Bin 0 -> 1714 bytes scenes/эмс2/Состояние РЭС 20.png.import | 34 ++++++ scenes/эмс2/Состояние РЭС 40.png | Bin 0 -> 1743 bytes scenes/эмс2/Состояние РЭС 40.png.import | 34 ++++++ scenes/эмс2/Состояние ЭМС слабый сигнал.png | Bin 0 -> 910 bytes .../Состояние ЭМС слабый сигнал.png.import | 34 ++++++ scenes/эмс2/Угловой квадрат2.png | Bin 0 -> 4450 bytes scenes/эмс2/Угловой квадрат2.png.import | 34 ++++++ scenes/эмс2/вид сверху.png | Bin 0 -> 67104 bytes scenes/эмс2/вид сверху.png.import | 34 ++++++ scenes/эмс2/эмс-тг.tscn | 99 ++++++++++++++++++ 87 files changed, 1561 insertions(+) create mode 100644 scenes/эмс2/454.png create mode 100644 scenes/эмс2/454.png.import create mode 100644 scenes/эмс2/OP-63.png create mode 100644 scenes/эмс2/OP-63.png.import create mode 100644 scenes/эмс2/img4302.png create mode 100644 scenes/эмс2/img4302.png.import create mode 100644 scenes/эмс2/imgOP-63.png create mode 100644 scenes/эмс2/imgOP-63.png.import create mode 100644 scenes/эмс2/imgМР231-3.png create mode 100644 scenes/эмс2/imgМР231-3.png.import create mode 100644 scenes/эмс2/imgМР231S.png create mode 100644 scenes/эмс2/imgМР231S.png.import create mode 100644 scenes/эмс2/imgП454К.png create mode 100644 scenes/эмс2/imgП454К.png.import create mode 100644 scenes/эмс2/imgЦИВС.png create mode 100644 scenes/эмс2/imgЦИВС.png.import create mode 100644 scenes/эмс2/ГО.png create mode 100644 scenes/эмс2/ГО.png.import create mode 100644 scenes/эмс2/Излучение.png create mode 100644 scenes/эмс2/Излучение.png.import create mode 100644 scenes/эмс2/Квадрат марс 454.png create mode 100644 scenes/эмс2/Квадрат марс 454.png.import create mode 100644 scenes/эмс2/Квадрат марс ГО.png create mode 100644 scenes/эмс2/Квадрат марс ГО.png.import create mode 100644 scenes/эмс2/Квадрат марс ОР-63.png create mode 100644 scenes/эмс2/Квадрат марс ОР-63.png.import create mode 100644 scenes/эмс2/Квадрат марс РЛС1.png create mode 100644 scenes/эмс2/Квадрат марс РЛС1.png.import create mode 100644 scenes/эмс2/Квадрат марс РЛС2.png create mode 100644 scenes/эмс2/Квадрат марс РЛС2.png.import create mode 100644 scenes/эмс2/Квадрат марс с трубкой.png create mode 100644 scenes/эмс2/Квадрат марс с трубкой.png.import create mode 100644 scenes/эмс2/Квадрат салатный 454.png create mode 100644 scenes/эмс2/Квадрат салатный 454.png.import create mode 100644 scenes/эмс2/Квадрат салатный ГО.png create mode 100644 scenes/эмс2/Квадрат салатный ГО.png.import create mode 100644 scenes/эмс2/Квадрат салатный ОР-63.png create mode 100644 scenes/эмс2/Квадрат салатный ОР-63.png.import create mode 100644 scenes/эмс2/Квадрат салатный РЛС1.png create mode 100644 scenes/эмс2/Квадрат салатный РЛС1.png.import create mode 100644 scenes/эмс2/Квадрат салатный РЛС2.png create mode 100644 scenes/эмс2/Квадрат салатный РЛС2.png.import create mode 100644 scenes/эмс2/Квадрат салатный с трубкой.png create mode 100644 scenes/эмс2/Квадрат салатный с трубкой.png.import create mode 100644 scenes/эмс2/Кнопка подтверждения01.png create mode 100644 scenes/эмс2/Кнопка подтверждения01.png.import create mode 100644 scenes/эмс2/Кнопка подтверждения11.png create mode 100644 scenes/эмс2/Кнопка подтверждения11.png.import create mode 100644 scenes/эмс2/ННВС.png create mode 100644 scenes/эмс2/ННВС.png.import create mode 100644 scenes/эмс2/ННВС3.png create mode 100644 scenes/эмс2/ННВС3.png.import create mode 100644 scenes/эмс2/ННВС4.png create mode 100644 scenes/эмс2/ННВС4.png.import create mode 100644 scenes/эмс2/Окно частот0.png create mode 100644 scenes/эмс2/Окно частот0.png.import create mode 100644 scenes/эмс2/Приём.png create mode 100644 scenes/эмс2/Приём.png.import create mode 100644 scenes/эмс2/РЛС1.png create mode 100644 scenes/эмс2/РЛС1.png.import create mode 100644 scenes/эмс2/РЛС2.png create mode 100644 scenes/эмс2/РЛС2.png.import create mode 100644 scenes/эмс2/РЛС201.png create mode 100644 scenes/эмс2/РЛС201.png.import create mode 100644 scenes/эмс2/Скруглённый квадрат белый.png create mode 100644 scenes/эмс2/Скруглённый квадрат белый.png.import create mode 100644 scenes/эмс2/Скруглённый квадрат серый.png create mode 100644 scenes/эмс2/Скруглённый квадрат серый.png.import create mode 100644 scenes/эмс2/Скруглённый прямоуг салатный.png create mode 100644 scenes/эмс2/Скруглённый прямоуг салатный.png.import create mode 100644 scenes/эмс2/Скруглённый прямоугольник белый.png create mode 100644 scenes/эмс2/Скруглённый прямоугольник белый.png.import create mode 100644 scenes/эмс2/Скруглённый прямоугольник серый.png create mode 100644 scenes/эмс2/Скруглённый прямоугольник серый.png.import create mode 100644 scenes/эмс2/Состояние РЭС 1.png create mode 100644 scenes/эмс2/Состояние РЭС 1.png.import create mode 100644 scenes/эмс2/Состояние РЭС 20.png create mode 100644 scenes/эмс2/Состояние РЭС 20.png.import create mode 100644 scenes/эмс2/Состояние РЭС 40.png create mode 100644 scenes/эмс2/Состояние РЭС 40.png.import create mode 100644 scenes/эмс2/Состояние ЭМС слабый сигнал.png create mode 100644 scenes/эмс2/Состояние ЭМС слабый сигнал.png.import create mode 100644 scenes/эмс2/Угловой квадрат2.png create mode 100644 scenes/эмс2/Угловой квадрат2.png.import create mode 100644 scenes/эмс2/вид сверху.png create mode 100644 scenes/эмс2/вид сверху.png.import create mode 100644 scenes/эмс2/эмс-тг.tscn diff --git a/scenes/эмс2/454.png b/scenes/эмс2/454.png new file mode 100644 index 0000000000000000000000000000000000000000..da3a7f2ac77ad91fdf69456506a5edf091e9c268 GIT binary patch literal 4233 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