Merge remote-tracking branch 'MaD_CaT/master'
# Conflicts: # project.godot
This commit is contained in:
@@ -26,6 +26,11 @@ config/map_maximum_zoom=19
|
||||
config/map_server_addr="https://b.tile.openstreetmap.org"
|
||||
config/map_image_size_rto=Vector2i(512, 512)
|
||||
config/map_image_size_rls=Vector2i(1024, 1024)
|
||||
interfer/center_offset=Vector2(0, 25)
|
||||
interfer/default_color0=Vector3(0.38, 0.47, 0.51)
|
||||
interfer/default_color1=Vector3(0.39, 0.44, 0.5)
|
||||
interfer/select_color=Vector3(1, 1, 1)
|
||||
interfer/interfer_color=Vector3(0.58, 0.47, 0.51)
|
||||
config/mod_bus_driver="client-tcp.py"
|
||||
config/mod_bus_driver_port="48000"
|
||||
config/mod_bus_driver_address="localhost"
|
||||
@@ -87,6 +92,7 @@ enabled=PackedStringArray()
|
||||
[global]
|
||||
|
||||
map_server_addr=false
|
||||
center_offset=Vector2(0, 0)
|
||||
|
||||
[gui]
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ func _on_bip_gui_input(event):
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_LEFT:
|
||||
signaller.emit_signal('rto_threat_sel', name.to_int())
|
||||
signaller.emit_signal('bip_pressed', name.to_int())
|
||||
MOUSE_BUTTON_RIGHT:
|
||||
if selected:
|
||||
signaller.emit_signal('rto_threat_unsel', name.to_int())
|
||||
|
||||
@@ -31,10 +31,9 @@ func is_toggle_mode(): return $button.is_toggle_mode()
|
||||
$button.set_disabled(val)
|
||||
$back.disabled = val
|
||||
if val:
|
||||
save_modulate = $state.modulate
|
||||
$state.modulate *= Color(1.0, 1.0, 1.0, 0.5)
|
||||
$state.modulate.a = 0.5
|
||||
else:
|
||||
$state.modulate = save_modulate
|
||||
$state.modulate.a = 1.0
|
||||
get: return $button.disabled
|
||||
|
||||
|
||||
|
||||
@@ -23,3 +23,4 @@ func get_radius_inner_0() -> float: return material.get('shader_parameter/radiu
|
||||
func get_radius_inner_1() -> float: return material.get('shader_parameter/radius_inner_1')
|
||||
|
||||
func set_view_mode(val: int): material.set('shader_parameter/mode', val);
|
||||
func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val)
|
||||
|
||||
@@ -63,7 +63,7 @@ editor_description = "Кнопка для принудительного вкл
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "JTIDS"
|
||||
text = "СПРС"
|
||||
metadata/rfi_name = "ozp1"
|
||||
|
||||
[node name="btn_kupd" parent="grd_forced" groups=["группа-принудительно"] instance=ExtResource("4_7ys3c")]
|
||||
|
||||
@@ -53,6 +53,8 @@ func on_row_pressed(i_row: int):
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
signaller.emit_signal('rto_threat_sel', interfer.thrs[ecm.ispp])
|
||||
else:
|
||||
if interfer.fs.has(ecm.ispp):
|
||||
signaller.emit_signal('fs_selected', ecm)
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ func on_interfer_selected(ecm):
|
||||
|
||||
|
||||
func on_ecm_update():
|
||||
for item in range(len(TABLE_PARAMS)):
|
||||
for item in len(TABLE_PARAMS):
|
||||
$table.set_node_text(1, item, '')
|
||||
$table.set_node_editable(1, item, false)
|
||||
if $table.has_meta('ecm') == false: return
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
extends NinePatchRect
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
$grd_forced/btn_cancel.button_connect('pressed', Callable(self, 'on_btn_cancel_pressed').bind($grd_forced/btn_cancel))
|
||||
|
||||
|
||||
func on_btn_cancel_pressed(btn):
|
||||
signaller.emit_signal('interfer_off_all')
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
btn.pressed = false
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
@@ -17,6 +17,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_block_la1" type="NinePatchRect" parent="ref_A1_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 32.0
|
||||
offset_top = 70.0
|
||||
offset_right = 332.0
|
||||
@@ -28,6 +29,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_mshu1" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 211.0
|
||||
offset_right = 280.0
|
||||
@@ -36,6 +38,7 @@ fname = "МШУ"
|
||||
rname = "А5"
|
||||
|
||||
[node name="ref_mshu2" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 89.0
|
||||
offset_right = 280.0
|
||||
@@ -44,6 +47,7 @@ fname = "МШУ"
|
||||
rname = "А2"
|
||||
|
||||
[node name="ref_mshu3" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 130.0
|
||||
offset_right = 280.0
|
||||
@@ -52,6 +56,7 @@ fname = "МШУ"
|
||||
rname = "А3"
|
||||
|
||||
[node name="ref_mshu4" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 171.0
|
||||
offset_right = 280.0
|
||||
@@ -60,6 +65,7 @@ fname = "МШУ"
|
||||
rname = "А4"
|
||||
|
||||
[node name="ref_mshu5" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 252.0
|
||||
offset_right = 280.0
|
||||
@@ -68,6 +74,7 @@ fname = "МШУ"
|
||||
rname = "А6"
|
||||
|
||||
[node name="ref_mshu6" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 48.0
|
||||
offset_right = 280.0
|
||||
@@ -76,6 +83,7 @@ fname = "МШУ"
|
||||
rname = "А1"
|
||||
|
||||
[node name="ref_mshu7" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 291.0
|
||||
offset_right = 280.0
|
||||
@@ -84,6 +92,7 @@ fname = "МШУ"
|
||||
rname = "А7"
|
||||
|
||||
[node name="ref_mshu8" parent="ref_A1_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 334.0
|
||||
offset_right = 280.0
|
||||
@@ -100,6 +109,7 @@ offset_bottom = 41.0
|
||||
text = "Модули ЛА6А45"
|
||||
|
||||
[node name="ref_bpch" type="NinePatchRect" parent="ref_A1_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 32.0
|
||||
offset_top = 458.0
|
||||
offset_right = 332.0
|
||||
@@ -111,6 +121,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="lbl_bpch" type="Label" parent="ref_A1_lpa/ref_bpch"]
|
||||
layout_mode = 0
|
||||
offset_left = 135.0
|
||||
offset_top = 16.0
|
||||
offset_right = 167.0
|
||||
@@ -127,6 +138,7 @@ fname = "Модуль ОГ"
|
||||
rname = "А23"
|
||||
|
||||
[node name="ref_geterodin" parent="ref_A1_lpa/ref_bpch" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 85.0
|
||||
offset_right = 280.0
|
||||
@@ -135,6 +147,7 @@ fname = "Гетеродин"
|
||||
rname = "А10"
|
||||
|
||||
[node name="ref_block_la2" type="NinePatchRect" parent="ref_A1_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 33.0
|
||||
offset_top = 605.0
|
||||
offset_right = 333.0
|
||||
@@ -146,6 +159,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_mshu9" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 48.0
|
||||
offset_right = 280.0
|
||||
@@ -154,6 +168,7 @@ fname = "МШУ"
|
||||
rname = "А9"
|
||||
|
||||
[node name="ref_mshu10" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 89.0
|
||||
offset_right = 280.0
|
||||
@@ -162,6 +177,7 @@ fname = "МШУ"
|
||||
rname = "А10"
|
||||
|
||||
[node name="ref_mshu11" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 130.0
|
||||
offset_right = 280.0
|
||||
@@ -170,6 +186,7 @@ fname = "МШУ"
|
||||
rname = "А11"
|
||||
|
||||
[node name="ref_mshu12" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 171.0
|
||||
offset_right = 280.0
|
||||
@@ -178,6 +195,7 @@ fname = "МШУ"
|
||||
rname = "А12"
|
||||
|
||||
[node name="ref_mshu13" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 211.0
|
||||
offset_right = 280.0
|
||||
@@ -186,6 +204,7 @@ fname = "МШУ"
|
||||
rname = "А13"
|
||||
|
||||
[node name="ref_mshu14" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 252.0
|
||||
offset_right = 280.0
|
||||
@@ -194,6 +213,7 @@ fname = "МШУ"
|
||||
rname = "А14"
|
||||
|
||||
[node name="ref_mshu15" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 291.0
|
||||
offset_right = 280.0
|
||||
@@ -202,6 +222,7 @@ fname = "МШУ"
|
||||
rname = "А15"
|
||||
|
||||
[node name="ref_mshu16" parent="ref_A1_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 334.0
|
||||
offset_right = 280.0
|
||||
@@ -218,6 +239,7 @@ offset_bottom = 41.0
|
||||
text = "Модули ЛА6А45"
|
||||
|
||||
[node name="lbl_lpa" type="Label" parent="ref_A1_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 169.0
|
||||
offset_top = 28.0
|
||||
offset_right = 197.0
|
||||
@@ -225,6 +247,7 @@ offset_bottom = 52.0
|
||||
text = "ЛПА"
|
||||
|
||||
[node name="lbl_A" type="Label" parent="ref_A1_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 302.0
|
||||
offset_top = 16.0
|
||||
offset_right = 330.0
|
||||
@@ -243,6 +266,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_block_la1" type="NinePatchRect" parent="ref_A2_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 32.0
|
||||
offset_top = 70.0
|
||||
offset_right = 332.0
|
||||
@@ -254,6 +278,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_mshu1" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 211.0
|
||||
offset_right = 280.0
|
||||
@@ -262,6 +287,7 @@ fname = "МШУ"
|
||||
rname = "А5"
|
||||
|
||||
[node name="ref_mshu2" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 89.0
|
||||
offset_right = 280.0
|
||||
@@ -270,6 +296,7 @@ fname = "МШУ"
|
||||
rname = "А2"
|
||||
|
||||
[node name="ref_mshu3" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 130.0
|
||||
offset_right = 280.0
|
||||
@@ -278,6 +305,7 @@ fname = "МШУ"
|
||||
rname = "А3"
|
||||
|
||||
[node name="ref_mshu4" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 171.0
|
||||
offset_right = 280.0
|
||||
@@ -286,6 +314,7 @@ fname = "МШУ"
|
||||
rname = "А4"
|
||||
|
||||
[node name="ref_mshu5" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 252.0
|
||||
offset_right = 280.0
|
||||
@@ -294,6 +323,7 @@ fname = "МШУ"
|
||||
rname = "А6"
|
||||
|
||||
[node name="ref_mshu6" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 48.0
|
||||
offset_right = 280.0
|
||||
@@ -302,6 +332,7 @@ fname = "МШУ"
|
||||
rname = "А1"
|
||||
|
||||
[node name="ref_mshu7" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 291.0
|
||||
offset_right = 280.0
|
||||
@@ -310,6 +341,7 @@ fname = "МШУ"
|
||||
rname = "А7"
|
||||
|
||||
[node name="ref_mshu8" parent="ref_A2_lpa/ref_block_la1" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 334.0
|
||||
offset_right = 280.0
|
||||
@@ -326,6 +358,7 @@ offset_bottom = 41.0
|
||||
text = "Модули ЛА6А45"
|
||||
|
||||
[node name="ref_bpch" type="NinePatchRect" parent="ref_A2_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 32.0
|
||||
offset_top = 458.0
|
||||
offset_right = 332.0
|
||||
@@ -337,6 +370,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="lbl_bpch" type="Label" parent="ref_A2_lpa/ref_bpch"]
|
||||
layout_mode = 0
|
||||
offset_left = 135.0
|
||||
offset_top = 16.0
|
||||
offset_right = 167.0
|
||||
@@ -353,6 +387,7 @@ fname = "Модуль ОГ"
|
||||
rname = "А23"
|
||||
|
||||
[node name="ref_geterodin" parent="ref_A2_lpa/ref_bpch" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 85.0
|
||||
offset_right = 280.0
|
||||
@@ -361,6 +396,7 @@ fname = "Гетеродин"
|
||||
rname = "А10"
|
||||
|
||||
[node name="ref_block_la2" type="NinePatchRect" parent="ref_A2_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 33.0
|
||||
offset_top = 605.0
|
||||
offset_right = 333.0
|
||||
@@ -372,6 +408,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_mshu9" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 48.0
|
||||
offset_right = 280.0
|
||||
@@ -380,6 +417,7 @@ fname = "МШУ"
|
||||
rname = "А9"
|
||||
|
||||
[node name="ref_mshu10" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 89.0
|
||||
offset_right = 280.0
|
||||
@@ -388,6 +426,7 @@ fname = "МШУ"
|
||||
rname = "А10"
|
||||
|
||||
[node name="ref_mshu11" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 130.0
|
||||
offset_right = 280.0
|
||||
@@ -396,6 +435,7 @@ fname = "МШУ"
|
||||
rname = "А11"
|
||||
|
||||
[node name="ref_mshu12" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 171.0
|
||||
offset_right = 280.0
|
||||
@@ -404,6 +444,7 @@ fname = "МШУ"
|
||||
rname = "А12"
|
||||
|
||||
[node name="ref_mshu13" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 211.0
|
||||
offset_right = 280.0
|
||||
@@ -412,6 +453,7 @@ fname = "МШУ"
|
||||
rname = "А13"
|
||||
|
||||
[node name="ref_mshu14" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 252.0
|
||||
offset_right = 280.0
|
||||
@@ -420,6 +462,7 @@ fname = "МШУ"
|
||||
rname = "А14"
|
||||
|
||||
[node name="ref_mshu15" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 291.0
|
||||
offset_right = 280.0
|
||||
@@ -428,6 +471,7 @@ fname = "МШУ"
|
||||
rname = "А15"
|
||||
|
||||
[node name="ref_mshu16" parent="ref_A2_lpa/ref_block_la2" instance=ExtResource("2_wgsuv")]
|
||||
layout_mode = 0
|
||||
offset_left = 20.0
|
||||
offset_top = 334.0
|
||||
offset_right = 280.0
|
||||
@@ -444,6 +488,7 @@ offset_bottom = 41.0
|
||||
text = "Модули ЛА6А45"
|
||||
|
||||
[node name="lbl_lpa" type="Label" parent="ref_A2_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 169.0
|
||||
offset_top = 28.0
|
||||
offset_right = 197.0
|
||||
@@ -451,6 +496,7 @@ offset_bottom = 52.0
|
||||
text = "ЛПА"
|
||||
|
||||
[node name="lbl_A" type="Label" parent="ref_A2_lpa"]
|
||||
layout_mode = 0
|
||||
offset_left = 302.0
|
||||
offset_top = 16.0
|
||||
offset_right = 330.0
|
||||
|
||||
@@ -17,6 +17,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_A23" parent="ref_G1" instance=ExtResource("2_e75yj")]
|
||||
layout_mode = 0
|
||||
offset_left = 105.0
|
||||
offset_top = 28.0
|
||||
offset_right = 265.0
|
||||
@@ -37,6 +38,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_A24" parent="ref_A1" instance=ExtResource("2_e75yj")]
|
||||
layout_mode = 0
|
||||
offset_left = 334.0
|
||||
offset_top = 74.0
|
||||
offset_right = 644.0
|
||||
@@ -46,6 +48,7 @@ rname = "A24"
|
||||
state = 1
|
||||
|
||||
[node name="ref_A25" parent="ref_A1" instance=ExtResource("2_e75yj")]
|
||||
layout_mode = 0
|
||||
offset_left = 70.0
|
||||
offset_top = 115.0
|
||||
offset_right = 275.0
|
||||
@@ -66,6 +69,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_A26" parent="ref_A2" instance=ExtResource("2_e75yj")]
|
||||
layout_mode = 0
|
||||
offset_left = 336.0
|
||||
offset_top = 68.0
|
||||
offset_right = 646.0
|
||||
@@ -75,6 +79,7 @@ rname = "A27"
|
||||
state = 1
|
||||
|
||||
[node name="ref_A27" parent="ref_A2" instance=ExtResource("2_e75yj")]
|
||||
layout_mode = 0
|
||||
offset_left = 68.0
|
||||
offset_top = 112.0
|
||||
offset_right = 273.0
|
||||
|
||||
@@ -17,6 +17,7 @@ patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="ref_bu1" type="NinePatchRect" parent="ref_uf"]
|
||||
layout_mode = 0
|
||||
offset_left = 281.0
|
||||
offset_top = 138.0
|
||||
offset_right = 591.0
|
||||
@@ -47,6 +48,7 @@ fname = "ВК-110"
|
||||
state = 1
|
||||
|
||||
[node name="А8" type="Label" parent="ref_uf/ref_bu1"]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 12.0
|
||||
offset_right = 39.0
|
||||
@@ -54,6 +56,7 @@ offset_bottom = 31.0
|
||||
text = "А8"
|
||||
|
||||
[node name="А1" type="Label" parent="ref_uf/ref_bu1"]
|
||||
layout_mode = 0
|
||||
offset_left = 140.0
|
||||
offset_top = 13.0
|
||||
offset_right = 174.0
|
||||
@@ -61,6 +64,7 @@ offset_bottom = 32.0
|
||||
text = "БУ-1"
|
||||
|
||||
[node name="ref_kassetav13" type="NinePatchRect" parent="ref_uf"]
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = 517.0
|
||||
offset_right = 597.0
|
||||
@@ -152,6 +156,7 @@ rname = "A12"
|
||||
state = 1
|
||||
|
||||
[node name="А1" type="Label" parent="ref_uf/ref_kassetav13"]
|
||||
layout_mode = 0
|
||||
offset_left = 21.0
|
||||
offset_top = 15.0
|
||||
offset_right = 55.0
|
||||
@@ -159,6 +164,7 @@ offset_bottom = 34.0
|
||||
text = "А1"
|
||||
|
||||
[node name="А2" type="Label" parent="ref_uf/ref_kassetav13"]
|
||||
layout_mode = 0
|
||||
offset_left = 244.0
|
||||
offset_top = 16.0
|
||||
offset_right = 337.0
|
||||
|
||||
@@ -21,22 +21,63 @@ extends Panel
|
||||
@export var window_0_id: int ## Идетификатор окна. Присваивается godot от 0 до количества созданных окон
|
||||
|
||||
|
||||
var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании
|
||||
var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания
|
||||
var drag_pos_begin: Vector2 ## Точка начала перетаскивания
|
||||
var max_zoom: int ## Максимальный уровень детализации
|
||||
var min_zoom: int ## Минимальный уровень детализации
|
||||
var shift_pressed: bool ## Кнопка SHIFT нажата
|
||||
var strob_band_begin: float ## Ширина строба в момент начала перетаскивания
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания
|
||||
var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании
|
||||
var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания
|
||||
var btn_select: BtnSel = BtnSel.THREAT ## Текущее состояние кнопки выбора цели
|
||||
var drag_pos_begin: Vector2 ## Точка начала перетаскивания
|
||||
var max_zoom: int ## Максимальный уровень детализации
|
||||
var min_zoom: int ## Минимальный уровень детализации
|
||||
var shift_pressed: bool ## Кнопка SHIFT нажата
|
||||
var strob_band_begin: float ## Ширина строба в момент начала перетаскивания
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания
|
||||
|
||||
|
||||
signal drag_begin ## Вызывается в момент начала перетаскивания
|
||||
signal drag_continue ## Вызывается во время продолжения перетаскивания
|
||||
signal drag_end ## Вызывается в момент завершения перетаскивания
|
||||
|
||||
## Границы секторов блоков ФС по частоте в режиме РТО
|
||||
const fs_band_rto: Dictionary = {
|
||||
0: [200.0, 250.0],
|
||||
1: [250.0, 300.0],
|
||||
2: [300.0, 350.0],
|
||||
3: [350.0, 400.0],
|
||||
4: [400.0, 450.0],
|
||||
5: [450.0, 500.0],
|
||||
6: [500.0, 550.0] }
|
||||
|
||||
## Границы секторов блоков ФС по частоте в режиме РЛС
|
||||
const fs_band_rls: Dictionary = {
|
||||
0: [480.0, 490.0],
|
||||
1: [490.0, 500.0],
|
||||
2: [500.0, 510.0],
|
||||
3: [510.0, 520.0],
|
||||
4: [520.0, 530.0],
|
||||
5: [530.0, 540.0],
|
||||
6: [540.0, 550.0] }
|
||||
|
||||
## Границы секторов блоков ФС по пеленгу
|
||||
const fs_sectors: Dictionary = {
|
||||
0: [0.0, 90.0],
|
||||
3: [90.0, 180.0],
|
||||
2: [180.0, 270.0],
|
||||
1: [270.0, 360.0] }
|
||||
|
||||
const fs_freq: Dictionary = {
|
||||
0: [400.0, 1200.0],
|
||||
1: [1200.0, 2000.0],
|
||||
2: [2000.0, 2800.0],
|
||||
3: [2800.0, 3600.0],
|
||||
4: [3600.0, 4400.0],
|
||||
5: [4400.0, 5200.0],
|
||||
6: [5200.0, 6000.0] }
|
||||
|
||||
var fs_band = fs_band_rto # Текущий режим блоков ФС по частоте
|
||||
var fs_default_colors: Array # Цвета по умолчанию для блоков ФС
|
||||
var fs_selected: Dictionary # Словарь выбранных секторов
|
||||
var fs_active: Dictionary # Словарь секторов назначенных на подавление
|
||||
|
||||
## Состояние перетаскивания
|
||||
enum DragFSM {
|
||||
DRAG, ## В процессе
|
||||
@@ -44,15 +85,28 @@ enum DragFSM {
|
||||
OFF ## Выключено
|
||||
}
|
||||
|
||||
## Состояние перетаскивания
|
||||
enum BtnSel {
|
||||
SECTOR, ## В процессе
|
||||
THREAT, ## Не активно, ожидание
|
||||
FS ## Выключено
|
||||
}
|
||||
|
||||
## Обработчик сигнала изменения списка целей
|
||||
func on_threats_resized(threats: Dictionary): $count_all_pad/count_all.text = '%02d' % threats.size()
|
||||
|
||||
|
||||
## Обработчик выбора цели
|
||||
func on_threat_selected(th, ecm_btns): on_rto_threat_sel(th.id, ecm_btns)
|
||||
|
||||
|
||||
func on_button_view_toggled(toggled: bool): signaller.emit_signal('map_mode_changed', int(toggled))
|
||||
## Обработчик нажатия на кнопку вид
|
||||
func on_button_view_toggled(toggled: bool):
|
||||
signaller.emit_signal('map_mode_changed', int(toggled))
|
||||
if toggled:
|
||||
fs_band = fs_band_rls
|
||||
else:
|
||||
fs_band = fs_band_rto
|
||||
|
||||
|
||||
##
|
||||
@@ -77,23 +131,28 @@ func _ready():
|
||||
max_zoom = ProjectSettings.get_setting('application/config/map_maximum_zoom', 19)
|
||||
drag_fsm = DragFSM.OFF
|
||||
$btn_zoom.set_meta('zoom', min_zoom - 1)
|
||||
$btn_strob.button_connect('pressed', Callable(self, 'on_button_strobe_pressed'))
|
||||
var btns_select: Array = $btns_select.get_children()
|
||||
btns_select.any(func(btn): btn.button_connect('pressed', Callable(self, 'on_button_select').bind(btn, btns_select)))
|
||||
$btn_view.button_connect('toggled', Callable(self, 'on_button_view_toggled'))
|
||||
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)))
|
||||
set_def_colors()
|
||||
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'))
|
||||
threats.connect('threat_update', Callable(self, 'on_threat_update'))
|
||||
signaller.connect('zoom_complete', Callable(self, '_on_zoom_complete'))
|
||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(nodes))
|
||||
signaller.connect('bip_pressed', Callable(self, 'on_bip_pressed').bind(nodes))
|
||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(nodes))
|
||||
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(nodes))
|
||||
signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(nodes))
|
||||
signaller.connect('interfer_new', Callable(self, 'on_interfer_new'))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'interfer_off_all'))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all'))
|
||||
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
|
||||
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
|
||||
|
||||
|
||||
func on_enter_tree() -> void:
|
||||
call_deferred('_on_btn_scale_pressed')
|
||||
call_deferred('on_button_strobe_pressed')
|
||||
@@ -109,7 +168,7 @@ func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
radius_internal,
|
||||
radius_outter,
|
||||
freq_low,
|
||||
freq_high)
|
||||
freq_high) - bip.size / 2
|
||||
|
||||
|
||||
## Обработчик сигнала обновления цели
|
||||
@@ -121,24 +180,28 @@ func on_threat_update(th):
|
||||
## Обработчик выбора помехи для цели
|
||||
func on_interfer_new(ecm):
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
var th_id = interfer.thrs[ecm.ispp]
|
||||
var bip = get_node('%d' % th_id)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
bip.set_track_visible(true)
|
||||
if ecm.svk == 1:
|
||||
bip.set_ecm_visible(true)
|
||||
else: bip.set_ecm_visible(false)
|
||||
else:
|
||||
print_debug()
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
if interfer.thrs.has(ecm.ispp):
|
||||
var th_id = interfer.thrs[ecm.ispp]
|
||||
var bip = get_node('%d' % th_id)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
bip.set_track_visible(true)
|
||||
if ecm.svk == 1:
|
||||
bip.set_ecm_visible(true)
|
||||
else: bip.set_ecm_visible(false)
|
||||
else:
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
set_fs_color(ecm)
|
||||
|
||||
|
||||
func interfer_off_all():
|
||||
## Обработчик выключения всех помех
|
||||
func on_interfer_off_all():
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for bip in bips:
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
fs_active.clear()
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
## Обработчик сигнала обнаружения цели
|
||||
@@ -156,12 +219,19 @@ func on_threat_lost(th) -> void:
|
||||
bip.free()
|
||||
|
||||
|
||||
## обработчик нажатия на цель на экране
|
||||
func on_bip_pressed(th_id, _ecm_btns):
|
||||
if btn_select == BtnSel.THREAT:
|
||||
signaller.emit_signal('rto_threat_sel', th_id)
|
||||
|
||||
|
||||
## Обработчик выбора РТО цели
|
||||
func on_rto_threat_sel(th_id, ecm_btns):
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for item in bips:
|
||||
if th_id == item.name.to_int():
|
||||
item.set_sel_visible(true)
|
||||
unsel_fs_all(false)
|
||||
else:
|
||||
item.set_sel_visible(false)
|
||||
for btn in ecm_btns:
|
||||
@@ -169,27 +239,38 @@ func on_rto_threat_sel(th_id, ecm_btns):
|
||||
|
||||
|
||||
## Обработчик снятия выбора РТО цели
|
||||
func on_rto_threat_unsel(th_id, ecm_btns):
|
||||
func on_rto_threat_unsel(th_id, _ecm_btns):
|
||||
var bips: Array = get_children().filter(func(item): return item.name.is_valid_int())
|
||||
for item in bips:
|
||||
if th_id == item.name.to_int():
|
||||
item.set_sel_visible(false)
|
||||
break
|
||||
for btn in ecm_btns:
|
||||
btn.set_pressed(false)
|
||||
btn.set_disabled(true)
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
## Обработчик нажатия кнопки "Строб". Управляет отображением строба
|
||||
func on_button_strobe_pressed() -> void:
|
||||
drag_fsm = DragFSM.IDLE if $btn_strob.is_pressed() else DragFSM.OFF
|
||||
drag_fsm = DragFSM.IDLE if $btns_select/btn_strob.is_pressed() else DragFSM.OFF
|
||||
$canvas.set_strob_visible(drag_fsm == DragFSM.IDLE)
|
||||
|
||||
|
||||
## Поведение радиокнопок в группе. Управляет состоянием кнопок выбора целей
|
||||
func on_button_select(btn_this, btn_others) -> void:
|
||||
for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other)
|
||||
btn_select = btn_this.get_meta('state')
|
||||
on_button_strobe_pressed()
|
||||
signaller.emit_signal('rto_threat_unsel_all')
|
||||
unsel_fs_all(true)
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
## Поведение радиокнопок в группе. Управляет состоянием кнопок в радиогруппе
|
||||
func on_button_pressed(btn_this, btn_others) -> void:
|
||||
var fs_arr: Array = []
|
||||
for btn_other in btn_others: btn_other.set_pressed(btn_this == btn_other)
|
||||
signaller.emit_signal('interfer_init', btn_this)
|
||||
for key in fs_selected.keys():
|
||||
fs_arr.append(get_fs_param(key))
|
||||
signaller.emit_signal('interfer_init', btn_this, fs_arr)
|
||||
|
||||
|
||||
## Управляет состоянием кнопок в радиогруппе при выборе помехи
|
||||
@@ -266,8 +347,11 @@ func _input(event) -> void:
|
||||
drag_fsm = DragFSM.DRAG
|
||||
emit_signal('drag_begin', event)
|
||||
else:
|
||||
if btn_select == BtnSel.FS:
|
||||
sel_fs_sector(event)
|
||||
drag_fsm = DragFSM.IDLE
|
||||
emit_signal('drag_end', event)
|
||||
|
||||
elif event is InputEventKey:
|
||||
if event.physical_keycode == KEY_SHIFT:
|
||||
shift_pressed = event.pressed
|
||||
@@ -285,3 +369,116 @@ func _on_zoom_complete(zoom: int) -> void:
|
||||
var prefix = $btn_zoom.get_meta('prefix')
|
||||
$btn_zoom/lbl.text = '%s %d' % [prefix, zoom]
|
||||
$btn_zoom.set_meta('zoom', zoom)
|
||||
|
||||
|
||||
## Закрашивание по умолчанию блоков ФС цветами из настроек
|
||||
func set_def_colors():
|
||||
var color0: Vector3 = ProjectSettings.get_setting('application/interfer/default_color0', Vector3(0.38, 0.47, 0.51))
|
||||
var color1: Vector3 = ProjectSettings.get_setting('application/interfer/default_color1', Vector3(0.39, 0.44, 0.50))
|
||||
var col_arr: Array = [color0, color1]
|
||||
var col = false
|
||||
for i in range(7):
|
||||
for j in range (4):
|
||||
fs_default_colors.append(col_arr[int(col)])
|
||||
col = not col
|
||||
col = not col
|
||||
$canvas.set_band_colors(fs_default_colors)
|
||||
|
||||
|
||||
# Обработчик нажатия по сектору формирователя сигналов
|
||||
func sel_fs_sector(event):
|
||||
if (event.button_index == MOUSE_BUTTON_LEFT) or (event.button_index == MOUSE_BUTTON_RIGHT):
|
||||
var center: Vector2 = $tilemap.position
|
||||
var center_offset: Vector2 = ProjectSettings.get_setting('application/interfer/center_offset', Vector2i(0, 25))
|
||||
var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0
|
||||
if angle < 0:
|
||||
angle +=360
|
||||
var distance: float = event.position.distance_to(center + center_offset)
|
||||
var sector: int
|
||||
var band: int
|
||||
var has_band: bool = false
|
||||
for sec in fs_sectors.values():
|
||||
if angle >= sec[0] and angle <= sec[1]:
|
||||
sector = fs_sectors.find_key(sec)
|
||||
for diap in fs_band.values():
|
||||
if distance >= diap[0] and distance <= diap[1]:
|
||||
band = fs_band.find_key(diap)
|
||||
has_band = true
|
||||
if not has_band:
|
||||
return
|
||||
var fs_index = band * 4 + sector
|
||||
if event.button_index == MOUSE_BUTTON_LEFT:
|
||||
fs_selected[fs_index] = null
|
||||
else:
|
||||
fs_selected.erase(fs_index)
|
||||
update_fs_colors()
|
||||
signaller.emit_signal('rto_threat_unsel_all')
|
||||
var btn_state = len(fs_selected) == 0
|
||||
set_ecm_btns_state(btn_state)
|
||||
|
||||
|
||||
func set_fs_color(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
fs_active[fs_index] = null
|
||||
else:
|
||||
fs_active.erase(fs_index)
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func update_fs_colors():
|
||||
var fs_colors = fs_default_colors.duplicate()
|
||||
var color_ecm: Vector3 = ProjectSettings.get_setting('application/interfer/interfer_color', Vector3(0.58, 0.47, 0.51))
|
||||
var color_select: Vector3 = ProjectSettings.get_setting('application/interfer/select_color', Vector3(1.0, 1.0, 1.0))
|
||||
for key in fs_active.keys():
|
||||
fs_colors[key] = color_ecm
|
||||
for key in fs_selected.keys():
|
||||
fs_colors[key] = color_select
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
|
||||
|
||||
func unsel_fs_all(need_btns_off: bool):
|
||||
fs_selected.clear()
|
||||
update_fs_colors()
|
||||
if need_btns_off:
|
||||
set_ecm_btns_state(true)
|
||||
|
||||
|
||||
func set_ecm_btns_state(value: bool):
|
||||
var btns: Array = get_tree().get_nodes_in_group('группа-режим-помехи')
|
||||
for btn in btns:
|
||||
btn.set_pressed(false)
|
||||
btn.set_disabled(value)
|
||||
|
||||
|
||||
func get_fs_param(index: int) -> Array:
|
||||
var freq = (fs_freq[index / 4][0] + fs_freq[index / 4][1])/2
|
||||
var sector = (fs_sectors[index % 4][0] + fs_sectors[index % 4][1])/2 - 45.0
|
||||
if sector < 0:
|
||||
sector += 360.0
|
||||
var width = fs_freq[index / 4][1] - fs_freq[index / 4][0]
|
||||
return [sector, freq, width, index]
|
||||
|
||||
|
||||
func on_fs_selected(ecm):
|
||||
var fs_index = get_fs_index(ecm)
|
||||
fs_selected.clear()
|
||||
fs_selected[fs_index] = null
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func get_fs_index(ecm):
|
||||
var sector: int
|
||||
var band: int
|
||||
var angle: float = ecm.kni + 45.0
|
||||
if angle > 360.0:
|
||||
angle -= 360.0
|
||||
for sec in fs_sectors.values():
|
||||
if float(angle) >= sec[0] and float(angle) <= sec[1]:
|
||||
sector = fs_sectors.find_key(sec)
|
||||
for diap in fs_freq.values():
|
||||
if ecm.params.has('freq'):
|
||||
if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]:
|
||||
band = fs_freq.find_key(diap)
|
||||
var fs_index = band * 4 + sector
|
||||
return fs_index
|
||||
|
||||
@@ -25,10 +25,10 @@ col_red = Color(1, 0.568627, 0.431373, 0.239216)
|
||||
drag_scale_band = 0.05
|
||||
drag_scale_width = 0.5
|
||||
freq_high = 6000.0
|
||||
freq_low = 200.0
|
||||
freq_low = 400.0
|
||||
radius_center = Vector2(560, 560)
|
||||
radius_internal = 200.0
|
||||
radius_outter = 400.0
|
||||
radius_outter = 350.0
|
||||
strob_max_band = 15.538
|
||||
strob_max_width = 90.0
|
||||
strob_min_band = 0.1
|
||||
@@ -104,17 +104,6 @@ size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "Автомат"
|
||||
|
||||
[node name="btn_strob" parent="." instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
offset_left = 1034.0
|
||||
offset_top = 67.0
|
||||
offset_right = 1108.0
|
||||
offset_bottom = 121.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Строб"
|
||||
|
||||
[node name="btn_view" parent="." instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
offset_left = 874.0
|
||||
@@ -135,6 +124,38 @@ metadata/zoom = 4
|
||||
|
||||
[node name="canvas" parent="." instance=ExtResource("11_b6su4")]
|
||||
|
||||
[node name="btns_select" type="GridContainer" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1034.0
|
||||
offset_top = 65.0
|
||||
offset_right = 1108.0
|
||||
offset_bottom = 181.0
|
||||
|
||||
[node name="btn_strob" parent="btns_select" instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Строб"
|
||||
metadata/state = 0
|
||||
|
||||
[node name="btn_threats" parent="btns_select" instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Цель"
|
||||
pressed = true
|
||||
metadata/state = 1
|
||||
|
||||
[node name="btn_fs_sector" parent="btns_select" instance=ExtResource("8_k0iv2")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
tooltip_text = "Кнопка для выбора сектора при помощи клика мышкой"
|
||||
text = "Сектор"
|
||||
metadata/state = 2
|
||||
|
||||
[connection signal="drag_begin" from="." to="." method="_on_drag_begin"]
|
||||
[connection signal="drag_continue" from="." to="." method="_on_drag_continue"]
|
||||
[connection signal="pressed" from="btn_zoom" to="." method="_on_btn_scale_pressed"]
|
||||
|
||||
@@ -2,7 +2,6 @@ extends Node
|
||||
|
||||
## Представление помехи
|
||||
|
||||
|
||||
## Режимы помехи
|
||||
const ITERFER_MODE = {
|
||||
'off': ['Откл', ['freq', 'width']],
|
||||
@@ -20,26 +19,29 @@ const ITERFER_MODE = {
|
||||
'k1': ['K1', ['freq', 'width', 'dur', 'period']],
|
||||
'ozp1': ['ОЗП-1', ['freq', 'width']] }
|
||||
|
||||
const TYPE_TH = ['th','fs']
|
||||
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей
|
||||
const INTERFER_OFF = 'off'
|
||||
const STATE_TSMT = 5 ## Значение svk для цели, когда ответ ещё не получен
|
||||
var msg_ss: int = 0 ## счётчик сообщений
|
||||
var id_array: Array ## Массив id воздействий
|
||||
var thrs: Dictionary ## Словарь воздействия для целей, ключ - id воздействия
|
||||
var fs: Dictionary ## Словарь воздействий для секторов, ключ - id воздействия
|
||||
|
||||
|
||||
## Сеанс помехи
|
||||
class Interfer:
|
||||
var ss: int = 0 ## Счётчик сообщений.
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE].
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах.
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения.
|
||||
var params: = {} ## Параметры помехи.
|
||||
var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров).
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
|
||||
var tick_tx: int ## Тик время обновления цели, мс.
|
||||
var ss: int = 0 ## Счётчик сообщений.
|
||||
var ispp: int = 0 ## Индекс сеанса.
|
||||
var svk: = 0 ## Состояние сеанса. Ответ КАПСРПБ. Возможные значения в [param ITERFER_STATE].
|
||||
var krp: String = '' ## Тип помехи. Возможные значения в [param INTERFER_MODE].
|
||||
var powp: float = 0.0 ## Мощность излучения выраженная в процентах.
|
||||
var kni: = 0.0 ## Курсовой угол направления излучения.
|
||||
var params: = {} ## Параметры помехи.
|
||||
var get_params: Array[String] ## Запрос массива параметров (список запрошенных параметров).
|
||||
var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров.
|
||||
var tick_tx: int ## Тик время обновления цели, мс.
|
||||
var type_th: String = '' ## Тип объекта по которой поставлена помеха
|
||||
|
||||
func _to_string() -> String:
|
||||
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
|
||||
@@ -100,6 +102,7 @@ func _ready():
|
||||
signaller.connect('interfer_new', Callable(self, 'send_ecm').bind(unit))
|
||||
signaller.connect('interfer_off_all', Callable(self, 'on_interfer_off_all').bind(unit, ecms))
|
||||
|
||||
|
||||
# Проверяет состояние отправки пакета и если не доставлен, повторяет отправку
|
||||
func on_timer_check_state(unit, ecms, resend_timeout):
|
||||
var tick = Time.get_ticks_msec()
|
||||
@@ -137,46 +140,60 @@ func on_data_capsrpb_received(unit: capsrpb.CapsRpb, ecms: Dictionary):
|
||||
|
||||
|
||||
## Вызыватся, когда пользователь выбрал помеху и выбраны цели
|
||||
func on_interfer_create(btn, sel_threats, unit, ecms):
|
||||
func on_interfer_create(btn, sel_threats, fs_arr, _unit, ecms):
|
||||
for item in sel_threats:
|
||||
var ispp: int = 0
|
||||
var interfer_name: String = btn.get_meta('rfi_name')
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item.aoa
|
||||
var id = item.id
|
||||
param['freq'] = item.freq
|
||||
param['width'] = item.width
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = thrs.find_key(item.id)
|
||||
if key != null:
|
||||
ispp = key
|
||||
else:
|
||||
if interfer_name == 'off':
|
||||
return
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
if ecms.has(ispp):
|
||||
ecm = ecms[ispp]
|
||||
else:
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecms[ispp] = ecm
|
||||
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
||||
ecm.ss = msg_ss
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
||||
thrs[ispp] = item.id
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
interfer_create(btn, ecms, param, kni, id, thrs, item, TYPE_TH[0])
|
||||
|
||||
for item in fs_arr:
|
||||
var param: Dictionary = {}
|
||||
var kni: float = item[0]
|
||||
var id = item[3]
|
||||
param['freq'] = item[1]
|
||||
param['width'] = item[2]
|
||||
interfer_create(btn, ecms, param, kni, id, fs, item, TYPE_TH[1])
|
||||
|
||||
|
||||
func interfer_create(btn, ecms, param, kni, id, dict, item, type_th):
|
||||
var ispp: int = 0
|
||||
var interfer_name: String = btn.get_meta('rfi_name')
|
||||
if interfer_name == 'k1':
|
||||
param['dur'] = 1.0 # Необходимо добавить параметры управления
|
||||
param['period'] = 1.0 # Необходимо добавить параметры управления
|
||||
var key = dict.find_key(id)
|
||||
if key != null:
|
||||
ispp = key
|
||||
else:
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
return
|
||||
ispp = pop_id()
|
||||
if ispp == 0: return
|
||||
dict[ispp] = id
|
||||
msg_ss += 1
|
||||
var ecm: Interfer
|
||||
if ecms.has(ispp):
|
||||
ecm = ecms[ispp]
|
||||
else:
|
||||
ecm = Interfer.new()
|
||||
ecm.ispp = ispp
|
||||
ecms[ispp] = ecm
|
||||
ecm.svk = STATE_TSMT # Подготовка к передаче сообщения
|
||||
ecm.ss = msg_ss
|
||||
ecm.kni = kni
|
||||
ecm.krp = interfer_name
|
||||
ecm.params = param
|
||||
ecm.powp = 100.0 # Необходимо добавить управление мощностью
|
||||
ecm.type_th = type_th
|
||||
signaller.emit_signal('interfer_new', ecm)
|
||||
if interfer_name == 'off':
|
||||
signaller.emit_signal('interfer_off', ecm, ecms, thrs)
|
||||
push_id(ecm.ispp)
|
||||
thrs.erase(ispp)
|
||||
ecm.tick_tx = Time.get_ticks_msec()
|
||||
|
||||
|
||||
func send_ecm(ecm, unit):
|
||||
|
||||
@@ -27,20 +27,29 @@ signal full_screen(id: int)
|
||||
signal rto_threat_sel (th_id: int)
|
||||
|
||||
|
||||
## Вызывается, когда пользователь нажимает на значёк цели
|
||||
## [param th_id] - Отметка цели на экране
|
||||
signal bip_pressed (th_id: int)
|
||||
|
||||
|
||||
## Вызывается, когда пользователь снимает выделение с цели
|
||||
## [param th_id] - Отметка цели на экране
|
||||
signal rto_threat_unsel (th_id: int)
|
||||
|
||||
|
||||
## Вызывается, когда пользователь снимает выделение со всех целей
|
||||
signal rto_threat_unsel_all ()
|
||||
|
||||
|
||||
## Вызывается, когда пользователь выбирает помеху
|
||||
## [param btn] - Нажатая кнопка помехи.
|
||||
signal interfer_init (btn: PanelContainer)
|
||||
signal interfer_init (btn: PanelContainer, fs_arr: Array)
|
||||
|
||||
|
||||
## Вызывается, когда выбраны цели для постановки помех
|
||||
## [param btn] - Нажатая кнопка помехи.[br]
|
||||
## [param sel_threats] - Cписок целей.
|
||||
signal interfer_create (btn: PanelContainer, sel_threats: Array)
|
||||
signal interfer_create (btn: PanelContainer, sel_threats: Array, fs_arr: Array)
|
||||
|
||||
|
||||
## Вызывается, когда создалась новая помеха
|
||||
@@ -63,6 +72,11 @@ signal interfer_off_all ()
|
||||
signal interfer_selected (ecm: interfer.Interfer)
|
||||
|
||||
|
||||
## Вызывается, когда отключается выбираем помеху по сектору в таблице
|
||||
## [param ecm] - Выбранная помеха
|
||||
signal fs_selected(ecm: interfer.Interfer)
|
||||
|
||||
|
||||
## Вызывается при запросе изменения уровня детализации карты
|
||||
## [param zoom] - Вновь установленный уровень детализации
|
||||
signal zoom_changed(zoom: int)
|
||||
|
||||
@@ -55,6 +55,7 @@ func _ready() -> void:
|
||||
timer_check_lost.start(repsettings.ThreatParams.time_lost / 1000.0)
|
||||
signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(threats))
|
||||
signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel').bind(threats))
|
||||
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))
|
||||
|
||||
@@ -74,6 +75,12 @@ func on_timer_check_lost(time_lost: int, threats: Dictionary):
|
||||
func on_rto_threat_unsel(th_id, threats): threats[th_id].selected = false
|
||||
|
||||
|
||||
## Снимает выделение со всех целей
|
||||
func on_rto_threat_unsel_all(threats):
|
||||
for th in threats.values():
|
||||
signaller.emit_signal('rto_threat_unsel', th.id)
|
||||
|
||||
|
||||
## Выбирает цель, если нажать по отметке цели.
|
||||
func on_rto_threat_sel(th_id, threats): on_threat_selected(threats[th_id], threats)
|
||||
|
||||
@@ -86,14 +93,13 @@ func on_threat_selected(th, threats):
|
||||
|
||||
|
||||
## Формирует список выбранных целей для включения помехи
|
||||
func on_interfer_init(btn, threats):
|
||||
func on_interfer_init(btn, fs_arr, threats):
|
||||
var sel_threats: Array = []
|
||||
for threat in threats.values():
|
||||
if threat.selected:
|
||||
sel_threats.append(threat)
|
||||
if len(sel_threats):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats)
|
||||
|
||||
if len(sel_threats) or (len(fs_arr)):
|
||||
signaller.emit_signal('interfer_create', btn, sel_threats, fs_arr)
|
||||
|
||||
|
||||
## Производит приём целей
|
||||
|
||||
@@ -41,6 +41,7 @@ const float ant_band_r1_4[] = {450.0, 530.0};
|
||||
const float ant_band_r1_5[] = {500.0, 540.0};
|
||||
const float ant_band_r1_6[] = {550.0, 550.0};
|
||||
|
||||
uniform vec3 ant_band_c[28];
|
||||
|
||||
const float d4 = 90.0;
|
||||
const float ds = 1.0;
|
||||
@@ -63,14 +64,26 @@ void sector(inout vec4 c, vec2 uv, vec2 center, float a, float da, float r0, flo
|
||||
}
|
||||
|
||||
|
||||
void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, vec4 c0, vec4 c1)
|
||||
void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, inout int index)
|
||||
{
|
||||
float da = 180.0 / float(cnt);
|
||||
for (int i = -cnt; i <= cnt; i ++)
|
||||
{
|
||||
vec4 col;
|
||||
int j = index;
|
||||
if (i == 2)
|
||||
{
|
||||
index--;
|
||||
j = index - 3;
|
||||
}
|
||||
col.x = ant_band_c[j].x;
|
||||
col.y = ant_band_c[j].y;
|
||||
col.z = ant_band_c[j].z;
|
||||
index++;
|
||||
col.a = 0.5;
|
||||
float v = float(i & 1);
|
||||
vec4 col = v * c0 + (1.0f - v) * c1;
|
||||
sector(c, uv, p0, float(i) * da, da, r0, r1, col);
|
||||
vec4 color = v * col + (1.0f - v) * col;
|
||||
sector(c, uv, p0, float(i) * da, da, r0, r1, color);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,15 +99,15 @@ void fragment()
|
||||
ivec2 isz = textureSize(TEXTURE, 0);
|
||||
vec2 uv = UV * vec2(float(isz.x), float(isz.y)); // координаты текущей точки в пикселях
|
||||
COLOR = vec4(0, 0, 0, 0); //texture(TEXTURE, UV); // Цвет текущей точки
|
||||
|
||||
int index = 0;
|
||||
// Сетка антенн
|
||||
antenas(COLOR, uv, pc0, ant_band_count_0, ant_band_r0_0[mode], ant_band_r1_0[mode], color1, color0);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_1, ant_band_r0_1[mode], ant_band_r1_1[mode], color0, color1);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_2, ant_band_r0_2[mode], ant_band_r1_2[mode], color1, color0);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_3, ant_band_r0_3[mode], ant_band_r1_3[mode], color0, color1);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_4, ant_band_r0_4[mode], ant_band_r1_4[mode], color1, color0);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_5, ant_band_r0_5[mode], ant_band_r1_5[mode], color0, color1);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_6, ant_band_r0_6[mode], ant_band_r1_6[mode], color1, color0);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_0, ant_band_r0_0[mode], ant_band_r1_0[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_1, ant_band_r0_1[mode], ant_band_r1_1[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_2, ant_band_r0_2[mode], ant_band_r1_2[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_3, ant_band_r0_3[mode], ant_band_r1_3[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_4, ant_band_r0_4[mode], ant_band_r1_4[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_5, ant_band_r0_5[mode], ant_band_r1_5[mode], index);
|
||||
antenas(COLOR, uv, pc0, ant_band_count_6, ant_band_r0_6[mode], ant_band_r1_6[mode], index);
|
||||
}
|
||||
"
|
||||
|
||||
@@ -108,3 +121,4 @@ shader_parameter/radius_inner_0 = 200.0
|
||||
shader_parameter/radius_inner_1 = 480.0
|
||||
shader_parameter/radius_outter = 550.0
|
||||
shader_parameter/mode = 0
|
||||
shader_parameter/ant_band_c = PackedVector3Array(0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5, 0.38, 0.47, 0.51, 0.39, 0.44, 0.5)
|
||||
|
||||
Reference in New Issue
Block a user