Merge remote-tracking branch 'refs/remotes/Sasha/master'
# Conflicts: # scenes/button-flat/nine-patch-button.gd # scenes/frame-ecm-list/scroll-ecm-list.gd # scenes/grid-buttons-ecm/grid-buttons-ecm.tscn # scenes/настройки/настройки.tscn # scenes/работа/работа.gd # scripts/interfer.gd # scripts/settings.gd # scripts/trassa.gd
This commit is contained in:
@@ -2,11 +2,11 @@ class_name bip_ extends Control
|
||||
|
||||
var selected: bool
|
||||
|
||||
## Присваивает заданое значение видимости селектору.
|
||||
## Присваивает заданное значение видимости селектору.
|
||||
func set_track_visible(value: bool): $track.visible = value
|
||||
|
||||
|
||||
## Присваивает заданое значение видимости индикатору выполнения.
|
||||
## Присваивает заданное значение видимости индикатору выполнения.
|
||||
func set_ecm_visible(value: bool): $ecm_done.visible = value
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ func update(tick_rx: int):
|
||||
$bip.set_instance_shader_parameter('tick_update', tick_rx)
|
||||
|
||||
|
||||
## Функция присваивает заданое значение видимости селектору.
|
||||
## Присваивает заданое значение видимости селектору.
|
||||
func set_sel_visible(value: bool):
|
||||
selected = value
|
||||
$selector.visible = value
|
||||
|
||||
@@ -15,17 +15,19 @@ code = "shader_type canvas_item;
|
||||
|
||||
uniform vec4 color: source_color = vec4(1, 1, 1, 1);
|
||||
uniform vec4 color_up: source_color = vec4(1, 1, 1, 1); /* Цвет вспышки при обновлении */
|
||||
const float ds = 0.00725; /* Относительное расстояние на котором выполняется сглаживание краёв */
|
||||
const float dsr = 6.125;
|
||||
const float ds = 0.01; /* Относительное расстояние на котором выполняется сглаживание краёв */
|
||||
const float dsr = 10.0;
|
||||
const vec2 center = vec2(0.5, 0.5); /* Центр должен быть в (0.5, 0.5), но это не так */
|
||||
const float radius = 0.075 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */
|
||||
|
||||
uniform float speed: hint_range(-1024.0, 1024.0) = 0.0; /* Время вспышки при обновлении, c */
|
||||
uniform int ant_band_count_0 = 3;
|
||||
|
||||
const float ant_band_r0_0 = 0.3;
|
||||
const float ant_band_r0_0 = 0.27
|
||||
|
||||
const float ant_band_r1_0 = 0.4;
|
||||
;
|
||||
|
||||
const float ant_band_r1_0 = 0.47;
|
||||
|
||||
float smooth_px(float r, float R, float dss)
|
||||
{
|
||||
@@ -97,7 +99,7 @@ void fragment()
|
||||
shader = SubResource("Shader_60ho7")
|
||||
shader_parameter/color = Color(1, 1, 1, 0.968627)
|
||||
shader_parameter/color_up = Color(1, 1, 1, 0)
|
||||
shader_parameter/speed = 73.0
|
||||
shader_parameter/speed = -118.48
|
||||
shader_parameter/ant_band_count_0 = 3
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_hqs6j"]
|
||||
@@ -185,23 +187,14 @@ void fragment()
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lpmq6"]
|
||||
shader = SubResource("Shader_81bae")
|
||||
shader_parameter/color = Color(0.0862745, 0.560784, 0.72549, 0.886275)
|
||||
shader_parameter/color_up = Color(1, 1, 1, 0)
|
||||
shader_parameter/speed = -73.0
|
||||
shader_parameter/ant_band_count_0 = 9
|
||||
shader_parameter/ant_band_r0_0 = 0.45
|
||||
shader_parameter/ant_band_r1_0 = 0.5
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_h3oo7"]
|
||||
shader = SubResource("Shader_81bae")
|
||||
shader_parameter/color = Color(1, 0, 0, 1)
|
||||
shader_parameter/color_up = Color(1, 1, 1, 0)
|
||||
shader_parameter/speed = 66.064
|
||||
shader_parameter/ant_band_count_0 = 3
|
||||
shader_parameter/ant_band_r0_0 = 0.47
|
||||
shader_parameter/ant_band_r1_0 = 0.5
|
||||
shader_parameter/speed = 85.808
|
||||
shader_parameter/ant_band_count_0 = 4
|
||||
shader_parameter/ant_band_r0_0 = 0.3
|
||||
shader_parameter/ant_band_r1_0 = 0.45
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lkrha"]
|
||||
shader = ExtResource("3_2a1qb")
|
||||
@@ -213,51 +206,63 @@ shader_parameter/point_5 = Vector2(0.214, 0.125)
|
||||
shader_parameter/point_6 = Vector2(0.25, 0.125)
|
||||
shader_parameter/point_7 = Vector2(0.125, 0.214)
|
||||
shader_parameter/point_8 = Vector2(0.125, 0.25)
|
||||
shader_parameter/len = 0.264
|
||||
shader_parameter/speed = 71.0
|
||||
shader_parameter/len = 0.179
|
||||
shader_parameter/speed = 63.0
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_svd33"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lpmq6"]
|
||||
shader = SubResource("Shader_81bae")
|
||||
shader_parameter/color = Color(0.0784314, 0.501961, 0.701961, 0.917647)
|
||||
shader_parameter/color_up = Color(1, 1, 1, 0)
|
||||
shader_parameter/speed = 158.179
|
||||
shader_parameter/ant_band_count_0 = 9
|
||||
shader_parameter/ant_band_r0_0 = 0.27
|
||||
shader_parameter/ant_band_r1_0 = 0.45
|
||||
|
||||
[node name="threat" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
offset_left = -12.0
|
||||
offset_top = -12.0
|
||||
offset_right = 12.0
|
||||
offset_bottom = 12.0
|
||||
script = ExtResource("1_h7l70")
|
||||
|
||||
[node name="bip" type="Sprite2D" parent="."]
|
||||
material = SubResource("ShaderMaterial_qq6yq")
|
||||
position = Vector2(10, 10)
|
||||
scale = Vector2(20, 20)
|
||||
position = Vector2(12, 12)
|
||||
scale = Vector2(14, 14)
|
||||
texture = SubResource("PlaceholderTexture2D_xbpqf")
|
||||
|
||||
[node name="selector" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_fkqwb")
|
||||
scale = Vector2(20, 20)
|
||||
position = Vector2(-1, -1)
|
||||
scale = Vector2(26, 26)
|
||||
texture = SubResource("PlaceholderTexture2D_hqs6j")
|
||||
centered = false
|
||||
|
||||
[node name="recomendation" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_lpmq6")
|
||||
scale = Vector2(20, 20)
|
||||
texture = SubResource("PlaceholderTexture2D_hqs6j")
|
||||
centered = false
|
||||
offset = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="ecm_done" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_h3oo7")
|
||||
position = Vector2(-5, -5)
|
||||
scale = Vector2(30, 30)
|
||||
position = Vector2(-2, -2)
|
||||
scale = Vector2(28, 28)
|
||||
texture = SubResource("PlaceholderTexture2D_hqs6j")
|
||||
centered = false
|
||||
offset = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="track" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_lkrha")
|
||||
position = Vector2(10, 10)
|
||||
scale = Vector2(26, 26)
|
||||
position = Vector2(12, 12)
|
||||
scale = Vector2(34, 34)
|
||||
texture = SubResource("PlaceholderTexture2D_svd33")
|
||||
|
||||
[node name="recomendation" type="Sprite2D" parent="."]
|
||||
visible = false
|
||||
material = SubResource("ShaderMaterial_lpmq6")
|
||||
scale = Vector2(24, 24)
|
||||
texture = SubResource("PlaceholderTexture2D_hqs6j")
|
||||
offset = Vector2(0.5, 0.5)
|
||||
|
||||
[connection signal="gui_input" from="." to="." method="_on_bip_gui_input"]
|
||||
|
||||
@@ -38,9 +38,10 @@ var _pressed: = false
|
||||
@export var disabled: bool = false:
|
||||
set(val):
|
||||
disabled = val
|
||||
$button.set_disabled(val)
|
||||
$back.disabled = val
|
||||
$state.modulate.a = 0.5 if val else 1.0
|
||||
if is_inside_tree():
|
||||
$button.set_disabled(val)
|
||||
$back.disabled = val
|
||||
$state.modulate.a = 0.5 if val else 1.0
|
||||
|
||||
|
||||
@export var pressed: bool = false:
|
||||
@@ -59,7 +60,7 @@ var _pressed: = false
|
||||
$button.set_toggle_mode(val)
|
||||
|
||||
|
||||
@export var font_size: int = true:
|
||||
@export var font_size: int = 15:
|
||||
set(val):
|
||||
$button.add_theme_font_size_override('theme_override_font_sizes/font_size', val)
|
||||
|
||||
|
||||
@@ -2,7 +2,9 @@ class_name Diagram extends Sprite2D
|
||||
|
||||
const NUM_OF_RANGE = 7
|
||||
const NUM_OF_DIRECTIONS = 4
|
||||
var fs_default_colors: Array ## Цвета по умолчанию для блоков ФС.
|
||||
var fs_default_colors: Array[Color] ## Цвета по умолчанию для блоков ФС.
|
||||
|
||||
@export var SecZap: PackedScene
|
||||
|
||||
func _ready() -> void:
|
||||
signaller.connect('map_mode_changed', Callable(self, 'set_view_mode'))
|
||||
@@ -11,20 +13,24 @@ func _ready() -> void:
|
||||
|
||||
func sv(val: float) -> float: return val / ($строб.scale.x / 2.0) * 0.125
|
||||
|
||||
func set_canvas_rotation(val: float) -> void: material.set('shader_parameter/rotation', val)
|
||||
func set_strob_visible(val: bool): $строб.visible = val
|
||||
func set_strob_center(val: Vector2): $строб.position = val
|
||||
func set_strob_dir(val: float): $строб.material.set('shader_parameter/dir', val)
|
||||
func set_strob_color(val: Color): $строб.material.set('shader_parameter/color', val)
|
||||
func set_strob_width(val: float): $строб.material.set('shader_parameter/width', val)
|
||||
func set_strob_band(val: float): $строб.material.set('shader_parameter/band', val / 125.0)
|
||||
func set_strob_radius(val: float): $строб.material.set('shader_parameter/radius', sv(val))
|
||||
func set_strob_dir(val: float): $строб.set_instance_shader_parameter('dir', val)
|
||||
func set_strob_width(val: float): $строб.set_instance_shader_parameter('width', val)
|
||||
func set_strob_band(val: float): $строб.set_instance_shader_parameter('band', val / 125.0)
|
||||
func set_strob_radius(val: float): $строб.set_instance_shader_parameter('radius', sv(val))
|
||||
func set_strob_color(val: Color): $строб.set_instance_shader_parameter('color', val)
|
||||
|
||||
func get_strob_center() -> Vector2: return $строб.position
|
||||
func get_strob_visible() -> bool: return $строб.visible
|
||||
func get_strob_width() -> float: return $строб.material.get('shader_parameter/width')
|
||||
func get_strob_band() -> float: return $строб.material.get('shader_parameter/band') * 125.0
|
||||
func get_strob_radius() -> float: return $строб.material.get('shader_parameter/radius') * 125.0
|
||||
func get_strob_center() -> Vector2: return $строб.position
|
||||
func get_strob_visible() -> bool: return $строб.visible
|
||||
func get_strob_dir() -> float: return $строб.get_instance_shader_parameter('dir')
|
||||
func get_strob_width() -> float: return $строб.get_instance_shader_parameter('width')
|
||||
func get_strob_band() -> float: return $строб.get_instance_shader_parameter('band') * 125.0
|
||||
func get_strob_radius() -> float: return $строб.get_instance_shader_parameter('radius') * 125.0
|
||||
func get_strob_color() -> float: return $строб.get_instance_shader_parameter('color')
|
||||
|
||||
func get_canvas_rotation() -> float: return material.get('shader_parameter/rotation')
|
||||
func get_radius_outter() -> float: return material.get('shader_parameter/radius_outter')
|
||||
func get_radius_inner_0() -> float: return material.get('shader_parameter/radius_inner_0')
|
||||
func get_radius_inner_1() -> float: return material.get('shader_parameter/radius_inner_1')
|
||||
@@ -32,6 +38,51 @@ func get_radius_inner_1() -> float: return material.get('shader_parameter/radius
|
||||
func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val)
|
||||
|
||||
|
||||
## Добавляет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета.[br]
|
||||
## [param szv.x] - Центральная частота (198...546).[br]
|
||||
## [param szv.w] - Ширина диапазона (198...546).[br]
|
||||
## [param szv.y] - Угол центра (0...360).[br]
|
||||
## [param szv.z] - Ширина по углу (0...360).[br]
|
||||
func add_seczap(id: int, szv: Vector4):
|
||||
var seczap: = SecZap.instantiate()
|
||||
seczap.name = StringName('SECZAP%d' % id)
|
||||
seczap.position = $строб.position
|
||||
seczap.set_instance_shader_parameter('dir', szv.y - 90.0)
|
||||
seczap.set_instance_shader_parameter('width', szv.z)
|
||||
seczap.set_instance_shader_parameter('band', sv(szv.w))
|
||||
seczap.set_instance_shader_parameter('radius', sv(szv.x))
|
||||
add_child(seczap)
|
||||
|
||||
|
||||
## Удаляет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета[br]
|
||||
func remove_seczap(id: int):
|
||||
var seczap: = get_node_or_null('SECZAP%d' % id)
|
||||
if not seczap: return
|
||||
remove_child(seczap)
|
||||
seczap.queue_free()
|
||||
|
||||
|
||||
## Изменяет сектор запрета[br]
|
||||
## [param id] - Индекс сектора запрета[br]
|
||||
## [param szv.x] - Центральная частота[br]
|
||||
## [param szv.w] - Ширина диапазона[br]
|
||||
## [param szv.y] - Угол центра[br]
|
||||
## [param szv.z] - Ширина по углу[br]
|
||||
func set_seczap(id: int, szv: Vector4):
|
||||
var seczap: = get_node('SECZAP%d' % id)
|
||||
seczap.set_instance_shader_parameter('dir', szv.y)
|
||||
seczap.set_instance_shader_parameter('width', szv.z)
|
||||
seczap.set_instance_shader_parameter('band', sv(szv.w))
|
||||
seczap.set_instance_shader_parameter('radius', sv(szv.x))
|
||||
|
||||
|
||||
func set_seczap_color(id: int, color: Color):
|
||||
var seczap: = get_node('SECZAP%d' % id)
|
||||
seczap.set_instance_shader_parameter('color', color)
|
||||
|
||||
|
||||
func set_view_mode(val: int):
|
||||
if val == 1:
|
||||
$строб.hide()
|
||||
@@ -42,8 +93,10 @@ func set_view_mode(val: int):
|
||||
|
||||
## Закрашивание по умолчанию блоков ФС цветами из настроек.
|
||||
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 color0: Color = ProjectSettings.get_setting('application/interfer/default_color0', Color(0.38, 0.47, 0.51, 1.0))
|
||||
var color1: Color = ProjectSettings.get_setting('application/interfer/default_color1', Color(0.39, 0.44, 0.50, 1.0))
|
||||
color0 *= Color(1.0, 1.0, 1.0, 0.0)
|
||||
color1 *= Color(1.0, 1.0, 1.0, 0.0)
|
||||
var col_arr: Array = [color0, color1]
|
||||
var col = false
|
||||
for i in NUM_OF_RANGE:
|
||||
|
||||
@@ -11,19 +11,13 @@ size = Vector2(1600, 1200)
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lniyv"]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("4_obn6s")
|
||||
shader_parameter/color = Color(1, 1, 1, 0.168627)
|
||||
shader_parameter/clip_color = Color(1, 0.5, 0.5, 1)
|
||||
shader_parameter/width = 45.0
|
||||
shader_parameter/band = 0.02
|
||||
shader_parameter/radius = 0.08
|
||||
shader_parameter/dir = 0.0
|
||||
shader_parameter/inner_clip = 0.045
|
||||
|
||||
[node name="canvas" type="Sprite2D"]
|
||||
material = ExtResource("1_newdt")
|
||||
texture = SubResource("PlaceholderTexture2D_2bft1")
|
||||
centered = false
|
||||
script = ExtResource("2_8xjuy")
|
||||
SecZap = ExtResource("3_tgnog")
|
||||
|
||||
[node name="строб" parent="." instance=ExtResource("3_tgnog")]
|
||||
material = SubResource("ShaderMaterial_lniyv")
|
||||
|
||||
@@ -5,18 +5,16 @@
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xo5or"]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("1_e0gfn")
|
||||
shader_parameter/color = Color(1, 1, 1, 0.168627)
|
||||
shader_parameter/clip_color = Color(1, 0.5, 0.5, 1)
|
||||
shader_parameter/width = 45.0
|
||||
shader_parameter/band = 0.02
|
||||
shader_parameter/radius = 0.08
|
||||
shader_parameter/dir = 0.0
|
||||
shader_parameter/inner_clip = 0.045
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2lkm8"]
|
||||
|
||||
[node name="sector" type="Sprite2D"]
|
||||
material = SubResource("ShaderMaterial_xo5or")
|
||||
instance_shader_parameters/band = 0.02
|
||||
instance_shader_parameters/color = Color(1, 1, 1, 0.188235)
|
||||
instance_shader_parameters/inner_clip = 0.045
|
||||
instance_shader_parameters/radius = 0.08
|
||||
instance_shader_parameters/width = 45.0
|
||||
position = Vector2(610, 600)
|
||||
scale = Vector2(1108, 1108)
|
||||
texture = SubResource("PlaceholderTexture2D_2lkm8")
|
||||
|
||||
@@ -20,7 +20,7 @@ const INTERFER_STATE = {
|
||||
5: '' }
|
||||
|
||||
|
||||
## Состояние выполнения сеанса помехи
|
||||
## Названия помех
|
||||
const INTERFER_NAMES = {
|
||||
'off': 'Откл',
|
||||
'mchm1': 'МЧМ-1',
|
||||
@@ -46,6 +46,7 @@ const COLUMN_NAME = 1
|
||||
const COLUMN_AOA = 2
|
||||
const COLUMN_STATE = 3
|
||||
|
||||
var course = 0.0 ## Курс корабля
|
||||
|
||||
func on_rto_threat_unsel(_th_id): $table.clear_rows_selected()
|
||||
|
||||
@@ -88,6 +89,8 @@ func _ready():
|
||||
interfer.connect('interfer_recommendate', Callable(self, 'on_interfer_recommendate'))
|
||||
$table.connect('row_pressed', Callable(self, 'on_row_pressed'))
|
||||
call_deferred('init_table')
|
||||
var unit_nav = network.get_unit_instance('навигация')
|
||||
unit_nav.connect('data_received', on_navi_data_received)
|
||||
|
||||
|
||||
func init_table():
|
||||
@@ -148,7 +151,10 @@ func map_th_to_row(ecm) -> Array:
|
||||
row[COLUMN_NAME] = ''
|
||||
if INTERFER_NAMES.has(ecm.krp):
|
||||
row[COLUMN_NAME] = '%s' % INTERFER_NAMES[ecm.krp]
|
||||
row[COLUMN_AOA] = '%s' % ecm.kni
|
||||
var aoa = ecm.kni + course
|
||||
if aoa > 360.0:
|
||||
aoa -= 360.0
|
||||
row[COLUMN_AOA] = '%5.1f' % aoa
|
||||
row[COLUMN_STATE] = ''
|
||||
if INTERFER_STATE.has(ecm.svk):
|
||||
row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk]
|
||||
@@ -159,7 +165,10 @@ func on_interfer_recommendate(ecm):
|
||||
var sel_rows: Array
|
||||
$table.get_selected_rows(sel_rows)
|
||||
if not len(sel_rows): return
|
||||
var row = sel_rows[0]
|
||||
var sel_ecm = $table.get_node_user_data(0, sel_rows[0])
|
||||
if ecm == sel_ecm:
|
||||
signaller.emit_signal('interfer_selected', ecm)
|
||||
|
||||
|
||||
func on_navi_data_received(data: Dictionary):
|
||||
course = data.get('k', 0.0)
|
||||
|
||||
@@ -89,7 +89,8 @@ func map_th_to_row(th) -> Array:
|
||||
row.resize(TABLE_COLUMN_PARAM.size())
|
||||
var i_col: int = 0
|
||||
for param_name in TABLE_COLUMN_PARAM:
|
||||
row[i_col] = '%s' % th.get(param_name)
|
||||
var val = th.get(param_name)
|
||||
row[i_col] = '%0.1f' % val if val is float else '%s' % val
|
||||
i_col += 1
|
||||
return row
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "Откл."
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "off"
|
||||
|
||||
[node name="btn_p12" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -24,7 +23,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "МЧМ-1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "mchm1"
|
||||
|
||||
[node name="btn_p16" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -34,7 +32,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "СРН-И1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "srni1"
|
||||
|
||||
[node name="btn_p15" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -44,7 +41,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "СРН-М2"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "srnm2"
|
||||
|
||||
[node name="btn_p18" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -54,7 +50,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "СРН-GPS"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "srngps"
|
||||
|
||||
[node name="btn_p14" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -64,7 +59,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ПД-М4"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "pdm4"
|
||||
|
||||
[node name="btn_p13" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -74,7 +68,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ПД-М2"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "pdm2"
|
||||
|
||||
[node name="btn_p11" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -84,7 +77,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ЛЧМ-1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "lchm1"
|
||||
|
||||
[node name="btn_p17" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -94,7 +86,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ЛЧМ-2"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "lchm2"
|
||||
|
||||
[node name="btn_p10" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -104,7 +95,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ПД-М4С"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "pdm4s"
|
||||
|
||||
[node name="btn_p9" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -114,7 +104,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ПД-ЧМ"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "pdchm"
|
||||
|
||||
[node name="btn_p8" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -124,7 +113,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "СВ-И1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "svi1"
|
||||
|
||||
[node name="btn_p7" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -134,7 +122,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "K1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "k1"
|
||||
|
||||
[node name="btn_p6" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -144,7 +131,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "СВ-М2"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "svm2"
|
||||
|
||||
[node name="btn_p5" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -154,7 +140,6 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ОЗП-1"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "ozp1"
|
||||
|
||||
[node name="btn_p19" parent="." groups=["группа-режим-помехи"] instance=ExtResource("1_oy80h")]
|
||||
@@ -164,5 +149,4 @@ size_flags_vertical = 3
|
||||
strips_rotation = 30.0
|
||||
text = "ЕПРЛС"
|
||||
disabled = true
|
||||
font_size = 1
|
||||
metadata/rfi_name = "eprls"
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://8ll27id5ajq1"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://8ll27id5ajq1"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_151rh"]
|
||||
[ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_4vyhj"]
|
||||
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/контроль/bort-afsp.tscn" id="3_d7iti"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_yhnwg"]
|
||||
script/source = "extends Timer
|
||||
|
||||
func _ready(): wait_time = ProjectSettings.get_setting('application/config/unit_rr_request_period')
|
||||
"
|
||||
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_d7iti"]
|
||||
|
||||
[node name="pribor_afsp" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -19,17 +13,20 @@ offset_right = 70.0
|
||||
offset_bottom = 30.0
|
||||
scale = Vector2(1, 0.9)
|
||||
script = ExtResource("1_151rh")
|
||||
prefix_path = "DeviceDescription[DeviceName]"
|
||||
this_afsp_name = "Устройство РР левого борта"
|
||||
unit_name = &"уарэп-афсп-левый"
|
||||
settings_path_to_url = "Адрес АФСП левого борта"
|
||||
settings_path_to_wait_time = "Период опроса состояния АФСП, секунды"
|
||||
metadata/DeviceName = &"Устройство РР левого борта"
|
||||
|
||||
[node name="request" type="HTTPRequest" parent="."]
|
||||
use_threads = true
|
||||
script = ExtResource("2_4vyhj")
|
||||
projsettings_path_left = "application/config/Адрес АФСП левого борта"
|
||||
projsettings_path_right = "application/config/Адрес АФСП правого борта"
|
||||
request_url = null
|
||||
|
||||
[node name="timer" type="Timer" parent="request"]
|
||||
autostart = true
|
||||
script = SubResource("GDScript_yhnwg")
|
||||
|
||||
[node name="bort" parent="." instance=ExtResource("3_d7iti")]
|
||||
layout_mode = 0
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://5uv1idl3lqet"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://5uv1idl3lqet"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_tfses"]
|
||||
[ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_miwrd"]
|
||||
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/контроль/bort-afsp.tscn" id="3_xpxb5"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_yhnwg"]
|
||||
script/source = "extends Timer
|
||||
|
||||
func _ready(): wait_time = ProjectSettings.get_setting('application/config/unit_rr_request_period')
|
||||
"
|
||||
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_xpxb5"]
|
||||
|
||||
[node name="pribor_afsp" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -19,17 +13,20 @@ offset_right = 81.0
|
||||
offset_bottom = 108.0
|
||||
scale = Vector2(1, 0.9)
|
||||
script = ExtResource("1_tfses")
|
||||
prefix_path = "DeviceDescription[DeviceName]"
|
||||
this_afsp_name = "Устройство РР правого борта"
|
||||
unit_name = &"уарэп-афсп-правый"
|
||||
settings_path_to_url = "Адрес АФСП правого борта"
|
||||
settings_path_to_wait_time = "Период опроса состояния АФСП, секунды"
|
||||
metadata/DeviceName = &"Устройство РР правого борта"
|
||||
|
||||
[node name="request" type="HTTPRequest" parent="."]
|
||||
use_threads = true
|
||||
script = ExtResource("2_miwrd")
|
||||
projsettings_path_left = "application/config/Адрес АФСП левого борта"
|
||||
projsettings_path_right = "application/config/Адрес АФСП правого борта"
|
||||
request_url = null
|
||||
|
||||
[node name="timer" type="Timer" parent="request"]
|
||||
autostart = true
|
||||
script = SubResource("GDScript_yhnwg")
|
||||
|
||||
[node name="bort" parent="." instance=ExtResource("3_xpxb5")]
|
||||
layout_mode = 0
|
||||
|
||||
@@ -1,26 +1,57 @@
|
||||
@tool
|
||||
class_name pribor_afsp extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
@export var prefix_path: String = 'DeviceDescripton[DeviceName]'
|
||||
@export var prefix_path: String = '' ## Должно быть в JSON
|
||||
@export var this_afsp_name: String = '' ## Должно быть в JSON
|
||||
@export var unit_name: StringName= '' ## Должно быть в settings.gd
|
||||
@export var settings_path_to_url: String = '' ## Должно быть в ProjectSettings
|
||||
@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings
|
||||
|
||||
static var json_conv: JSON = JSON.new()
|
||||
static var node_maper = load('res://scenes/контроль/node-maper.gd')
|
||||
var ctrl_pos = 0
|
||||
|
||||
# SystemName: "gen" DevList - там состояние связи с генератором по кан шине
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
ProjectSettings.connect('settings_changed', on_settings_chaged)
|
||||
on_settings_chaged()
|
||||
|
||||
|
||||
func on_settings_chaged():
|
||||
$request.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path_to_url)
|
||||
$request/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
|
||||
tools.allways($request.request_url != null)
|
||||
|
||||
|
||||
func _on_request_completed(result, _response_code, headers, body: PackedByteArray):
|
||||
|
||||
var unit_instance: = network.get_unit_instance(unit_name)
|
||||
|
||||
if result != 0:
|
||||
var rs = $request.get_result_string(result)
|
||||
log.error('\"%s\"' % rs)
|
||||
if unit_instance.online:
|
||||
unit_instance.online = false
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
return
|
||||
|
||||
var json_str: String = body.get_string_from_utf8()
|
||||
if not json_str:
|
||||
push_error('не удаётся получить строку utf8 из данных (%s)' % headers)
|
||||
if unit_instance.online:
|
||||
unit_instance.online = false
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
return
|
||||
|
||||
var rc = json_conv.parse(json_str)
|
||||
var rc: = json_conv.parse(json_str)
|
||||
if rc != Error.OK:
|
||||
var err = json_conv.get_error_message()
|
||||
var err: = json_conv.get_error_message()
|
||||
push_error('разбор json прерван - \"%s\" (%s)' % [err, headers])
|
||||
if unit_instance.online:
|
||||
unit_instance.online = false
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
return
|
||||
|
||||
var pp = []
|
||||
@@ -32,12 +63,18 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
|
||||
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
|
||||
return
|
||||
|
||||
var this_afsp_name: StringName = $bort.get_meta('DeviceName', '')
|
||||
var received_afsp_name: StringName = ret_val[0]
|
||||
|
||||
if this_afsp_name != received_afsp_name:
|
||||
# TODO: Сюда попадаем, когда приходит от другого борта
|
||||
#push_error('не известное устройство: \"%s\", ожидадось: \"%s\"' % [received_afsp_name, this_afsp_name])
|
||||
return
|
||||
|
||||
unit_instance.rx_tick = Time.get_ticks_msec()
|
||||
if not unit_instance.online:
|
||||
unit_instance.online = true
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
|
||||
for child in $bort.get_node('konverter/grid').get_children():
|
||||
node_maper.map_value_to_item(json_conv.data, child, 'value0')
|
||||
node_maper.map_value_to_item(json_conv.data, child, 'value1')
|
||||
@@ -63,4 +100,3 @@ func _on_item_pressed(block_a: Control):
|
||||
var metas = block_a.get_meta_list()
|
||||
for n in metas:
|
||||
var v = block_a.get_meta(n)
|
||||
print_debug('%s:%s' % [n, v])
|
||||
|
||||
@@ -1,29 +1,55 @@
|
||||
@tool
|
||||
class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd'
|
||||
|
||||
@export var prefix_path: String = 'DeviceDescripton[DeviceName]'
|
||||
@export var prefix_path: String = '' ## Должно быть в JSON
|
||||
@export var this_bpo1_name: String = '' ## Должно быть в JSON
|
||||
@export var this_bpo2_name: String = '' ## Должно быть в JSON
|
||||
@export var unit_name1: StringName= '' ## Должно быть в settings.gd
|
||||
@export var unit_name2: StringName= '' ## Должно быть в settings.gd
|
||||
@export var settings_path1_to_url: String = '' ## Должно быть в ProjectSettings
|
||||
@export var settings_path2_to_url: String = '' ## Должно быть в ProjectSettings
|
||||
@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings
|
||||
|
||||
|
||||
static var json_conv: JSON = JSON.new()
|
||||
static var node_maper = load('res://scenes/контроль/node-maper.gd')
|
||||
var ctrl_pos = 110
|
||||
|
||||
|
||||
const bort_to_node_name = {
|
||||
'Устройство РР левого борта': 'grid_bpo_a1',
|
||||
'Устройство РР правого борта': 'grid_bpo_a2'}
|
||||
var bort_to_node_name = {}
|
||||
var bort_to_unit_name = {}
|
||||
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
ProjectSettings.connect('settings_changed', on_settings_changed)
|
||||
on_settings_changed()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func on_settings_changed():
|
||||
bort_to_node_name.merge({this_bpo1_name: 'grid_bpo_a1', this_bpo2_name: 'grid_bpo_a2'}, true)
|
||||
bort_to_unit_name.merge({this_bpo1_name: unit_name1, this_bpo2_name: unit_name2})
|
||||
$request1.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path1_to_url)
|
||||
$request1/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
|
||||
$request2.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path2_to_url)
|
||||
$request2/timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
|
||||
assert($request1.request_url != null)
|
||||
assert($request2.request_url != null)
|
||||
|
||||
|
||||
func _on_request_completed(result, _response_code, headers, body: PackedByteArray):
|
||||
if result != 0:
|
||||
var rs = $request.get_result_string(result)
|
||||
log.error('\"%s\"' % rs)
|
||||
var rs = $request1.get_result_string(result)
|
||||
push_error('\"%s\"' % rs)
|
||||
return
|
||||
|
||||
var json_str: String = body.get_string_from_utf8()
|
||||
var json_str: = body.get_string_from_utf8()
|
||||
if not json_str:
|
||||
push_error('не удаётся получить строку из utf8-данных (%s)' % headers)
|
||||
return
|
||||
|
||||
var rc = json_conv.parse(json_str)
|
||||
var rc: = json_conv.parse(json_str)
|
||||
if rc != Error.OK:
|
||||
var err = json_conv.get_error_message()
|
||||
push_error('разбор json прерван - \"%s\" (%s)' % [err, headers])
|
||||
@@ -39,10 +65,50 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
|
||||
return
|
||||
|
||||
if not bort_to_node_name.has(ret_val[0]):
|
||||
push_error('не известное устройство: \"%s\"' % ret_val[0])
|
||||
return
|
||||
|
||||
var node_name = bort_to_node_name[ret_val[0]]
|
||||
var bort_node = get_node(node_name)
|
||||
|
||||
var unit_name = bort_to_unit_name[ret_val[0]]
|
||||
var unit_instance = network.get_unit_instance(unit_name)
|
||||
unit_instance.rx_tick = Time.get_ticks_msec()
|
||||
if not unit_instance.online:
|
||||
unit_instance.online = true
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
|
||||
for item in bort_node.get_children():
|
||||
node_maper.map_value_to_item(json_conv.data, item, 'state')
|
||||
|
||||
var items = get_tree().get_nodes_in_group('управляется-по-шине-1')
|
||||
for node in items:
|
||||
if node.state == 1:
|
||||
$yas_bpo_a1.state = 1
|
||||
break
|
||||
items = get_tree().get_nodes_in_group('управляется-по-шине-2')
|
||||
for node in items:
|
||||
if node.state == 1:
|
||||
$yas_bpo_a2.state = 1
|
||||
break
|
||||
items = get_tree().get_nodes_in_group('потребитель-питания')
|
||||
for node in items:
|
||||
if node.state == 1:
|
||||
$mod_pit_g1.state = 1
|
||||
break
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
if node1 is Label:
|
||||
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.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
node1.set_meta("tooltip_set", true)
|
||||
for child in node1.get_children():
|
||||
find_labels(child)
|
||||
|
||||
@@ -13,6 +13,14 @@ offset_top = 150.0
|
||||
offset_right = 115.0
|
||||
offset_bottom = 150.0
|
||||
script = ExtResource("1_bhc4e")
|
||||
prefix_path = "DeviceDescription[DeviceName]"
|
||||
this_bpo1_name = "Устройство БПО левого борта"
|
||||
this_bpo2_name = "Устройство БПО правого борта"
|
||||
unit_name1 = &"уарэп-бпо-1"
|
||||
unit_name2 = &"уарэп-бпо-2"
|
||||
settings_path1_to_url = "Адрес БПО левого борта"
|
||||
settings_path2_to_url = "Адрес БПО правого борта"
|
||||
settings_path_to_wait_time = "Период опроса состояния БПО, секунды"
|
||||
|
||||
[node name="mod_pit_g1" parent="." instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
@@ -43,63 +51,63 @@ offset_right = 498.0
|
||||
offset_bottom = 320.0
|
||||
columns = 4
|
||||
|
||||
[node name="kanal1" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal1" parent="grid_bpo_a1" groups=["потребитель-питания"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 1"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']"
|
||||
|
||||
[node name="kanal2" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal2" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 2"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[1]['TestPassed']"
|
||||
|
||||
[node name="kanal3" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal3" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 3"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[2]['TestPassed']"
|
||||
|
||||
[node name="kanal4" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal4" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 4"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[3]['TestPassed']"
|
||||
|
||||
[node name="kanal5" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal5" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 5"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[4]['TestPassed']"
|
||||
|
||||
[node name="kanal6" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal6" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 6"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[5]['TestPassed']"
|
||||
|
||||
[node name="kanal7" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal7" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 7"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[6]['TestPassed']"
|
||||
|
||||
[node name="kanal8" parent="grid_bpo_a1" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal8" parent="grid_bpo_a1" groups=["потребитель-питания", "управляется-по-шине-1"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 8"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[7]['TestPassed']"
|
||||
|
||||
[node name="yas_bpo_a1" parent="." instance=ExtResource("3_jcpjs")]
|
||||
[node name="yas_bpo_a1" parent="." groups=["потребитель-питания"] instance=ExtResource("3_jcpjs")]
|
||||
offset_left = 500.0
|
||||
offset_top = 175.0
|
||||
offset_right = 550.0
|
||||
@@ -126,63 +134,63 @@ offset_right = 498.0
|
||||
offset_bottom = 520.0
|
||||
columns = 4
|
||||
|
||||
[node name="kanal1" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal1" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 1"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']"
|
||||
|
||||
[node name="kanal2" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal2" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 2"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[1]['TestPassed']"
|
||||
|
||||
[node name="kanal3" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal3" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 3"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[2]['TestPassed']"
|
||||
|
||||
[node name="kanal4" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal4" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 4"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[3]['TestPassed']"
|
||||
|
||||
[node name="kanal5" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal5" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 5"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[4]['TestPassed']"
|
||||
|
||||
[node name="kanal6" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal6" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 6"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[5]['TestPassed']"
|
||||
|
||||
[node name="kanal7" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal7" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 7"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[6]['TestPassed']"
|
||||
|
||||
[node name="kanal8" parent="grid_bpo_a2" instance=ExtResource("2_jp6m0")]
|
||||
[node name="kanal8" parent="grid_bpo_a2" groups=["потребитель-питания", "управляется-по-шине-2"] instance=ExtResource("2_jp6m0")]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 7
|
||||
size_flags_vertical = 7
|
||||
fname = "Канал 8"
|
||||
metadata/state = "SelfTest[0].SystemList[0].DevList[7]['TestPassed']"
|
||||
|
||||
[node name="yas_bpo_a2" parent="." instance=ExtResource("3_jcpjs")]
|
||||
[node name="yas_bpo_a2" parent="." groups=["потребитель-питания"] instance=ExtResource("3_jcpjs")]
|
||||
offset_left = 500.0
|
||||
offset_top = 375.0
|
||||
offset_right = 550.0
|
||||
@@ -191,14 +199,22 @@ show_rname = false
|
||||
self_size = Vector2i(50, 145)
|
||||
fname = "Яч. связи"
|
||||
|
||||
[node name="request" type="HTTPRequest" parent="."]
|
||||
[node name="request1" type="HTTPRequest" parent="."]
|
||||
use_threads = true
|
||||
script = ExtResource("4_crej3")
|
||||
projsettings_path_left = "application/config/Адрес БПО левого борта"
|
||||
projsettings_path_right = "application/config/Адрес БПО правого борта"
|
||||
request_url = null
|
||||
|
||||
[node name="timer" type="Timer" parent="request"]
|
||||
[node name="timer" type="Timer" parent="request1"]
|
||||
autostart = true
|
||||
|
||||
[connection signal="request_completed" from="request" to="." method="_on_request_completed"]
|
||||
[connection signal="timeout" from="request/timer" to="request" method="_on_request_timer"]
|
||||
[node name="request2" type="HTTPRequest" parent="."]
|
||||
use_threads = true
|
||||
script = ExtResource("4_crej3")
|
||||
|
||||
[node name="timer" type="Timer" parent="request2"]
|
||||
autostart = true
|
||||
|
||||
[connection signal="request_completed" from="request1" to="." method="_on_request_completed"]
|
||||
[connection signal="timeout" from="request1/timer" to="request1" method="_on_request_timer"]
|
||||
[connection signal="request_completed" from="request2" to="." method="_on_request_completed"]
|
||||
[connection signal="timeout" from="request2/timer" to="request2" method="_on_request_timer"]
|
||||
|
||||
@@ -15,10 +15,10 @@ const constants_k: Dictionary = {
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_1': 0x0,
|
||||
'ATT_UM_6': 0x7,
|
||||
'ATT_UM_7': 0x7,
|
||||
'POWER_UM': 85,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'ATT_UM_6': 0x3,
|
||||
'ATT_UM_7': 0x2,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
@@ -55,9 +55,9 @@ var block_kasseta_y5_prd_config_k: = {
|
||||
}
|
||||
# Основные переменные
|
||||
var start_litera: int = 1
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
var ug_work_3: int = 0
|
||||
var ug_work_1: int = 3 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 2 ## Аттенюация усилителей мощности
|
||||
var ug_work_3: int = 0 ## Аттенюация усилителей мощности
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_k_module: Object
|
||||
var unit_prd_k: Object
|
||||
@@ -77,6 +77,7 @@ var control_results_k: Dictionary = {
|
||||
}
|
||||
|
||||
var test_control_k = preload('res://scripts/pribor-prd.gd')
|
||||
var ctrl_pos = 30
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -86,6 +87,7 @@ func _ready() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
@@ -166,7 +168,7 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func power_fill(pow_dic: Dictionary) -> void:
|
||||
func power_fill(pow_dic: Dictionary, fs_result: Dictionary) -> void:
|
||||
#if not control_prd_k.block_kasseta_y5_config.yau07 or not control_prd_k.block_kasseta_y5_config.ukp1 or not control_prd_k.block_kasseta_y5_config.ukp2:
|
||||
#return
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
@@ -179,6 +181,9 @@ func power_fill(pow_dic: Dictionary) -> void:
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta == 'um_7' and not fs_result.fs_1: return
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_6: return
|
||||
if powamp_meta in ['um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13'] and not fs_result.fs_7: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < constants_k.POWER_THRESHOLD:
|
||||
@@ -228,7 +233,7 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
else:
|
||||
result_dic.fs_7 = false
|
||||
|
||||
power_fill(power_dic)
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
@@ -242,3 +247,19 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
if node1 is Label:
|
||||
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.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
node1.set_meta("tooltip_set", true)
|
||||
for child in node1.get_children():
|
||||
find_labels(child)
|
||||
|
||||
@@ -13,10 +13,10 @@ const constants_n = {
|
||||
'TEMP_THRESHOLD': 70,
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_2': 0x7,
|
||||
'ATT_UM_3': 0x7,
|
||||
'POWER_UM': 70,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'ATT_UM_2': 0x2,
|
||||
'ATT_UM_3': 0x3,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
@@ -28,7 +28,7 @@ const PRIBOR_CONFIG_N := {
|
||||
}
|
||||
# Конфигурация частот и ширин для каждого ФС
|
||||
const FS_PARAMS_N := {
|
||||
2: {'freq': 900.0, 'width': 100.0},
|
||||
2: {'freq': 932.0, 'width': 100.0},
|
||||
3: {'freq': 1157.0, 'width': 100.0}
|
||||
}
|
||||
enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 }
|
||||
@@ -50,8 +50,8 @@ var block_kasseta_y5_prd_config_n: = {
|
||||
|
||||
# Основные переменные
|
||||
var start_litera: int = 2
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
var ug_work_1: int = 2 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 3 ## Аттенюация усилителей мощности
|
||||
# Флаги и таймеры
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_n_module: Object
|
||||
@@ -69,8 +69,7 @@ var control_results_n: Dictionary = {
|
||||
'fs_3': 2,
|
||||
}
|
||||
var test_control_n = preload('res://scripts/pribor-prd.gd')
|
||||
|
||||
|
||||
var ctrl_pos = 0
|
||||
################################
|
||||
func on_state_mashine() -> void:
|
||||
control_prd_n.state_control_machine()
|
||||
@@ -83,6 +82,7 @@ func _ready() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
@@ -159,7 +159,7 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func power_fill(pow_dic: Dictionary) -> void:
|
||||
func power_fill(pow_dic: Dictionary, fs_result: Dictionary) -> void:
|
||||
#if not control_prd_n.block_kasseta_y5_config.yau07 or not control_prd_n.block_kasseta_y5_config.ukp1 or not control_prd_n.block_kasseta_y5_config.ukp2:
|
||||
#return
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
@@ -169,6 +169,8 @@ func power_fill(pow_dic: Dictionary) -> void:
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return
|
||||
if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < constants_n.POWER_THRESHOLD:
|
||||
@@ -207,14 +209,14 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
$kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR
|
||||
$dou2_A5.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR
|
||||
else:
|
||||
result_dic.fs_2 = false
|
||||
result_dic.fs_2 = 0
|
||||
if result_dic.fs_3 == 1:
|
||||
$kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if result_dic.dkm_3 else STATE_VAL.ERROR
|
||||
$dou3_A6.state = STATE_VAL.GOOD if result_dic.dou_3 else STATE_VAL.ERROR
|
||||
else:
|
||||
result_dic.fs_3 = false
|
||||
result_dic.fs_3 = 0
|
||||
|
||||
power_fill(power_dic)
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
@@ -228,3 +230,19 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
if node1 is Label:
|
||||
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.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
node1.set_meta("tooltip_set", true)
|
||||
for child in node1.get_children():
|
||||
find_labels(child)
|
||||
|
||||
@@ -13,10 +13,10 @@ const constants_v = {
|
||||
'TEMP_THRESHOLD': 70,
|
||||
'POWER_THRESHOLD': 40,
|
||||
'RAY_DOU_NUM': 0x3,
|
||||
'ATT_UM_4': 0x7,
|
||||
'ATT_UM_5': 0x7,
|
||||
'POWER_UM': 75,
|
||||
'TIMER_DELAY': 5.0,
|
||||
'ATT_UM_4': 0x2,
|
||||
'ATT_UM_5': 0x3,
|
||||
'POWER_UM': 100,
|
||||
'TIMER_DELAY': 10.0,
|
||||
'STATE_MASHINE_TIMER': 0.3,
|
||||
}
|
||||
# Конфигурация параметров для каждого прибора
|
||||
@@ -50,8 +50,8 @@ var block_kasseta_y5_prd_config_v: = {
|
||||
|
||||
# Основные переменные
|
||||
var start_litera: int = 4
|
||||
var ug_work_1: int = 0
|
||||
var ug_work_2: int = 0
|
||||
var ug_work_1: int = 2 ## Аттенюация усилителей мощности
|
||||
var ug_work_2: int = 3 ## Аттенюация усилителей мощности
|
||||
# Флаги и таймеры
|
||||
var mashine_timer: Timer = Timer.new()
|
||||
var prd_v_module: Object
|
||||
@@ -69,6 +69,7 @@ var control_results_v: Dictionary = {
|
||||
'fs_5': 2,
|
||||
}
|
||||
var test_control_v = preload('res://scripts/pribor-prd.gd')
|
||||
var ctrl_pos = 70
|
||||
|
||||
|
||||
func on_state_mashine() -> void:
|
||||
@@ -82,6 +83,7 @@ func _ready() -> void:
|
||||
initialize_connections()
|
||||
setup_timer()
|
||||
set_default_state()
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func initialize_connections() -> void:
|
||||
@@ -159,9 +161,7 @@ func on_mode_changed(in_tree: bool) -> void:
|
||||
mashine_timer.start()
|
||||
|
||||
|
||||
func power_fill(pow_dic: Dictionary) -> void:
|
||||
#if not control_prd_v.block_kasseta_y5_config.yau07 or not control_prd_v.block_kasseta_y5_config.ukp1 or not control_prd_v.block_kasseta_y5_config.ukp2:
|
||||
#return
|
||||
func power_fill(pow_dic: Dictionary, fs_result: Dictionary) -> void:
|
||||
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
|
||||
for i_powapm in power_amplifier:
|
||||
var powamp_meta: String = i_powapm.get_meta('um')
|
||||
@@ -169,6 +169,8 @@ func power_fill(pow_dic: Dictionary) -> void:
|
||||
if pow_dic[powamp_meta].size() < 6:
|
||||
status = STATE_VAL.ERROR
|
||||
else:
|
||||
if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_4: return
|
||||
if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_5: return
|
||||
i_powapm.value0 = pow_dic[powamp_meta]
|
||||
for i_p in pow_dic[powamp_meta]:
|
||||
if i_p < constants_v.POWER_THRESHOLD:
|
||||
@@ -207,13 +209,13 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
$kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if result_dic.dkm_5 else STATE_VAL.ERROR
|
||||
$dou5_A6.state = STATE_VAL.GOOD if result_dic.dou_5 else STATE_VAL.ERROR
|
||||
else:
|
||||
result_dic.fs_5 = false
|
||||
result_dic.fs_5 = 0
|
||||
if result_dic.fs_4 == 1:
|
||||
$kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if result_dic.dkm_4 else STATE_VAL.ERROR
|
||||
$dou4_A5.state = STATE_VAL.GOOD if result_dic.dou_4 else STATE_VAL.ERROR
|
||||
else:
|
||||
result_dic.fs_4 = false
|
||||
power_fill(power_dic)
|
||||
result_dic.fs_4 = 0
|
||||
power_fill(power_dic, result_dic)
|
||||
|
||||
var result = true
|
||||
for device in result_dic.values():
|
||||
@@ -227,3 +229,19 @@ func on_control_result(result_dic: Dictionary, power_dic: Dictionary) -> void:
|
||||
else:
|
||||
$control_result.text = 'Прибор ПРД-%s неисправен' % name_prd
|
||||
$control_result.add_theme_color_override('font_color', Color.RED)
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
if node1 is Label:
|
||||
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.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
node1.set_meta("tooltip_set", true)
|
||||
for child in node1.get_children():
|
||||
find_labels(child)
|
||||
|
||||
@@ -5,18 +5,21 @@ enum STATE_VAL {NONE = 0, GOOD = 1, ERROR = 2}
|
||||
const DEV_LIST = ['00:1f.6', '07:00.0', '08:00.0', '0b:00.0']
|
||||
const USB_TRACKERBALL = '13ba:0018'
|
||||
const REVFF = '(rev ff)'
|
||||
var ctrl_pos = 100
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var unit_uf = network.get_unit_instance('уарэп-эмс')
|
||||
var unit_uf: = network.get_unit_instance('уарэп-эмс')
|
||||
unit_uf.connect('line_changed', on_line_changed)
|
||||
on_timer.bind(unit_uf)
|
||||
control_vk()
|
||||
on_line_changed(unit_uf)
|
||||
find_labels(self)
|
||||
|
||||
|
||||
func on_timer(unit_uf: unit.Unit):
|
||||
func on_timer(unit_name: StringName):
|
||||
var unit_uf = network.get_unit_instance(unit_name)
|
||||
status_uf() # отслеживание состояния прибора
|
||||
if unit_uf.online: # проверка ЯУ, внутреннего коммутатора и ИП-5Б
|
||||
control_ems(unit_uf.status) # проверка ЭМС ячеек
|
||||
@@ -73,6 +76,8 @@ func control_vk() -> void:
|
||||
else:
|
||||
$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.ERROR
|
||||
|
||||
$ref_uf/ref_bu1/ref_A8_BU.state = STATE_VAL.GOOD ## заглушка для зеленения ВК-110
|
||||
|
||||
|
||||
func control_ems(status: Array) -> void:
|
||||
$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
|
||||
@@ -98,3 +103,19 @@ func status_uf() -> void:
|
||||
$lbl_header2.text = 'Прибор не исправен'
|
||||
$lbl_header2.modulate = Color.RED
|
||||
$lbl_header2.visible = true
|
||||
|
||||
|
||||
func find_labels(node1: Node):
|
||||
if node1 is Label:
|
||||
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.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
node1.set_meta("tooltip_set", true)
|
||||
for child in node1.get_children():
|
||||
find_labels(child)
|
||||
|
||||
@@ -155,3 +155,6 @@ horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="timer" type="Timer" parent="."]
|
||||
autostart = true
|
||||
|
||||
[connection signal="timeout" from="timer" to="." method="on_timer" binds= [&"уарэп-эмс"]]
|
||||
|
||||
@@ -33,6 +33,7 @@ offset_left = 88.0
|
||||
offset_top = 319.0
|
||||
offset_right = 343.0
|
||||
offset_bottom = 749.0
|
||||
tooltip_text = "Ящик - 11, Позиция - 3"
|
||||
script = ExtResource("4_v0lil")
|
||||
unit_name = "уарэп-спт25-1"
|
||||
fname = "СПТ-25-230-400-3"
|
||||
@@ -67,6 +68,7 @@ offset_left = 392.0
|
||||
offset_top = 320.0
|
||||
offset_right = 642.0
|
||||
offset_bottom = 750.0
|
||||
tooltip_text = "Ящик - 11, Позиция - 2"
|
||||
script = ExtResource("4_v0lil")
|
||||
unit_name = "уарэп-спт25-2"
|
||||
fname = "СПТ-25-230-400-3"
|
||||
|
||||
@@ -106,7 +106,7 @@ vertical_alignment = 1
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 6
|
||||
tooltip_text = "Позиционное обозначение"
|
||||
tooltip_text = "Ящик - 11, Позиция - 1"
|
||||
mouse_filter = 0
|
||||
theme_override_font_sizes/font_size = 22
|
||||
horizontal_alignment = 2
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
extends 'res://scenes/контроль/элемент-я.gd'
|
||||
|
||||
|
||||
func on_line_changed(unit0):
|
||||
if not unit0.online:
|
||||
func on_line_changed(unit_instance):
|
||||
if not unit_instance.online:
|
||||
disable_all()
|
||||
|
||||
|
||||
|
||||
48
scenes/tabs-switch/lbl_ready.gd
Normal file
48
scenes/tabs-switch/lbl_ready.gd
Normal file
@@ -0,0 +1,48 @@
|
||||
extends Label
|
||||
# Используем более понятные имена переменных
|
||||
const STATUS_GOOD := {"text": "Исправно", "color": Color.GREEN, "font_color": Color.BLACK}
|
||||
const STATUS_BAD := {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE}
|
||||
var _is_uf_status_initialized: bool = false
|
||||
var is_prd_operational: bool = true
|
||||
var is_uf_operational: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
tooltip_text = 'Нет связи с приборами комплекса'
|
||||
for prd_module in prd.prd_dict.values():
|
||||
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(prd_module))
|
||||
var unit_uf: = network.get_unit_instance('уарэп-эмс')
|
||||
unit_uf.connect('data_received', Callable(self, 'on_uf_status_receive'))
|
||||
add_theme_color_override("font_color", Color.BLACK)
|
||||
|
||||
|
||||
func on_serviceability_changed(unit_prd_module: Object) -> void:
|
||||
var check_service: bool = true
|
||||
for prd_module in prd.prd_dict.values():
|
||||
if prd_module.unit_yau07.online:
|
||||
if not unit_prd_module.serviceability:
|
||||
check_service = false
|
||||
if check_service != is_prd_operational:
|
||||
is_prd_operational = check_service
|
||||
_update_serviceability_display()
|
||||
|
||||
|
||||
func _update_serviceability_display() -> void:
|
||||
var status := STATUS_GOOD if (is_uf_operational and is_prd_operational) else STATUS_BAD
|
||||
text = status.text
|
||||
modulate = status.color
|
||||
tooltip_text = 'Результаты обобщенного признака работоспособности изделия'
|
||||
add_theme_color_override("font_color", status.font_color)
|
||||
|
||||
|
||||
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 check_service: bool = KEMS_B and EMS_B_1 and EMS_B_2 and IP27B
|
||||
if not _is_uf_status_initialized or check_service != is_uf_operational:
|
||||
is_uf_operational = check_service
|
||||
_update_serviceability_display()
|
||||
signaller.emit_signal('update_uf_serviceability', check_service)
|
||||
_is_uf_status_initialized = true
|
||||
1
scenes/tabs-switch/lbl_ready.gd.uid
Normal file
1
scenes/tabs-switch/lbl_ready.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b5ykwyk5vpi6
|
||||
@@ -9,21 +9,17 @@ const TAB_TOSIGNAL_NAME = {
|
||||
5: 'режим_настройки' }
|
||||
|
||||
|
||||
func on_ems2_hide_pressed(state): set_tab_hidden(4, state)
|
||||
func _on_tab_changed(tab) -> void: signaller.emit_signal(TAB_TOSIGNAL_NAME[tab])
|
||||
func _on_button_trenazh_toggled(toggled_mode: bool) -> void: signaller.emit_signal('режим_тренаж', toggled_mode)
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
network.logger_page = $Журнал
|
||||
signaller.connect('ems2_hide_pressed', on_ems2_hide_pressed)
|
||||
ProjectSettings.connect('settings_changed', on_setting_changed)
|
||||
|
||||
|
||||
func on_ems2_hide_pressed(state):
|
||||
set_tab_hidden(4, state)
|
||||
|
||||
|
||||
func _on_tab_changed(tab) -> void:
|
||||
if TAB_TOSIGNAL_NAME.has(tab):
|
||||
signaller.emit_signal(TAB_TOSIGNAL_NAME[tab])
|
||||
|
||||
|
||||
func on_setting_changed():
|
||||
var ext_cu = ProjectSettings.get_setting('application/config/Внешнее управление', false)
|
||||
get_parent().get_node('remote_control').visible = ext_cu
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=14 format=3 uid="uid://3slb0i3pvowc"]
|
||||
[gd_scene load_steps=20 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"]
|
||||
@@ -7,6 +7,8 @@
|
||||
[ext_resource type="PackedScene" uid="uid://dab6loryocc73" path="res://scenes/эмс/эмс.tscn" id="5_u71bh"]
|
||||
[ext_resource type="PackedScene" uid="uid://bnptm4rlp60dq" path="res://scenes/настройки/настройки.tscn" id="6_i8iv3"]
|
||||
[ext_resource type="PackedScene" uid="uid://musb21x2u0xs" path="res://scenes/эмс2/эмс2.tscn" id="6_rsg03"]
|
||||
[ext_resource type="Script" uid="uid://b5ykwyk5vpi6" path="res://scenes/tabs-switch/lbl_ready.gd" id="8_tidwt"]
|
||||
[ext_resource type="Script" uid="uid://roajn6c6wvc1" path="res://scenes/tabs-switch/тренаж_режим.gd" id="9_41d34"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tidwt"]
|
||||
|
||||
@@ -20,6 +22,17 @@
|
||||
|
||||
[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)
|
||||
|
||||
[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
|
||||
offset_bottom = 1200.0
|
||||
@@ -56,7 +69,7 @@ visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 3
|
||||
|
||||
[node name="ЭМС2" parent="tab_switch" instance=ExtResource("6_rsg03")]
|
||||
[node name="ЭМС ТГ" parent="tab_switch" instance=ExtResource("6_rsg03")]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
metadata/_tab_index = 4
|
||||
@@ -73,12 +86,13 @@ offset_right = 1600.0
|
||||
offset_bottom = 27.0
|
||||
tooltip_text = "Готовность аппаратуры к работе"
|
||||
mouse_filter = 0
|
||||
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||
theme_override_font_sizes/font_size = 14
|
||||
theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22")
|
||||
text = "Исправно"
|
||||
text = "Нет связи"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
script = ExtResource("8_tidwt")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="remote_control" type="Label" parent="."]
|
||||
visible = false
|
||||
@@ -95,4 +109,23 @@ text = "Внешнее управление"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="тренаж_режим" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1404.0
|
||||
offset_right = 1501.0
|
||||
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")
|
||||
toggle_mode = true
|
||||
text = "Тренаж"
|
||||
script = ExtResource("9_41d34")
|
||||
|
||||
[connection signal="tab_changed" from="tab_switch" to="tab_switch" method="_on_tab_changed"]
|
||||
[connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenaj_toggled"]
|
||||
|
||||
11
scenes/tabs-switch/тренаж_режим.gd
Normal file
11
scenes/tabs-switch/тренаж_режим.gd
Normal file
@@ -0,0 +1,11 @@
|
||||
extends Button
|
||||
|
||||
func _ready():
|
||||
connect("toggled", Callable(self, "_on_button_toggled"))
|
||||
|
||||
|
||||
func _on_button_toggled(mode: bool):
|
||||
if mode:
|
||||
tooltip_text = "Режим \"Тренаж\" задействован\nТекущее состояние: включено"
|
||||
else:
|
||||
tooltip_text = "Задейстовать режим \"Тренаж\"\nТекущее состояние: отключено"
|
||||
1
scenes/tabs-switch/тренаж_режим.gd.uid
Normal file
1
scenes/tabs-switch/тренаж_режим.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://roajn6c6wvc1
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -3,6 +3,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://cj1f2uy6qfvki" path="res://scenes/tilemap/23900.png" id="1_v0nwa"]
|
||||
|
||||
[node name="23900" type="Sprite2D"]
|
||||
position = Vector2(0.0, 0.0)
|
||||
rotation = 4.71239
|
||||
scale = Vector2(0.0257427, 0.0257427)
|
||||
scale = Vector2(0.496934, 0.496934)
|
||||
texture = ExtResource("1_v0nwa")
|
||||
|
||||
@@ -23,6 +23,8 @@ const TILE_REQUEST_NAME: = 'tile_request_%d'
|
||||
@export_range(0, 20, 1) var min_zoom_level: int = 0
|
||||
@export_range(0, 20, 1) var max_zoom_level_server: int = 20
|
||||
@export_color_no_alpha() var back_color: = Color.BLACK
|
||||
@export var show_ship_radius: bool = true
|
||||
@export var ship_radius_km: float = 8.0
|
||||
@onready var scale_label: String
|
||||
@onready var coordinates_label: String
|
||||
@onready var threat_mark: PackedScene = load("res://scenes/tilemap/threat.tscn")
|
||||
@@ -34,6 +36,8 @@ var is_centered: = false
|
||||
var is_out_border1: = true
|
||||
var is_out_border2: = true
|
||||
var threat_markers := {}
|
||||
var zoom_timer: Timer
|
||||
var zoom_action: String
|
||||
|
||||
@export var animation_time: float = 0.1:
|
||||
set(val):
|
||||
@@ -86,7 +90,6 @@ var image: = Image.new()
|
||||
var image_load_proc: Callable
|
||||
var now: = 0
|
||||
var visible_marks_count: = 0
|
||||
var map_server_available: = false
|
||||
var border1: ImageTexture
|
||||
var border2: ImageTexture
|
||||
|
||||
@@ -129,6 +132,12 @@ func _ready() -> void:
|
||||
img.set_pixel(0, 1, Color.CORAL)
|
||||
border2 = ImageTexture.create_from_image(img)
|
||||
|
||||
zoom_timer = Timer.new()
|
||||
add_child(zoom_timer)
|
||||
zoom_timer.one_shot = false
|
||||
zoom_timer.wait_time = 0.1
|
||||
zoom_timer.timeout.connect(_on_zoom_timeout)
|
||||
|
||||
_xyz.z = min_zoom_level
|
||||
image_type = 'png'
|
||||
$canvas.connect('mouse_entered', func(): _rollover = true)
|
||||
@@ -152,7 +161,7 @@ func on_data_received(coords: Dictionary) -> void:
|
||||
if not is_centered:
|
||||
return
|
||||
if coords.has_all(['latitude', 'longitude']):
|
||||
set_coordinates(coords['longitude'], coords['latitude'])
|
||||
set_coordinates(coords['longitude'], coords['latitude'], coords['k'])
|
||||
|
||||
|
||||
func _on_resize() -> void:
|
||||
@@ -252,6 +261,7 @@ func multiply_zoom(multiplier: float, pivot: Vector2) -> void:
|
||||
var p2: = screen_to_world(_xyz, pivot)
|
||||
_xyz.x -= p2.x - p1.x
|
||||
_xyz.y -= p2.y - p1.y
|
||||
update_scale_label()
|
||||
|
||||
|
||||
func increment_zoom(increment: float, pivot: Vector2) -> void:
|
||||
@@ -260,6 +270,7 @@ func increment_zoom(increment: float, pivot: Vector2) -> void:
|
||||
var p2: = screen_to_world(_xyz, pivot)
|
||||
_xyz.x -= p2.x - p1.x
|
||||
_xyz.y -= p2.y - p1.y
|
||||
update_scale_label()
|
||||
|
||||
|
||||
func set_zoom(zoom: float, pivot: Vector2) -> void:
|
||||
@@ -268,6 +279,7 @@ func set_zoom(zoom: float, pivot: Vector2) -> void:
|
||||
var p2: = screen_to_world(_xyz, pivot)
|
||||
_xyz.x -= p2.x - p1.x
|
||||
_xyz.y -= p2.y - p1.y
|
||||
update_scale_label()
|
||||
|
||||
|
||||
func _draw() -> void:
|
||||
@@ -302,6 +314,9 @@ func _draw() -> void:
|
||||
if is_out_border2 and _dragging:
|
||||
draw_texture_rect(border2, Rect2(p1, p2), false, Color.WHITE, false)
|
||||
|
||||
if should_draw_ship_radius():
|
||||
draw_ship_radius()
|
||||
|
||||
|
||||
func _clean_all() -> void:
|
||||
_queue.clear()
|
||||
@@ -366,21 +381,21 @@ func _process(delta) -> void:
|
||||
|
||||
|
||||
func _response(result, code, _headers: Array, body: PackedByteArray, req, tile: Tile) -> void:
|
||||
|
||||
var unit_instance = network.get_unit_instance('уарэп-карта')
|
||||
_req_count -= 1
|
||||
remove_child(req)
|
||||
req.queue_free()
|
||||
|
||||
if result != HTTPRequest.RESULT_SUCCESS:
|
||||
if map_server_available:
|
||||
map_server_available = false
|
||||
emit_signal('map_server_offline')
|
||||
if unit_instance.online:
|
||||
unit_instance.online = false
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
_queue[tile.i] = tile
|
||||
return
|
||||
|
||||
if not map_server_available:
|
||||
map_server_available = true
|
||||
emit_signal('map_server_online')
|
||||
if not unit_instance.online:
|
||||
unit_instance.online = true
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
|
||||
if code == 404:
|
||||
push_error('на сервере нет \"%s\"' % tile.url)
|
||||
@@ -390,6 +405,11 @@ func _response(result, code, _headers: Array, body: PackedByteArray, req, tile:
|
||||
push_error('не удалось получить изображение (неверный формат?) из \"%s\"' % tile.url)
|
||||
return
|
||||
|
||||
unit_instance.rx_tick = Time.get_ticks_msec()
|
||||
if not unit_instance.online:
|
||||
unit_instance.online = true
|
||||
unit_instance.emit_signal('line_changed', unit_instance)
|
||||
|
||||
tile.texture = ImageTexture.create_from_image(image)
|
||||
_cache[tile.i] = tile
|
||||
|
||||
@@ -677,7 +697,7 @@ func clear() -> void:
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func set_coordinates(lon: float, lat: float) -> void:
|
||||
func set_coordinates(lon: float, lat: float, course: float) -> void:
|
||||
var anim: Animation = $player.get_animation('goto')
|
||||
var new_pos: Vector2 = lonlat_to_world(lon, lat)
|
||||
anim.track_insert_key(0, 0, _xyz.x)
|
||||
@@ -690,7 +710,8 @@ func set_coordinates(lon: float, lat: float) -> void:
|
||||
ship_instance = ship_mark.instantiate()
|
||||
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.position = lonlat_to_world(lon, lat)
|
||||
ship_instance.rotation_degrees = course - 90
|
||||
|
||||
|
||||
func blend_mask(val: bool) -> void:
|
||||
@@ -699,7 +720,7 @@ func blend_mask(val: bool) -> void:
|
||||
|
||||
|
||||
func update_coordinates_label(lon: float, lat: float) -> void:
|
||||
coordinates_label = 'Координаты:\nNS:%f\nEW: %f' % [lat, lon]
|
||||
coordinates_label = 'Координаты:\nNS:%f\nEW:%f' % [lat, lon]
|
||||
signaller.emit_signal('update_coordinates_map', coordinates_label)
|
||||
|
||||
|
||||
@@ -731,3 +752,80 @@ func _on_threat_lost(th) -> void:
|
||||
var target = get_parent().get_node(str(th.id))
|
||||
if target:
|
||||
target.queue_free()
|
||||
|
||||
|
||||
func zoom_in() -> void:
|
||||
if _xyz.z >= max_zoom_level:
|
||||
return
|
||||
var center: Vector2 = $canvas.size / 2.0
|
||||
increment_zoom(zoom_step, center)
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func zoom_out() -> void:
|
||||
if _xyz.z <= min_zoom_level:
|
||||
return
|
||||
var center: Vector2 = $canvas.size / 2.0
|
||||
increment_zoom(-zoom_step, center)
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func _on_zoom_plus_button_down() -> void:
|
||||
zoom_action = "in"
|
||||
perform_zoom()
|
||||
zoom_timer.start(0.3)
|
||||
|
||||
|
||||
func _on_zoom_minus_button_down() -> void:
|
||||
zoom_action = "out"
|
||||
perform_zoom()
|
||||
zoom_timer.start(0.3)
|
||||
|
||||
|
||||
func _on_zoom_button_up() -> void:
|
||||
zoom_action = ""
|
||||
zoom_timer.stop()
|
||||
|
||||
|
||||
func _on_zoom_timeout():
|
||||
perform_zoom()
|
||||
zoom_timer.wait_time = 0.1
|
||||
|
||||
|
||||
func perform_zoom():
|
||||
if zoom_action != "":
|
||||
if zoom_action == "in":
|
||||
zoom_in()
|
||||
else:
|
||||
zoom_out()
|
||||
update_scale_label()
|
||||
|
||||
|
||||
# Вычисление для радиуса в мировых координатах
|
||||
func get_ship_radius_world() -> float:
|
||||
if not _marks.has(ship_id):
|
||||
return 0.0
|
||||
var ship_world_pos = _marks[ship_id].position
|
||||
var ship_lonlat = world_to_lonlat(ship_world_pos.x, ship_world_pos.y)
|
||||
var earth_radius_km = 6371.0
|
||||
var distance_deg = (ship_radius_km / earth_radius_km) * (180.0 / PI) / cos(deg_to_rad(ship_lonlat.y))
|
||||
var east_lon = ship_lonlat.x + distance_deg
|
||||
var east_point_world = lonlat_to_world(east_lon, ship_lonlat.y)
|
||||
return abs(east_point_world.x - ship_world_pos.x)
|
||||
|
||||
|
||||
func should_draw_ship_radius() -> bool:
|
||||
if not show_ship_radius or not _marks.has(ship_id):
|
||||
return false
|
||||
return _xyz.z >= 11
|
||||
|
||||
|
||||
func draw_ship_radius() -> void:
|
||||
var ship_world_pos = _marks[ship_id].position
|
||||
var ship_screen_pos = world_to_screen(ship_world_pos)
|
||||
var radius_world = get_ship_radius_world()
|
||||
var radius_point_world = Vector2(ship_world_pos.x + radius_world, ship_world_pos.y)
|
||||
var radius_point_screen = world_to_screen(radius_point_world)
|
||||
var radius_screen = ship_screen_pos.distance_to(radius_point_screen)
|
||||
#draw_arc(ship_screen_pos, radius_screen, 0, TAU, 64, Color.ORANGE, 2.0) # отрисовка контура
|
||||
draw_circle(ship_screen_pos, radius_screen, Color.ORANGE_RED * Color(1, 1, 1, 0.1)) # отрисовка заливки
|
||||
|
||||
@@ -7,6 +7,7 @@ func on_threats_changed(th: Object, msg: String): log.message(Logger.INFO, '%s:
|
||||
func on_parse_error(unit_inst, msg: String): log.message(Logger.ERROR, '%s: %s' % [unit_inst.name, msg])
|
||||
func on_interfer_off(ecm, msg: String): log.message(Logger.INFO, '%s: %s' % [msg, ecm.to_string()])
|
||||
func on_set_program_mode(msg: String): log.message(Logger.INFO, msg)
|
||||
func on_mode_trenazh(val: bool): log.message(Logger.INFO, 'Режим \"Тренаж\" %s' % ['отменён', 'задейсвован'][int(val)])
|
||||
|
||||
func on_interfer_new(ecm, msg: String):
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
@@ -33,6 +34,7 @@ func _ready() -> void:
|
||||
signaller.conn(signaller.режим_эмс, Callable(log, 'info').bind('Программа в режиме \"ЭМС\"'))
|
||||
signaller.conn(signaller.режим_журнал, Callable(log, 'info').bind('Программа в режиме \"Журнал\"'))
|
||||
signaller.conn(signaller.режим_контроль, Callable(log, 'info').bind('Программа в режиме \"Контроль\"'))
|
||||
signaller.conn(signaller.режим_тренаж, Callable(self, 'on_mode_trenazh'))
|
||||
|
||||
|
||||
func _on_clear_button_down() -> void:
|
||||
|
||||
@@ -36,6 +36,7 @@ colors = {
|
||||
8: Color(0.91, 0, 0, 1),
|
||||
16: Color(0.868077, 0.247988, 0.62812, 1)
|
||||
}
|
||||
max_lines_count = 256
|
||||
|
||||
[node name="btn_save" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
@@ -112,6 +113,12 @@ button_pressed = true
|
||||
text = "Контроль"
|
||||
metadata/filter = "Контроль"
|
||||
|
||||
[node name="CheckBox_SCROLL" type="CheckBox" parent="filtrs"]
|
||||
layout_mode = 2
|
||||
button_pressed = true
|
||||
text = "Прокручивать до конца"
|
||||
metadata/filter = "Контроль"
|
||||
|
||||
[connection signal="button_down" from="btn_save" to="." method="_on_btn_save_button_down"]
|
||||
[connection signal="button_down" from="btn_clear" to="." method="_on_clear_button_down" flags=3]
|
||||
[connection signal="canceled" from="dlg_file" to="." method="_on_dlg_file_confirmed"]
|
||||
@@ -124,3 +131,4 @@ metadata/filter = "Контроль"
|
||||
[connection signal="pressed" from="filtrs/CheckBox_FATAL" to="." method="_on_check_box_pressed"]
|
||||
[connection signal="pressed" from="filtrs/CheckBox_THREAT" to="." method="_on_check_box_pressed"]
|
||||
[connection signal="pressed" from="filtrs/CheckBox_CONTROL" to="." method="_on_check_box_pressed"]
|
||||
[connection signal="toggled" from="filtrs/CheckBox_SCROLL" to="content" method="_on_check_box_scroll_toggled"]
|
||||
|
||||
@@ -19,32 +19,16 @@ const RESULT_STRINGS = {
|
||||
RESULT_TIMEOUT: 'Время истекло' }
|
||||
|
||||
|
||||
@export var projsettings_path_left: String = ''
|
||||
@export var projsettings_path_right: String = ''
|
||||
|
||||
var i_bort: int = 0
|
||||
var addr_left: String
|
||||
var addr_right: String
|
||||
|
||||
|
||||
func on_settings_changed():
|
||||
addr_left = ProjectSettings.get_setting(projsettings_path_left)
|
||||
addr_right = ProjectSettings.get_setting(projsettings_path_right)
|
||||
@export var request_url: String = ''
|
||||
|
||||
|
||||
func get_result_string(result: Result):
|
||||
return RESULT_STRINGS[result] if RESULT_STRINGS.has(result) else '<неизвестный код результата HTTPRequest - %d>' % result
|
||||
|
||||
|
||||
func _ready():
|
||||
ProjectSettings.connect('settings_changed', on_settings_changed)
|
||||
on_settings_changed()
|
||||
|
||||
|
||||
func _on_request_timer():
|
||||
var addr = [addr_left, addr_right][i_bort]
|
||||
var rc = request(addr)
|
||||
if HTTPClient.Status.STATUS_DISCONNECTED != get_http_client_status():
|
||||
return
|
||||
var rc: = request(request_url)
|
||||
if rc != Error.OK:
|
||||
var s: String = '%s: %s' % [error_string(rc), addr]
|
||||
log.error('ошибка: %s' % s)
|
||||
i_bort = (i_bort + 1) % 2
|
||||
push_error('%s: \"%s\"' % [error_string(rc), request_url])
|
||||
|
||||
@@ -36,7 +36,6 @@ signal pressed(control: PanelContainer)
|
||||
return
|
||||
$margin/vbox/grid1/level7.value = v
|
||||
$margin/vbox/grid1/level7.tint_progress = Color.RED if v > 70 else Color.WHITE
|
||||
|
||||
|
||||
|
||||
@export var min_value0: float:
|
||||
@@ -141,16 +140,16 @@ signal pressed(control: PanelContainer)
|
||||
|
||||
|
||||
func _on_button_pressed(): emit_signal('pressed', self)
|
||||
func _enter_tree() -> void: call_deferred('_enter_tree_defered')
|
||||
func set_value0(value: Array): value0.assign(value)
|
||||
func _enter_tree() -> void: call_deferred('_enter_tree_defered')
|
||||
|
||||
|
||||
func _ready():
|
||||
var items: Array= get_level_nodes()
|
||||
var items: Array = get_level_nodes()
|
||||
for item in items:
|
||||
item.connect('value_changed', on_level_changed.bind(item, value1_info))
|
||||
item.connect('value_changed', on_level_changed.bind(item, value0_info))
|
||||
on_level_changed(item.value, item, value0_info)
|
||||
var level7 = $margin/vbox/grid1/level7
|
||||
var level7: = $margin/vbox/grid1/level7
|
||||
level7.connect('value_changed', on_level_changed.bind(level7, value1_info))
|
||||
on_level_changed(level7.value, level7, value1_info)
|
||||
|
||||
@@ -225,11 +224,10 @@ func get_name_nodes() -> Array:
|
||||
|
||||
|
||||
func set_value0_animated(target_node, target_value: float) -> void:
|
||||
var tween = create_tween()
|
||||
var tween: Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_OUT)
|
||||
tween.set_trans(Tween.TRANS_QUINT)
|
||||
|
||||
tween.tween_property(target_node, \"value\", target_value, animation_duration)
|
||||
tween.tween_property(target_node, 'value', target_value, animation_duration)
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rceim"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
@tool
|
||||
|
||||
extends Node
|
||||
extends TextureButton
|
||||
|
||||
@export var state_colors: Array
|
||||
|
||||
|
||||
@@ -25,63 +25,99 @@ script/source = "extends Panel
|
||||
#TODO: рефактор: заменить подчёркивание на тире
|
||||
const PRIBORS_RES = \\
|
||||
{
|
||||
'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'],
|
||||
'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'],
|
||||
'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'],
|
||||
'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'],
|
||||
'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'],
|
||||
'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'],
|
||||
'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'],
|
||||
'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'],
|
||||
'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'],
|
||||
'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'],
|
||||
'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'],
|
||||
'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'],
|
||||
'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'],
|
||||
'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'],
|
||||
'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'],
|
||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||
'pribor_prd_k_1': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 1'],
|
||||
'pribor_prd_k_2': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 2'],
|
||||
'pribor_prd_k_3': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 3'],
|
||||
'pribor_prd_k_4': ['res://scenes/pribor-prd-k/pribor-prd-k.tscn', 'Контроль исправности прибора ПРД-К 4'],
|
||||
'pribor_prd_n_1': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 1'],
|
||||
'pribor_prd_n_2': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 2'],
|
||||
'pribor_prd_n_3': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 3'],
|
||||
'pribor_prd_n_4': ['res://scenes/pribor-prd-n/pribor-prd-n.tscn', 'Контроль исправности прибора ПРД-Н 4'],
|
||||
'pribor_prd_v_1': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 1'],
|
||||
'pribor_prd_v_2': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 2'],
|
||||
'pribor_prd_v_3': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 3'],
|
||||
'pribor_prd_v_4': ['res://scenes/pribor-prd-v/pribor-prd-v.tscn', 'Контроль исправности прибора ПРД-В 4'],
|
||||
'pribor_rtr': ['res://scenes/pribor-afsp/pribor-bpo.tscn', 'Контроль исправности прибора РТР'],
|
||||
'pribor_afsp_1': ['res://scenes/pribor-afsp/pribor-afsp-1.tscn', 'Контроль исправности прибора АФСП 1'],
|
||||
'pribor_afsp_2': ['res://scenes/pribor-afsp/pribor-afsp-2.tscn', 'Контроль исправности прибора АФСП 2'],
|
||||
'pribor_uf': ['res://scenes/pribor-uf/pribor-uf.tscn', 'Контроль исправности прибора УФ'],
|
||||
'pribor_uyep': ['res://scenes/pribor-uyep/pribor-uyep.tscn', 'Контроль исправности устройства У-ЭП'],
|
||||
}
|
||||
|
||||
|
||||
func on_line_changed(u, conn_node, _pribor_meta): conn_node.set_val(u.online)
|
||||
func on_serv_changed(u, pribor_node, _pribor_meta): pribor_node.state = int(u.serviceability)
|
||||
|
||||
|
||||
func on_mode_changed():
|
||||
clean_pribor_items()
|
||||
reset_pribor_buttons()
|
||||
|
||||
|
||||
func reset_pribor_buttons():
|
||||
var pribor_buttons: = get_tree().get_nodes_in_group('pribor_buttons')
|
||||
for node in pribor_buttons:
|
||||
node.button_pressed = false
|
||||
|
||||
|
||||
func _ready():
|
||||
var group = ButtonGroup.new()
|
||||
# Кнопки приборов, по нажатию на которые отображаеся мнемосхема
|
||||
for k in PRIBORS_RES:
|
||||
var pribor_node = get_node(k)
|
||||
var pribor_node: Node = get_node(k)
|
||||
var pribor_path = PRIBORS_RES[k][0]
|
||||
var header_text = PRIBORS_RES[k][1]
|
||||
pribor_node.set_button_group(group)
|
||||
pribor_node.connect('button_down', Callable(self, 'on_pribor_press').bind(pribor_path, header_text, pribor_node))
|
||||
var conn_node = pribor_node.get_node('connect_pribor')
|
||||
var pribor_meta = pribor_node.get_meta('unit_name', [])
|
||||
var unit_names = pribor_node.get_meta('unit_name', [])
|
||||
var pribor_proc = pribor_node.get_meta('online_proc', '')
|
||||
if pribor_proc == '':
|
||||
continue
|
||||
if pribor_meta.size():
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
unit_pribor.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, pribor_meta))
|
||||
if not unit_names.size():
|
||||
continue
|
||||
for i in unit_names.size():
|
||||
var unit_instance: = network.get_unit_instance(unit_names[i])
|
||||
unit_instance.connect('line_changed', Callable(self, pribor_proc).bind(conn_node, unit_names))
|
||||
|
||||
for item in unit_names:
|
||||
if prd.prd_dict.has(item):
|
||||
var prd_module = prd.prd_dict[item]
|
||||
prd_module.connect('update_serviceability', Callable(self, 'on_serviceability_changed').bind(prd_module, pribor_node))
|
||||
if item == 'уарэп-эмс':
|
||||
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'):
|
||||
var unit_name = pribor_node.get_meta('unit_name')
|
||||
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)
|
||||
signaller.conn(signaller.режим_эмс, on_mode_changed)
|
||||
|
||||
|
||||
func online_change_arr(_u, conn_node, pribor_meta):
|
||||
var state_online = true
|
||||
for i in pribor_meta.size():
|
||||
var unit_pribor = network.get_unit_instance(pribor_meta[i])
|
||||
if not unit_pribor.online:
|
||||
state_online = false
|
||||
var state_online: = false
|
||||
for meta in pribor_meta:
|
||||
var unit_pribor = network.get_unit_instance(meta)
|
||||
if unit_pribor.online:
|
||||
state_online = true
|
||||
break
|
||||
conn_node.set_val(state_online)
|
||||
|
||||
|
||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
func clean_pribor_items():
|
||||
var items = get_tree().get_nodes_in_group('pribor_items')
|
||||
for item in items:
|
||||
remove_child(item)
|
||||
item.queue_free()
|
||||
|
||||
|
||||
func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
clean_pribor_items()
|
||||
var pribor_obj = load(pribor_path)
|
||||
if not pribor_obj:
|
||||
push_error('не загружено: \\\"%s\\\" (%s)' % [pribor_path, header_text])
|
||||
@@ -97,6 +133,18 @@ func on_pribor_press(pribor_path, header_text, pribor_node):
|
||||
pribor.set_meta('unit_name', unit_name)
|
||||
pribor.add_to_group('pribor_items')
|
||||
add_child(pribor)
|
||||
|
||||
|
||||
func on_serviceability_changed(prd_module: Object, prd_pribor:Node)-> void:
|
||||
if not prd_module.unit_yau07.online:
|
||||
prd_pribor.state = 0
|
||||
return
|
||||
prd_pribor.state = 1 if prd_module.serviceability else 2
|
||||
|
||||
|
||||
func on_update_uf_serviceability(uf_serviceaability: bool, uf_pribor: Node)-> void:
|
||||
|
||||
uf_pribor.state = 1 if uf_serviceaability else 2
|
||||
"
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_foasq"]
|
||||
@@ -122,7 +170,7 @@ grow_vertical = 2
|
||||
script = SubResource("GDScript_iqgf5")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="capsrpb" type="TextureRect" parent="."]
|
||||
[node name="capsrpb" type="TextureRect" parent="." groups=["pribor_pics"]]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
@@ -136,6 +184,7 @@ size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-капсрпб"
|
||||
metadata/unit_name = &"уарэп-капсрпб"
|
||||
|
||||
[node name="label" type="Label" parent="capsrpb"]
|
||||
layout_mode = 0
|
||||
@@ -155,7 +204,7 @@ scale = Vector2(2.6, 2.6)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="5p28" type="TextureRect" parent="."]
|
||||
[node name="5p28" type="TextureRect" parent="." groups=["pribor_pics"]]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
@@ -169,6 +218,7 @@ size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-5п28"
|
||||
metadata/unit_name = &"уарэп-5п28"
|
||||
|
||||
[node name="label" type="Label" parent="5p28"]
|
||||
layout_mode = 0
|
||||
@@ -189,7 +239,7 @@ sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="akng" type="TextureRect" parent="."]
|
||||
[node name="akng" type="TextureRect" parent="." groups=["pribor_pics"]]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
@@ -203,6 +253,7 @@ size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"навигация"
|
||||
metadata/unit_name = &"навигация"
|
||||
|
||||
[node name="label" type="Label" parent="akng"]
|
||||
layout_mode = 0
|
||||
@@ -223,7 +274,7 @@ sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="maps" type="TextureRect" parent="."]
|
||||
[node name="maps" type="TextureRect" parent="." groups=["pribor_pics"]]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
@@ -236,7 +287,8 @@ size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"навигация"
|
||||
unit_name = &"уарэп-карта"
|
||||
metadata/unit_name = &"уарэп-карта"
|
||||
|
||||
[node name="label" type="Label" parent="maps"]
|
||||
layout_mode = 0
|
||||
@@ -257,7 +309,7 @@ sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="trassa" type="TextureRect" parent="."]
|
||||
[node name="trassa" type="TextureRect" parent="." groups=["pribor_pics"]]
|
||||
editor_description = "Кнопка для отображения внешних соединений."
|
||||
self_modulate = Color(0.788235, 0.788235, 0.788235, 1)
|
||||
layout_mode = 0
|
||||
@@ -271,6 +323,7 @@ size_flags_vertical = 15
|
||||
texture = ExtResource("2_oysma")
|
||||
script = ExtResource("2_8r80x")
|
||||
unit_name = &"уарэп-трасса"
|
||||
metadata/unit_name = &"уарэп-трасса"
|
||||
|
||||
[node name="label" type="Label" parent="trassa"]
|
||||
layout_mode = 0
|
||||
@@ -291,6 +344,58 @@ sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="pribor_prd_n_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1048.0
|
||||
offset_top = 193.0
|
||||
offset_right = 1125.0
|
||||
offset_bottom = 309.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
action_mode = 0
|
||||
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)]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
metadata/unit_name = ["уарэп-яу07-1н"]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_1"]
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = -38.0
|
||||
offset_right = 60.0
|
||||
offset_bottom = -19.0
|
||||
text = "ПРД Н1"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_prd_n_1"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
layout_mode = 0
|
||||
offset_left = -10.0
|
||||
offset_top = -24.0
|
||||
offset_right = 95.0
|
||||
offset_bottom = 126.0
|
||||
texture = ExtResource("4_rasbe")
|
||||
region_rect = Rect2(-3, -3, 89, 89)
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="pribor_uf" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
@@ -305,7 +410,8 @@ action_mode = 0
|
||||
texture_normal = ExtResource("2_0nvm1")
|
||||
stretch_mode = 0
|
||||
script = ExtResource("3_4pt7j")
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 0.74, 0.37, 1), Color(0.854902, 0.0705882, 0.0705882, 1)]
|
||||
state_colors = [Color(1, 1, 1, 1), Color(0, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
state = 1
|
||||
metadata/unit_name = ["уарэп-эмс"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -321,6 +427,7 @@ vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_uf"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
layout_mode = 0
|
||||
offset_left = -14.0
|
||||
offset_top = -30.0
|
||||
@@ -356,7 +463,9 @@ action_mode = 0
|
||||
texture_normal = ExtResource("3_hhadv")
|
||||
stretch_mode = 0
|
||||
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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = [&"уарэп-бпо-1", &"уарэп-бпо-2"]
|
||||
metadata/online_proc = "online_change_arr"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_rtr"]
|
||||
layout_mode = 0
|
||||
@@ -417,7 +526,9 @@ action_mode = 0
|
||||
texture_normal = ExtResource("9_iqgf5")
|
||||
stretch_mode = 0
|
||||
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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = [&"уарэп-афсп-левый"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_1"]
|
||||
layout_mode = 0
|
||||
@@ -482,7 +593,9 @@ texture_normal = ExtResource("9_iqgf5")
|
||||
stretch_mode = 0
|
||||
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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = [&"уарэп-афсп-правый"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
[node name="label" type="Label" parent="pribor_afsp_2"]
|
||||
layout_mode = 0
|
||||
@@ -544,7 +657,7 @@ action_mode = 0
|
||||
texture_normal = ExtResource("5_kvnex")
|
||||
stretch_mode = 0
|
||||
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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-щ3", "уарэп-спт25-1", "уарэп-спт25-2"]
|
||||
metadata/online_proc = "online_change_arr"
|
||||
|
||||
@@ -596,7 +709,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-2в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -648,7 +761,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-2н"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -702,7 +815,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-2к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -754,7 +867,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-3в"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -806,7 +919,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-3н"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -858,7 +971,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, 1, 0, 1), Color(1, 0, 0, 1)]
|
||||
metadata/unit_name = ["уарэп-яу07-3к"]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
|
||||
@@ -947,58 +1060,6 @@ sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="pribor_prd_n_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
offset_left = 1048.0
|
||||
offset_top = 193.0
|
||||
offset_right = 1125.0
|
||||
offset_bottom = 309.0
|
||||
size_flags_horizontal = 15
|
||||
size_flags_vertical = 15
|
||||
toggle_mode = true
|
||||
action_mode = 0
|
||||
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)]
|
||||
metadata/online_proc = "on_line_changed"
|
||||
metadata/unit_name = ["уарэп-яу07-1н"]
|
||||
|
||||
[node name="label" type="Label" parent="pribor_prd_n_1"]
|
||||
layout_mode = 0
|
||||
offset_left = 8.0
|
||||
offset_top = -38.0
|
||||
offset_right = 60.0
|
||||
offset_bottom = -19.0
|
||||
text = "ПРД Н1"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="frame" type="NinePatchRect" parent="pribor_prd_n_1"]
|
||||
visible = false
|
||||
self_modulate = Color(0.890196, 0.486275, 0.196078, 1)
|
||||
layout_mode = 0
|
||||
offset_left = -10.0
|
||||
offset_top = -24.0
|
||||
offset_right = 95.0
|
||||
offset_bottom = 126.0
|
||||
texture = ExtResource("4_rasbe")
|
||||
region_rect = Rect2(-3, -3, 89, 89)
|
||||
patch_margin_left = 16
|
||||
patch_margin_top = 16
|
||||
patch_margin_right = 16
|
||||
patch_margin_bottom = 16
|
||||
|
||||
[node name="connect_pribor" type="AnimatedSprite2D" parent="pribor_prd_n_1"]
|
||||
light_mask = 3
|
||||
position = Vector2(35, -10)
|
||||
scale = Vector2(0.625, 0.625)
|
||||
sprite_frames = SubResource("SpriteFrames_foasq")
|
||||
frame_progress = 0.72355
|
||||
script = ExtResource("11_u7tym")
|
||||
|
||||
[node name="pribor_prd_k_1" type="TextureButton" parent="." groups=["pribor_buttons"]]
|
||||
editor_description = "Кнопка для выбора прибора."
|
||||
layout_mode = 0
|
||||
@@ -1325,6 +1386,7 @@ points = PackedVector2Array(-8, 0, 608, 0)
|
||||
width = 2.0
|
||||
default_color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[connection signal="toggled" from="pribor_prd_n_1" to="pribor_prd_n_1" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_uf" to="pribor_uf" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_rtr" to="pribor_rtr" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_afsp_1" to="pribor_afsp_1" method="_on_toggled"]
|
||||
@@ -1337,7 +1399,6 @@ default_color = Color(1, 1, 1, 0.352941)
|
||||
[connection signal="toggled" from="pribor_prd_n_3" to="pribor_prd_n_3" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_prd_k_3" to="pribor_prd_k_3" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_prd_v_1" to="pribor_prd_v_1" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_prd_n_1" to="pribor_prd_n_1" method="_on_toggled"]
|
||||
[connection signal="toggled" from="pribor_prd_k_1" to="pribor_prd_k_1" method="_on_toggled"]
|
||||
[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"]
|
||||
|
||||
@@ -38,7 +38,7 @@ const SETTING_TABLE = [
|
||||
['Текущая версия ПО УАРЭП', TableEdit, TableEdit, 'Время сборки, версия и номер фиксации'],
|
||||
['уарэп-яу07-частный', TableEdit, TableEdit, 'IP-адрес для получения частных сообщений от ЯУ-07'],
|
||||
['уарэп-яу07-общий', TableEdit, TableEdit, 'IP-адрес для получения широковещательных сообщений от ЯУ-07'],
|
||||
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ'],
|
||||
['уарэп-капсрпб', TableEdit, TableEdit, 'IP-адрес для связи с КАПС-РПБ [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'],
|
||||
['уарэп-эмс', TableEdit, TableEdit, 'IP-адрес для связи с ЭМС'],
|
||||
['уарэп-яу07-2в', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-В 2'],
|
||||
['уарэп-яу07-2н', TableEdit, TableEdit, 'IP-адрес для связи с прибором ПРД-Н 2'],
|
||||
@@ -61,7 +61,10 @@ const SETTING_TABLE = [
|
||||
['Адрес АФСП левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес АФСП правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора АФСП'],
|
||||
['Адрес БПО левого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
|
||||
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'] ]
|
||||
['Адрес БПО правого борта', TableEdit, TableEdit, 'http-адрес для запроса состояния прибора БПО'],
|
||||
['Период опроса состояния БПО, секунды', TableEdit, TableEdit, 'Время в секундах' ],
|
||||
['Период опроса состояния АФСП, секунды', TableEdit, TableEdit, 'Время в секундах' ],
|
||||
['уареп-трасса', TableEdit, TableEdit, 'IP-адрес для связи с Трассой [<адрес этого узла>, <адрес удалённого узла>, <порт этого узла>, <порт удалённого узла>]'] ]
|
||||
|
||||
const EXTERNAL_CU = 16 ## Внешнее целеуказание
|
||||
const TRASSA = 17
|
||||
@@ -86,20 +89,17 @@ func _ready() -> void:
|
||||
|
||||
|
||||
func on_external_cu_btn_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
ProjectSettings.set_setting('application/config/Внешнее управление', state)
|
||||
if state:
|
||||
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:
|
||||
var state = btn.button_pressed
|
||||
ProjectSettings.set_setting('application/config/Внешнее указание Трасса', state)
|
||||
ProjectSettings.set_setting('application/config/Внешнее указание Трасса', btn.button_pressed)
|
||||
|
||||
|
||||
func on_vk_pressed(btn) -> void:
|
||||
var state = btn.button_pressed
|
||||
signaller.emit_signal('kb_pressed', state)
|
||||
signaller.emit_signal('kb_pressed', btn.button_pressed)
|
||||
|
||||
|
||||
func on_ems2_pressed(btn) -> void:
|
||||
@@ -175,7 +175,7 @@ func setting_tab():
|
||||
var child = node_values[0]
|
||||
if child is CheckButton:
|
||||
child.connect('pressed', Callable(self, 'on_checkbutton_pressed').bind(i))
|
||||
var val = settings_data[param_name] if settings_data.has(param_name) else false
|
||||
var val = ProjectSettings.get_setting('application/config/%s' % param_name)
|
||||
child.set_pressed(val)
|
||||
else:
|
||||
if settings_data.has(param_name):
|
||||
@@ -213,11 +213,9 @@ 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()[0]
|
||||
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))
|
||||
on_trassa_btn_pressed(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]
|
||||
|
||||
@@ -18,6 +18,7 @@ class_name work extends Panel
|
||||
@export var strob_min_width: float ## Минимальная ширина строба по углу.
|
||||
@export var window_0_id: int ## Идетификатор окна. Присваивается godot от 0 до количества созданных окон.
|
||||
|
||||
const SVK_EMIT = 1 ## Код состояния выполнения помехи - выполняется
|
||||
|
||||
var drag_button: MouseButton ## Кнопка мыши нажатая при перетаскивании.
|
||||
var drag_fsm: DragFSM = DragFSM.IDLE ## Текущее состояние перетаскивания.
|
||||
@@ -30,7 +31,13 @@ var strob_band_begin: float ## Ширина строба в моме
|
||||
var strob_dir_begin: float ## Направление антенны в момент начала перетаскивания.
|
||||
var strob_width_begin: float ## Ширина строба по углу в момент начала перетаскивания.
|
||||
var view_mode: MapViewMode ## Режим отображения карты
|
||||
var thrs_dict: Dictionary ## Ссылка на словарь целей
|
||||
var color_ecm: Color
|
||||
var color_select: Color
|
||||
var color_emit: Color
|
||||
var color_emit_sel: Color
|
||||
|
||||
var course = 0.0 ## Курс корабля
|
||||
|
||||
signal drag_begin ## Вызывается в момент начала перетаскивания.
|
||||
signal drag_continue ## Вызывается во время продолжения перетаскивания.
|
||||
@@ -44,6 +51,7 @@ const map_sizes = [
|
||||
var fs_band = prd.FS_BAND_RTO ## Текущий режим блоков ФС по частоте
|
||||
var fs_selected: Dictionary ## Словарь выбранных секторов
|
||||
var fs_active: Dictionary ## Словарь секторов назначенных на подавление
|
||||
var fs_emit: Dictionary ## Словарь секторов назначенных на подавление
|
||||
|
||||
## Состояние перетаскивания.
|
||||
enum DragFSM {
|
||||
@@ -72,10 +80,6 @@ const VAL_TO_EVENT = {
|
||||
true: 'full_auto' } ## Выбор целей и установка помех автоматически.
|
||||
|
||||
|
||||
## Обработчик сигнала изменения списка целей.
|
||||
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)
|
||||
|
||||
@@ -84,6 +88,25 @@ func on_threat_selected(th, ecm_btns): on_rto_threat_sel(th.id, ecm_btns)
|
||||
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_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)
|
||||
|
||||
|
||||
## Обработчик сигнала изменения списка целей.
|
||||
func on_threats_resized(ths: Dictionary):
|
||||
$count_all_pad/count_all.text = '%02d' % ths.size()
|
||||
var c: int = ths.values().filter(func(th: threats.Threat): return th.proto != '').size()
|
||||
$count_danger_pad/count_danger.text = '%02d' % c
|
||||
thrs_dict = ths
|
||||
|
||||
|
||||
## Обработчик нажатия на кнопку вид.
|
||||
func on_button_view_toggled(toggled: bool):
|
||||
signaller.emit_signal('map_mode_changed', int(toggled))
|
||||
@@ -113,6 +136,8 @@ func _exit_tree() -> void:
|
||||
|
||||
## Производит инициализацию.
|
||||
func _ready():
|
||||
ProjectSettings.connect('settings_changed', on_settings_changed)
|
||||
on_settings_changed()
|
||||
min_zoom = ProjectSettings.get_setting('application/config/map_minimum_zoom', 5)
|
||||
max_zoom = ProjectSettings.get_setting('application/config/map_maximum_zoom', 19)
|
||||
drag_fsm = DragFSM.OFF
|
||||
@@ -120,28 +145,42 @@ 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)))
|
||||
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('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, 'on_interfer_off_all'))
|
||||
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno').bind(nodes))
|
||||
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
|
||||
signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color'))
|
||||
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
|
||||
signaller.connect('interfer_prinuditelno', Callable(self, 'on_chk_interfer_prinuditelno'))
|
||||
signaller.connect('fs_update_state', Callable(self, 'on_fs_update_state'))
|
||||
signaller.connect('map_user_panning', Callable(self, 'on_user_panning'))
|
||||
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('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, 'on_interfer_off_all'))
|
||||
signaller.connect('interfer_prinuditelno', Callable(self, 'on_interfer_prinuditelno').bind(nodes))
|
||||
signaller.connect('fs_selected', Callable(self, 'on_fs_selected'))
|
||||
signaller.connect('fs_update_color', Callable(self, 'on_fs_update_color'))
|
||||
interfer.connect('interfer_update', Callable(self, 'on_interfer_new'))
|
||||
signaller.connect('interfer_prinuditelno', Callable(self, 'on_chk_interfer_prinuditelno'))
|
||||
signaller.connect('fs_update_state', Callable(self, 'on_fs_update_state'))
|
||||
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'))
|
||||
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)
|
||||
on_btn_activate_toggled(true)
|
||||
#$canvas.add_seczap(0, Vector4(372, 0, 30, 348))
|
||||
#$canvas.add_seczap(1, Vector4(372, 90, 30, 348))
|
||||
#$canvas.add_seczap(2, Vector4(198 + 348, 180, 30, 5))
|
||||
#$canvas.add_seczap(3, Vector4(203, 270, 30, 5))
|
||||
|
||||
#$canvas.set_seczap_color(2, Color.MAGENTA)
|
||||
#$canvas.set_seczap_color(3, Color.CHARTREUSE)
|
||||
|
||||
|
||||
func on_navi_data_received(data: Dictionary):
|
||||
$canvas.set_canvas_rotation(data.get('k', 0.0))
|
||||
course = data.get('k', 0.0)
|
||||
|
||||
|
||||
func on_user_panning():
|
||||
@@ -166,7 +205,7 @@ func get_all_nodes(root):
|
||||
|
||||
|
||||
## Производит отображение цели на диаграмму.
|
||||
func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
func map_threat_to_bip(th: threats.Threat, bip: Control) -> bool:
|
||||
var freq = th.freq
|
||||
var sector_key = null
|
||||
var sector_width = 50.0
|
||||
@@ -176,7 +215,7 @@ func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
if freq_range[0] <= freq and freq <= freq_range[1]:
|
||||
sector_key = key
|
||||
break
|
||||
if sector_key!= null:
|
||||
if sector_key != null:
|
||||
radius_internal = fs_band[sector_key][0]
|
||||
radius_outter = fs_band[sector_key][1]
|
||||
freq_low = prd.FS_FREQ[sector_key][0]
|
||||
@@ -189,33 +228,34 @@ func map_threat_to_bip(th: threats.Threat, bip: Control):
|
||||
radius_outter,
|
||||
freq_low,
|
||||
freq_high) - bip.size / 2
|
||||
return sector_key != null
|
||||
|
||||
|
||||
## Обработчик сигнала обновления цели.
|
||||
func on_threat_update(th):
|
||||
var bip = get_node('%d' % th.id)
|
||||
bip.update(th.tick_rx)
|
||||
map_threat_to_bip(th, bip)
|
||||
bip.visible = map_threat_to_bip(th, bip)
|
||||
|
||||
|
||||
## Обработчик выбора помехи для цели.
|
||||
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 bip != null:
|
||||
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)
|
||||
if not interfer.thrs.has(ecm.ispp): return
|
||||
var th_id = interfer.thrs[ecm.ispp]
|
||||
var bip = get_node('%d' % th_id)
|
||||
if bip != null:
|
||||
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:
|
||||
interfer.thrs.erase(ecm.ispp)
|
||||
set_fs_color(ecm)
|
||||
update_fs_colors()
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
else:
|
||||
interfer.thrs.erase(ecm.ispp)
|
||||
set_fs_color(ecm)
|
||||
update_fs_colors()
|
||||
set_fs_color(ecm)
|
||||
|
||||
|
||||
@@ -226,6 +266,7 @@ func on_interfer_off_all():
|
||||
bip.set_ecm_visible(false)
|
||||
bip.set_track_visible(false)
|
||||
fs_active.clear()
|
||||
fs_emit.clear()
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
@@ -259,24 +300,33 @@ func on_rto_threat_sel(th_id, ecm_btns):
|
||||
unsel_fs_all(false)
|
||||
else:
|
||||
item.set_sel_visible(false)
|
||||
var th = thrs_dict[th_id]
|
||||
var krp = interfer.get_krp(th)
|
||||
for btn in ecm_btns:
|
||||
set_btns_disabled(false, btn)
|
||||
var btn_meta = btn.get_meta('rfi_name')
|
||||
if krp == btn_meta:
|
||||
btn.modulate = Color.DEEP_SKY_BLUE
|
||||
else:
|
||||
btn.modulate = Color(1.0, 1.0, 1.0, 1.0)
|
||||
|
||||
|
||||
## Обработчик снятия выбора РТО цели.
|
||||
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
|
||||
set_ecm_btns_state(true)
|
||||
for btn in ecm_btns:
|
||||
btn.modulate = Color(1.0, 1.0, 1.0, 1.0)
|
||||
|
||||
|
||||
## Обработчик нажатия кнопки "Строб". Управляет отображением строба.
|
||||
func on_button_strobe_pressed() -> void:
|
||||
drag_fsm = DragFSM.IDLE if $btns_select/btn_strob.is_pressed() else DragFSM.OFF
|
||||
$canvas.set_strob_visible(drag_fsm == DragFSM.IDLE)
|
||||
$canvas.set_strob_visible((drag_fsm == DragFSM.IDLE) and (view_mode == MapViewMode.RTO))
|
||||
|
||||
|
||||
## Поведение радиокнопок в группе. Управляет состоянием кнопок выбора целей.
|
||||
@@ -341,6 +391,7 @@ func set_strob(pos: Vector2) -> void:
|
||||
|
||||
## Обработка движения мыши для управления стробом. Вызывается во время движения мыши.
|
||||
func _on_drag_continue(event) -> void:
|
||||
if not $canvas.get_strob_visible(): return
|
||||
if drag_button == MOUSE_BUTTON_RIGHT:
|
||||
if shift_pressed:
|
||||
var strob_width: float = get_strob_width(event.position, strob_width_begin)
|
||||
@@ -354,6 +405,7 @@ func _on_drag_continue(event) -> void:
|
||||
|
||||
## Обработка движения мыши для управления стробом. Вызывается при нажатии мыши.
|
||||
func _on_drag_begin(event) -> void:
|
||||
if not $canvas.get_strob_visible(): return
|
||||
drag_pos_begin = event.position
|
||||
if drag_button == MOUSE_BUTTON_LEFT:
|
||||
set_strob(event.position)
|
||||
@@ -390,7 +442,7 @@ 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
|
||||
var angle: float = event.position.angle_to_point(center + center_offset) * 180/PI - 45.0 - course
|
||||
if angle < 0:
|
||||
angle += 360
|
||||
var distance: float = event.position.distance_to(center + center_offset)
|
||||
@@ -418,21 +470,31 @@ func sel_fs_sector(event):
|
||||
|
||||
|
||||
func set_fs_color(ecm):
|
||||
if not prd.fs_caps_id.has(ecm.nmfs):
|
||||
push_warning('нет такого модуля ФС: %d, но имеется: %s' % [ecm.nmfs, prd.fs_caps_id.keys()])
|
||||
return
|
||||
if ecm.krp != interfer.INTERFER_OFF:
|
||||
fs_active[prd.fs_caps_id[ecm.nmfs]] = null
|
||||
else:
|
||||
fs_active.erase(prd.fs_caps_id[ecm.nmfs])
|
||||
if ecm.svk == SVK_EMIT:
|
||||
fs_emit[prd.fs_caps_id[ecm.nmfs]] = null
|
||||
else:
|
||||
fs_emit.erase(prd.fs_caps_id[ecm.nmfs])
|
||||
update_fs_colors()
|
||||
|
||||
|
||||
func update_fs_colors():
|
||||
var fs_colors = $canvas.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_emit.keys():
|
||||
fs_colors[key] = color_emit
|
||||
for key in fs_selected.keys():
|
||||
fs_colors[key] = color_select
|
||||
if key in fs_emit:
|
||||
fs_colors[key] = color_emit_sel
|
||||
else:
|
||||
fs_colors[key] = color_select
|
||||
$canvas.set_band_colors(fs_colors)
|
||||
|
||||
|
||||
@@ -470,6 +532,7 @@ func set_btns_disabled(value: bool, btn):
|
||||
|
||||
func on_fs_update_color(ecms):
|
||||
fs_active.clear()
|
||||
fs_emit.clear()
|
||||
for ecm in ecms.values():
|
||||
set_fs_color(ecm)
|
||||
update_fs_colors()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=17 format=3 uid="uid://b276iygic5itk"]
|
||||
[gd_scene load_steps=18 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"]
|
||||
@@ -51,6 +51,10 @@ _data = {
|
||||
offsets = PackedFloat32Array(0.181818, 0.751623)
|
||||
colors = PackedColorArray(1, 1, 1, 0.352941, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="SystemFont" id="SystemFont_5ffal"]
|
||||
generate_mipmaps = true
|
||||
subpixel_positioning = 0
|
||||
|
||||
[node name="Работа" type="Panel"]
|
||||
script = ExtResource("1_niok4")
|
||||
Bip = ExtResource("2_br3s6")
|
||||
@@ -86,6 +90,7 @@ self_modulate = Color(1, 1, 1, 0.415686)
|
||||
position = Vector2(360, 360)
|
||||
min_zoom_level = 3
|
||||
max_zoom_level_server = 11
|
||||
ship_radius_km = 3.0
|
||||
az = 3.0
|
||||
|
||||
[node name="player" type="AnimationPlayer" parent="tilemap"]
|
||||
@@ -95,11 +100,10 @@ libraries = {
|
||||
|
||||
[node name="grd_side" parent="." instance=ExtResource("3_s2j0e")]
|
||||
layout_mode = 0
|
||||
offset_left = 1114.0
|
||||
offset_left = 1116.0
|
||||
offset_top = 7.0
|
||||
offset_right = 1594.0
|
||||
offset_bottom = 1170.0
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="grd_btns" parent="." instance=ExtResource("5_2jnbs")]
|
||||
layout_mode = 0
|
||||
@@ -203,6 +207,7 @@ offset_left = 115.0
|
||||
offset_top = 1085.0
|
||||
offset_right = 257.0
|
||||
offset_bottom = 1112.0
|
||||
tooltip_text = "Автоматический выбор цели и помехи"
|
||||
action_mode = 0
|
||||
text = "Автоматически"
|
||||
|
||||
@@ -259,6 +264,7 @@ offset_top = 995.0
|
||||
offset_right = 1136.0
|
||||
offset_bottom = 1127.0
|
||||
scale = Vector2(0.5, 0.5)
|
||||
tooltip_text = "Применение выбранного режима помехи"
|
||||
toggle_mode = true
|
||||
button_pressed = true
|
||||
action_mode = 0
|
||||
@@ -283,27 +289,58 @@ offset_top = 1005.0
|
||||
offset_right = 1030.0
|
||||
offset_bottom = 1121.0
|
||||
scale = Vector2(0.5, 0.5)
|
||||
tooltip_text = "Устанавливает центр карты на текущие координаты"
|
||||
toggle_mode = true
|
||||
button_pressed = true
|
||||
texture_normal = ExtResource("12_5ffal")
|
||||
texture_pressed = ExtResource("13_ggrwd")
|
||||
|
||||
[node name="label" type="Label" parent="btn_center"]
|
||||
layout_mode = 0
|
||||
offset_left = -32.0
|
||||
offset_top = 100.0
|
||||
offset_right = 65.0
|
||||
offset_bottom = 119.0
|
||||
scale = Vector2(2, 2)
|
||||
text = "Центрировать"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="coordinates_map" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1000.0
|
||||
offset_left = 999.0
|
||||
offset_top = 128.0
|
||||
offset_right = 1112.0
|
||||
offset_right = 1111.0
|
||||
offset_bottom = 147.0
|
||||
text = "Координаты:"
|
||||
|
||||
[node name="scale_map" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1000.0
|
||||
offset_top = 192.0
|
||||
offset_right = 1110.0
|
||||
offset_bottom = 213.0
|
||||
offset_left = 999.0
|
||||
offset_top = 202.0
|
||||
offset_right = 1109.0
|
||||
offset_bottom = 223.0
|
||||
text = "Масштаб:"
|
||||
|
||||
[node name="zoom_plus" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1056.0
|
||||
offset_top = 230.0
|
||||
offset_right = 1088.0
|
||||
offset_bottom = 262.0
|
||||
theme_override_fonts/font = SubResource("SystemFont_5ffal")
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "+"
|
||||
|
||||
[node name="zoom_minus" type="Button" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 1056.0
|
||||
offset_top = 270.0
|
||||
offset_right = 1088.0
|
||||
offset_bottom = 302.0
|
||||
theme_override_font_sizes/font_size = 20
|
||||
text = "−"
|
||||
|
||||
[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"]
|
||||
@@ -311,3 +348,8 @@ text = "Масштаб:"
|
||||
[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_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"]
|
||||
|
||||
Reference in New Issue
Block a user