Доработка. Добавлены сектора запреты и ответственной работы.

This commit is contained in:
MaD_CaT
2025-10-24 08:33:32 +03:00
parent d382409c34
commit 4a37c1a673
6 changed files with 122 additions and 31 deletions

View File

@@ -37,7 +37,7 @@ config/emsg_files_path="user://emsg/"
config/settings_path="user://settings.json"
config/unit_bpo_request_period=20.0
interfer/emit_color=Color(0.58, 0.471, 0.51, 0.2)
interfer/emit_sel_color=Color(1, 1, 1, 1)
interfer/closed_sectors=Color(0, 0, 0, 1)
[autoload]

View File

@@ -36,6 +36,8 @@ var color_ecm: Color
var color_select: Color
var color_emit: Color
var color_emit_sel: Color
var color_closed: Color
var color_closed_emit: Color
var course = 0.0 ## Курс корабля
@@ -51,7 +53,8 @@ const map_sizes = [
var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте
var fs_selected: Dictionary ## Словарь выбранных секторов
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
var fs_closed: Dictionary ## Словарь для секторов запрета
## Состояние перетаскивания.
enum DragFSM {
@@ -89,14 +92,19 @@ func on_enter_tree() -> void: call_deferred('on_button_strobe_pressed')
func on_settings_changed():
color_emit_sel = ProjectSettings.get_setting('application/interfer/emit_sel_color', Color(1.0, 1.0, 1.0, 1.0))
color_emit = ProjectSettings.get_setting('application/interfer/emit_color', Color(0.58, 0.47, 0.51, 1.0))
color_ecm = ProjectSettings.get_setting('application/interfer/interfer_color', Color(0.58, 0.47, 0.51, 1.0))
color_select = ProjectSettings.get_setting('application/interfer/select_color', Color(1.0, 1.0, 1.0, 1.0))
color_closed = ProjectSettings.get_setting('application/interfer/closed_sectors', Color(0.0, 0.0, 0.0, 1.0))
color_emit_sel = color_select
color_closed_emit = color_closed
color_select *= Color(1.0, 1.0, 1.0, 0.0)
color_ecm *= Color(1.0, 1.0, 1.0, 0.0)
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)
## Обработчик сигнала изменения списка целей.
@@ -145,6 +153,8 @@ func _ready():
btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select)))
var nodes: Array = get_tree().get_nodes_in_group('группа-режим-помехи')
nodes.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_pressed').bind(btn, nodes)))
$btn_close.button_connect('pressed', Callable(self, 'on_btn_close').bind($btn_close))
$btn_work.button_connect('pressed', Callable(self, 'on_btn_work').bind($btn_work))
threats.connect('threat_new', Callable(self, 'on_threat_new'))
threats.connect('threat_lost', Callable(self, 'on_threat_lost'))
threats.connect('threats_resized', Callable(self, 'on_threats_resized'))
@@ -165,6 +175,7 @@ func _ready():
signaller.connect('map_user_panning', Callable(self, 'on_user_panning'))
signaller.connect('update_coordinates_map', Callable(self, 'on_update_coordinates_label'))
signaller.connect('update_scale_map', Callable(self, 'on_update_scale_label'))
var unit_nav = network.get_unit_instance('навигация')
unit_nav.connect('data_received', on_navi_data_received)
on_btn_center_toggled(true)
@@ -487,6 +498,11 @@ func update_fs_colors():
fs_colors[key] = color_ecm
for key in fs_emit.keys():
fs_colors[key] = color_emit
for key in fs_closed:
if key in fs_emit:
fs_colors[key] = color_closed_emit
else:
fs_colors[key] = color_closed
for key in fs_selected.keys():
if key in fs_emit:
fs_colors[key] = color_emit_sel
@@ -560,3 +576,23 @@ func on_update_coordinates_label(coordinates_label) -> void:
func on_update_scale_label(scale_label) -> void:
$scale_map.text = str(scale_label)
func on_btn_close(btn):
await get_tree().create_timer(0.2).timeout
btn.pressed = false
fs_closed.merge(fs_selected)
signaller.emit_signal('update_fs_closed', fs_closed)
func on_btn_work(btn):
await get_tree().create_timer(0.2).timeout
btn.pressed = false
fs_closed.clear()
for fs_index in prd.FS_PRD.keys():
if fs_index in fs_selected: continue
fs_closed[fs_index] = null
signaller.emit_signal('update_fs_closed', fs_closed)
func _on_btn_all_work_pressed() -> void:
fs_closed.clear()
signaller.emit_signal('update_fs_closed', fs_closed)

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://b276iygic5itk"]
[gd_scene load_steps=19 format=3 uid="uid://b276iygic5itk"]
[ext_resource type="Script" uid="uid://daudc0s3oox3i" path="res://scenes/работа/работа.gd" id="1_niok4"]
[ext_resource type="PackedScene" uid="uid://nl1vklubr5kr" path="res://scenes/bip/bip.tscn" id="2_br3s6"]
@@ -13,6 +13,7 @@
[ext_resource type="Texture2D" uid="uid://csdw3q5dtvu4w" path="res://data/power-1.png" id="11_xp4y6"]
[ext_resource type="Texture2D" uid="uid://0sk43ticjaxk" path="res://data/navi-center-0.png" id="12_5ffal"]
[ext_resource type="Texture2D" uid="uid://bk4ssfho1murp" path="res://data/navi-center-1.png" id="13_ggrwd"]
[ext_resource type="Texture2D" uid="uid://c6booa8753u5t" path="res://data/состояние-исправности-2.png" id="14_ggrwd"]
[sub_resource type="Animation" id="Animation_5ffal"]
resource_name = "goto"
@@ -338,15 +339,52 @@ offset_bottom = 302.0
theme_override_font_sizes/font_size = 20
text = ""
[node name="btn_close" parent="." instance=ExtResource("8_k0iv2")]
layout_mode = 0
offset_left = 10.0
offset_top = 917.0
offset_right = 109.0
offset_bottom = 937.0
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
strips_rotation = 25.0
text = "Сек. запрета"
metadata/state = 0
[node name="btn_work" parent="." instance=ExtResource("8_k0iv2")]
layout_mode = 2
offset_left = 10.0
offset_top = 890.0
offset_right = 109.0
offset_bottom = 910.0
size_flags_horizontal = 3
size_flags_vertical = 3
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
strips_rotation = 25.0
text = "Сек. работы"
metadata/state = 0
[node name="btn_all_work" type="TextureButton" parent="."]
modulate = Color(1, 1, 1, 0.356863)
layout_mode = 0
offset_left = 112.0
offset_top = 920.0
offset_right = 336.0
offset_bottom = 1144.0
scale = Vector2(0.06, 0.06)
texture_normal = ExtResource("14_ggrwd")
[connection signal="drag_begin" from="." to="." method="_on_drag_begin"]
[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_activate" to="." method="on_btn_activate"]
[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"]

View File

@@ -107,6 +107,8 @@ var course = 0.0 ## Курс корабля
var gos_flag = true ## Флаг работать по своим целям
var gos_protocols: PackedStringArray ## Список протоколов своих целей
var gos_nmfs: Array ## Список номеров блоков ФС для которых запрещена работа
var fs_closed: Dictionary ## Словарь секторов запрета
## Сеанс помехи.
class Interfer:
@@ -207,6 +209,7 @@ 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('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'))
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms, unit_caps))
@@ -272,35 +275,38 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit_instance) -> v
ecm.kni += 360
call_ecm_proc(ecm)
if ecm.nmfs in gos_nmfs:
ecm.krp = INTERFER_OFF
send_ecm(ecm, unit_instance)
signaller.emit_signal('interfer_off', ecm)
interfer_off(ecm, unit_instance)
elif prd.fs_caps_id[ecm.nmfs] in fs_closed:
interfer_off(ecm, unit_instance)
else:
send_ecm(ecm, unit_instance)
signaller.emit_signal('fs_update_color', ecms)
prd.update_fs_state(ecms, trenazh_mode)
if not gos_flag:
for ecm in ecms.values():
if not (ecm.nmfs in gos_nmfs): continue
ecm.krp = INTERFER_OFF
send_ecm(ecm, unit_instance)
signaller.emit_signal('interfer_off', ecm)
for ecm in ecms.values():
var ecm_active = true
if not gos_flag:
if ecm.nmfs in gos_nmfs:
interfer_off(ecm, unit_instance)
ecm_active = false
if ecm_active and (prd.fs_caps_id[ecm.nmfs] in fs_closed):
interfer_off(ecm, unit_instance)
if not auto_enabled:
return
if auto_enabled:
for thr in threats.values():
if not gos_flag:
var fs_arr: Array = []
prd.find_fs_index(thr.aoa, thr.freq, fs_arr)
if fs_arr.size():
var need_continue = false
for item in fs_arr:
var nmfs = prd.FS_PRD[item][1]
if nmfs in gos_nmfs: need_continue = true
if need_continue: continue
var fs_arr: Array = []
prd.find_fs_index(thr.aoa, thr.freq, fs_arr)
if fs_arr.size():
var need_continue = false
for item in fs_arr:
var nmfs = prd.FS_PRD[item][1]
if (nmfs in gos_nmfs) and (not gos_flag): need_continue = true
if prd.fs_caps_id[nmfs] in fs_closed: need_continue = true
if need_continue: continue
thr.auto_selected = true
if (thr.rkrp != '') and thr.fflags.rkrp and auto_enabled:
var krp = get_krp(thr)
@@ -482,9 +488,7 @@ func send_ecm(ecm, unit0) -> void:
func on_interfer_off_all(unit0, ecms: Dictionary) -> void:
for ecm in ecms.values():
ecm.krp = INTERFER_OFF
send_ecm(ecm, unit0)
signaller.emit_signal('interfer_off', ecm)
interfer_off(ecm, unit0)
func on_threats_lost(th, ecms, unit0) -> void:
@@ -492,9 +496,7 @@ func on_threats_lost(th, ecms, unit0) -> void:
if interfer.thrs[key] == th.id:
var ecm_id = key
var ecm = ecms[ecm_id]
ecm.krp = INTERFER_OFF
send_ecm(ecm, unit0)
signaller.emit_signal('interfer_off', ecm)
interfer_off(ecm, unit0)
func pop_id() -> int:
@@ -684,6 +686,12 @@ func on_interfer_off(ecm: Interfer, ecms):
interfer.call_deferred('emit_signal', 'interfer_resized', ecms)
func interfer_off(ecm, unit_caps):
ecm.krp = INTERFER_OFF
send_ecm(ecm, unit_caps)
signaller.emit_signal('interfer_off', ecm)
func on_interfer_new(ecm, unit_caps):
call_ecm_proc(ecm)
send_ecm(ecm, unit_caps)
@@ -700,3 +708,7 @@ func call_ecm_proc(ecm):
if ecm_params.has('call_proc'):
var call_set_params = Callable(self, ecm_params['call_proc']).bind(ecm, ecm_params)
call_set_params.call()
func on_update_fs_closed(fs_dict):
fs_closed = fs_dict

View File

@@ -1,4 +1,4 @@
@tool
#@tool
class_name Network extends Node
const YAU07_PROTO: = {'yau07tx': yau07.YaU07}

View File

@@ -201,3 +201,8 @@ signal update_uf_serviceability(uf_serviceaability: bool)
signal tool_tip(new_ctrl_pos)
## Вызывается при изменении секторов запрета.[br]
## [param fs_closed] - обновленное секторов запрета ([b]true[/b]
signal update_fs_closed(fs_closed: Dictionary)