Работа в процессе. Добавление ширины диапазона
This commit is contained in:
@@ -7,8 +7,9 @@ resource_local_to_scene = true
|
||||
shader = ExtResource("1_7cn72")
|
||||
shader_parameter/color = Color(1, 1, 1, 0.168627)
|
||||
shader_parameter/width = 45.0
|
||||
shader_parameter/inner_radius = 0.1
|
||||
shader_parameter/outer_radius = 0.125
|
||||
shader_parameter/band = 0.04
|
||||
shader_parameter/radius = 0.06
|
||||
shader_parameter/inner_clip = 0.02
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_2lkm8"]
|
||||
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
extends Sprite2D
|
||||
|
||||
func set_strob_color(color: Color): $строб.material.set('shader_parameter/color', color);
|
||||
func set_strob_dir(dir: float): $строб.rotation_degrees = dir - 90.0
|
||||
func set_strob_width(width: float): $строб.material.set('shader_parameter/width', width)
|
||||
func set_strob_band(val: float): $строб.material.set('shader_parameter/inner_radius', val)
|
||||
func set_strob_visible(val: bool): $строб.visible = val
|
||||
func set_strob_dir(val: float): $строб.rotation_degrees = val - 90.0
|
||||
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 get_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/inner_radius')
|
||||
func get_strob_band() -> float: return $строб.material.get('shader_parameter/band') * 125.0
|
||||
func get_strob_radius(val: float): return $строб.material.set('shader_parameter/radius', sv(val))
|
||||
func get_radius_max(): return $"строб".scale.x / 2.0
|
||||
|
||||
func sv(val: float) -> float: return val / ($"строб".scale.x / 2.0) * 0.125
|
||||
|
||||
@@ -13,9 +13,10 @@ size = Vector2(1600, 1200)
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource("5_210ft")
|
||||
shader_parameter/color = Color(1, 1, 1, 0.168627)
|
||||
shader_parameter/width = 97.2
|
||||
shader_parameter/inner_radius = 0.0742
|
||||
shader_parameter/outer_radius = 0.1099
|
||||
shader_parameter/width = 69.7
|
||||
shader_parameter/band = 0.019
|
||||
shader_parameter/radius = 0.085
|
||||
shader_parameter/inner_clip = 0.045
|
||||
|
||||
[node name="canvas" type="Sprite2D"]
|
||||
material = ExtResource("1_uio4c")
|
||||
@@ -28,5 +29,6 @@ position = Vector2(610, 600)
|
||||
scale = Vector2(0.2, 0.2)
|
||||
texture = ExtResource("3_bw5j0")
|
||||
|
||||
[node name="строб" parent="." instance=ExtResource("4_4hefb")]
|
||||
material = SubResource("ShaderMaterial_qrcbl")
|
||||
[node name="строб" parent="." instance=ExtResource("4_ev5xv")]
|
||||
material = SubResource("ShaderMaterial_c08th")
|
||||
scale = Vector2(1100, 1100)
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
extends Panel
|
||||
|
||||
@export var col_red: Color
|
||||
@export var col_grey: Color
|
||||
@export var strob_min_width: float
|
||||
@export var strob_max_width: float
|
||||
@export var strob_min_band: float
|
||||
@export var strob_max_band: float
|
||||
@export var drag_scale: float
|
||||
@export var col_red: Color
|
||||
@export var col_grey: Color
|
||||
@export var strob_min_width: float
|
||||
@export var strob_max_width: float
|
||||
@export var strob_min_band: float
|
||||
@export var strob_max_band: float
|
||||
@export var drag_scale_width: float
|
||||
@export var drag_scale_band: float
|
||||
@export var window_0_id: int
|
||||
@export var window_1_id: int
|
||||
|
||||
|
||||
enum DRAG_FSM { IDLE, DRAG, DISABLE }
|
||||
@@ -33,6 +36,9 @@ var strob_band_begin: float
|
||||
var strob_center: Vector2
|
||||
""" Центр антенн """
|
||||
|
||||
var shift_pressed: bool
|
||||
""" Кнопка SHIFT нажата """
|
||||
|
||||
signal drag_begin
|
||||
""" Вызывается в момент начала перетаскивания """
|
||||
|
||||
@@ -93,37 +99,40 @@ func map_dec_to_rad(pos0: Vector2, pos: Vector2) -> Vector2:
|
||||
|
||||
|
||||
func get_strob_width(pos: Vector2, prev: float) -> float:
|
||||
var strob_dir_width: float = prev + (drag_pos_begin.y - pos.y) / drag_scale
|
||||
var strob_dir_width: float = prev + (drag_pos_begin.y - pos.y) * drag_scale_width
|
||||
strob_dir_width = clip_value(strob_dir_width, strob_min_width, strob_max_width)
|
||||
return strob_dir_width
|
||||
|
||||
|
||||
func get_strob_band(pos: Vector2, prev: float) -> float:
|
||||
var strob_dir_band: float = prev + (drag_pos_begin.x - pos.x) / drag_scale
|
||||
var strob_dir_band: float = prev - (drag_pos_begin.y - pos.y) * drag_scale_band
|
||||
strob_dir_band = clip_value(strob_dir_band, strob_min_band, strob_max_band)
|
||||
return strob_dir_band
|
||||
|
||||
|
||||
func set_strob_dir(pos: Vector2):
|
||||
func set_strob(pos: Vector2):
|
||||
var radp: Vector2 = map_dec_to_rad(strob_center, pos)
|
||||
if radp.y < 600.0:
|
||||
if radp.y < $canvas.get_radius_max():
|
||||
$canvas.set_strob_dir(radp.x)
|
||||
$canvas.set_strob_radius(radp.y)
|
||||
|
||||
|
||||
func _on_drag_continue(event):
|
||||
if drag_button == MOUSE_BUTTON_RIGHT:
|
||||
var strob_width: float = get_strob_width(event.position, strob_width_begin)
|
||||
$canvas.set_strob_width(strob_width)
|
||||
#var strob_band: float = get_strob_band(event.position, strob_band_begin)
|
||||
#$canvas.set_strob_band(strob_band)
|
||||
if shift_pressed:
|
||||
var strob_width: float = get_strob_width(event.position, strob_width_begin)
|
||||
$canvas.set_strob_width(strob_width)
|
||||
else:
|
||||
var strob_band: float = get_strob_band(event.position, strob_band_begin)
|
||||
$canvas.set_strob_band(strob_band)
|
||||
elif drag_button == MOUSE_BUTTON_LEFT:
|
||||
set_strob_dir(event.position)
|
||||
set_strob(event.position)
|
||||
|
||||
|
||||
func _on_drag_begin(event):
|
||||
drag_pos_begin = event.position
|
||||
if drag_button == MOUSE_BUTTON_LEFT:
|
||||
set_strob_dir(event.position)
|
||||
set_strob(event.position)
|
||||
elif drag_button == MOUSE_BUTTON_RIGHT:
|
||||
strob_width_begin = $canvas.get_strob_width()
|
||||
strob_band_begin = $canvas.get_strob_band()
|
||||
@@ -145,6 +154,8 @@ func _input(event):
|
||||
elif event is InputEventKey:
|
||||
if event.pressed and event.physical_keycode == KEY_F11:
|
||||
emit_signal('full_screen')
|
||||
elif event.physical_keycode == KEY_SHIFT:
|
||||
shift_pressed = event.pressed
|
||||
|
||||
|
||||
func toggle_full_screen(id: int):
|
||||
@@ -157,5 +168,5 @@ func toggle_full_screen(id: int):
|
||||
|
||||
|
||||
func _on_full_screen():
|
||||
toggle_full_screen(1)
|
||||
toggle_full_screen(0)
|
||||
toggle_full_screen(window_1_id)
|
||||
toggle_full_screen(window_0_id)
|
||||
|
||||
@@ -13,9 +13,11 @@ col_red = Color(1, 0.568627, 0.431373, 0.239216)
|
||||
col_grey = Color(0.34902, 0.643137, 0.772549, 0.168627)
|
||||
strob_min_width = 5.0
|
||||
strob_max_width = 90.0
|
||||
strob_min_band = 200.0
|
||||
strob_max_band = 600.0
|
||||
drag_scale = 5.0
|
||||
strob_min_band = 0.1
|
||||
strob_max_band = 15.538
|
||||
drag_scale_width = 0.5
|
||||
drag_scale_band = 0.05
|
||||
window_1_id = 1
|
||||
metadata/_edit_vertical_guides_ = []
|
||||
|
||||
[node name="canvas" parent="." instance=ExtResource("2_pmw7s")]
|
||||
|
||||
@@ -2,12 +2,14 @@ shader_type canvas_item;
|
||||
|
||||
/* Закрашенный сектор окружности ограниченный угловым сектором и радиусами */
|
||||
|
||||
uniform vec4 color: source_color = vec4(1, 1, 1, 1);
|
||||
uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0;
|
||||
uniform float inner_radius: hint_range(0.0, 0.125) = 0.1;
|
||||
uniform float outer_radius: hint_range(0.0, 0.125) = 0.125;
|
||||
uniform vec4 color: source_color = vec4(1, 1, 1, 1);
|
||||
uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0;
|
||||
uniform float band: hint_range(0.0, 0.125) = 0.04;
|
||||
uniform float radius: hint_range(0.0, 0.125) = 0.06;
|
||||
uniform float inner_clip: hint_range(0.0, 0.125) = 0.045;
|
||||
|
||||
const vec2 center = vec2(0.125, 0.125); /* Центр должен быть в (0.5, 0.5) но по неведомой причине это не так */
|
||||
|
||||
const vec2 center = vec2(0.125, 0.125); /* Центр должен быть в (0.5, 0.5), но это не так */
|
||||
const float dsa = 0.0025; /* Относительное расстояние на котором выполняется сглаживание краёв по радиальным линиям */
|
||||
const float dsr = 0.00025; /* Относительное расстояние на котором выполняется сглаживание краёв по круговым линиям */
|
||||
|
||||
@@ -20,12 +22,27 @@ float smooth_px(float r, float R, float ds)
|
||||
|
||||
vec4 sector(vec4 c, vec2 uv_pos, float r0, float r1, float w)
|
||||
{
|
||||
vec2 d = uv_pos - center;
|
||||
bool rc = false;
|
||||
if (r1 > center.x)
|
||||
{
|
||||
rc = true;
|
||||
r1 = center.x;
|
||||
}
|
||||
if (r0 < inner_clip)
|
||||
{
|
||||
rc = true;
|
||||
r0 = inner_clip;
|
||||
}
|
||||
vec2 d = uv_pos - center;
|
||||
float theta = atan(d.x, d.y);
|
||||
w = radians(w / 2.0);
|
||||
float l = distance(center, uv_pos);
|
||||
float vr = smooth_px(r0, l, dsr) - smooth_px(r1, l, dsr);
|
||||
float va = smooth_px(-w, theta, dsa) - smooth_px(w, theta, dsa);
|
||||
if (rc)
|
||||
{
|
||||
c *= vec4(1.0, 0.5, 0.5, 1.0);
|
||||
}
|
||||
return c * sqrt(va * vr);
|
||||
}
|
||||
|
||||
@@ -40,5 +57,6 @@ void rotate_vec2(inout vec2 vert, float a)
|
||||
|
||||
void fragment()
|
||||
{
|
||||
COLOR = sector(color, UV, inner_radius, outer_radius, width);
|
||||
float dr = band / 2.0;
|
||||
COLOR = sector(color, UV, radius - dr, radius + dr, width);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user