diff --git a/scenes/diagram/diagram.gd b/scenes/diagram/diagram.gd index 97d5035..d1ad627 100644 --- a/scenes/diagram/diagram.gd +++ b/scenes/diagram/diagram.gd @@ -35,8 +35,10 @@ func get_radius_outter() -> float: return material.get('shader_parameter/radius 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') +func get_band_colors(val: Array): return material.get('shader_parameter/ant_band_c') +func get_band_failures(val: Array): return material.get('shader_parameter/ant_band_m') func set_band_colors(val: Array): material.set('shader_parameter/ant_band_c', val) - +func set_band_failures(val: Array): material.set('shader_parameter/ant_band_m', val) ## Добавляет сектор запрета[br] ## [param id] - Индекс сектора запрета.[br] diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 356debe..32b71cd 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -56,6 +56,7 @@ var fs_selected: Dictionary ## Словарь выбранных сектор var fs_active: Dictionary ## Словарь секторов назначенных на подавление var fs_emit: Dictionary ## Словарь секторов назначенных на подавление var fs_closed: Dictionary ## Словарь для секторов запрета +var fs_failed: Array ## Сломанные секторs (модули ФС) ## Состояние перетаскивания. enum DragFSM { @@ -79,6 +80,11 @@ enum MapViewMode { } +enum ANT_BAND_STATE { + ANT_BAND_READY = 1, + ANT_BAND_FAILED = 0 +} + const VAL_TO_EVENT = { false: 'manual_control', ## Выбор целей и установка помех вручную. true: 'full_auto' } ## Выбор целей и установка помех автоматически. @@ -144,10 +150,18 @@ func _exit_tree() -> void: timer1.queue_free() +func init_fs_failed(): + var sectors_count = $canvas.fs_default_colors.size() + fs_failed.resize(sectors_count) + for i in fs_failed.size(): + fs_failed[i] = ANT_BAND_STATE.ANT_BAND_READY + + ## Производит инициализацию. func _ready(): ProjectSettings.connect('settings_changed', on_settings_changed) on_settings_changed() + init_fs_failed() 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 @@ -522,6 +536,7 @@ func update_fs_colors(): else: fs_colors[key] = color_select $canvas.set_band_colors(fs_colors) + $canvas.set_band_failures(fs_failed) if fs_emit.size(): if $btn_activate.pressed: $btn_activate.self_modulate = Color.RED @@ -577,8 +592,9 @@ func on_interfer_prinuditelno (prenuditelno_sectors, btns): ## Вызывается при получении информации о состоянии модулей ФС от КАПС РПБ. -func on_fs_update_state(_fs_dict: Dictionary): - pass +func on_fs_update_state(fs_dict: Dictionary): + for key in fs_dict.keys(): + fs_failed[key] = fs_dict[key].isg func on_btn_center_toggled(toggled_on: bool) -> void: diff --git a/shaders/antenas.tres b/shaders/antenas.tres index a1cbc38..69b4084 100644 --- a/shaders/antenas.tres +++ b/shaders/antenas.tres @@ -8,8 +8,8 @@ code = "shader_type canvas_item; #define RADIUS_INNER_0 200.0 /* Радиус внутренний для режима приоритет РТО */ #define RADIUS_INNER_1 480.0 /* Радиус внутренний для режима приоритет РЛС */ #define ANTENAS_COUNT 28 /* Количество антенн */ -#define ANT_BAND_READY 0U /* Антенна (модуль ФС) готова или исправна */ -#define ANT_BAND_FAILED 1U /* Антенна (модуль ФС) не исправно */ +#define ANT_BAND_READY 1U /* Антенна (модуль ФС) готова или исправна */ +#define ANT_BAND_FAILED 0U /* Антенна (модуль ФС) не исправно */ uniform vec2 pc0 = vec2(560, 560); /* Центр сетки антенн */ uniform float rotation: hint_range(0.0, 360.0) = 0.0; /* */ @@ -23,6 +23,7 @@ uniform int mode = 0; /* Режим отображения. Приоритет uniform float ffr: hint_range(0.0, 1.0) = 0.2; /* Индикация неисправности модулей ФС. Заметность штриховки. Индикация неисправности модулей ФС */ uniform float sfr: hint_range(0.0, 10.0) = 0.0; /* Индикация неисправности модулей ФС. Скорость движения штрховки */ uniform float afr: hint_range(0.0, 180.0) = 0.0; /* Индикация неисправности модулей ФС. Наклон штрховки */ +uniform float pfr: hint_range(1.0, 20.0) = 10.0; /* Индикация неисправности модулей ФС. Частота штриховки */ const int ant_band_count_0 = 2; const int ant_band_count_1 = 2; @@ -90,7 +91,7 @@ void antenas(inout vec4 c, vec2 uv, vec2 p0, int cnt, float r0, float r1, inout { vec2 uvr = uv; rotate_vec2(uvr, radians(afr), pc0); - col.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / 10.0)) * ffr; + col.a *= (1.0 - ffr) + tanh(10.0 * sin(TIME * sfr + 2.0 * PI * uvr.x / pfr)) * ffr; } float v = float(i & 1); vec4 color = v * col + (1.0f - v) * col; @@ -136,5 +137,6 @@ shader_parameter/mode = 0 shader_parameter/ffr = 0.2 shader_parameter/sfr = 0.0 shader_parameter/afr = 0.0 +shader_parameter/pfr = 10.0 shader_parameter/ant_band_c = PackedVector4Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -shader_parameter/ant_band_m = PackedInt32Array(0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) +shader_parameter/ant_band_m = PackedInt32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)