В процессе. Добавление третьего состояния для плоской кнопки
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 397 B After Width: | Height: | Size: 355 B |
Binary file not shown.
|
Before Width: | Height: | Size: 521 B After Width: | Height: | Size: 477 B |
@@ -1,10 +1,66 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://da7w3vkhadfwe"]
|
||||
[gd_scene load_steps=13 format=3 uid="uid://da7w3vkhadfwe"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/nine-patch-button.gd" id="1_mm6jw"]
|
||||
[ext_resource type="Texture2D" uid="uid://ct0ajcwno03h7" path="res://data/кнопка-квадрат-0.png" id="2_yle0i"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="1"]
|
||||
|
||||
[sub_resource type="Shader" id="Shader_2bftm"]
|
||||
code = "shader_type canvas_item;
|
||||
|
||||
uniform vec4 color_gap = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
uniform vec4 color_stripe = vec4(0.3, 0.3, 0.3, 0.7);
|
||||
uniform float divisions = 50.0; // increase for more stripe density
|
||||
uniform float stripe_bias = 2.0; // 1.0 means no stripes; 2.0 means stripes and gaps are equal size
|
||||
uniform float speed = 0.01;
|
||||
uniform float angle = 0.7854; // in radians
|
||||
uniform bool disabled = false;
|
||||
|
||||
void fragment()
|
||||
{
|
||||
float w = cos(angle) * UV.x + sin(angle) * UV.y - speed * TIME;
|
||||
if ((floor(mod(w * divisions, stripe_bias)) < 0.0001) && disabled)
|
||||
{
|
||||
COLOR = color_gap;
|
||||
}
|
||||
else
|
||||
{
|
||||
COLOR = color_stripe;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_hhdyc"]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource("Shader_2bftm")
|
||||
shader_parameter/color_gap = Vector4(1, 1, 1, 0.3)
|
||||
shader_parameter/color_stripe = Vector4(0, 0, 1, 0)
|
||||
shader_parameter/divisions = 50.0
|
||||
shader_parameter/stripe_bias = 2.0
|
||||
shader_parameter/speed = 0.0
|
||||
shader_parameter/angle = 0.7854
|
||||
shader_parameter/disabled = false
|
||||
|
||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_6nup5"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_uyl5d"]
|
||||
script/source = "@tool
|
||||
|
||||
extends Sprite2D
|
||||
|
||||
|
||||
@export var speed: float = 0.01:
|
||||
set(val): material.set('shader_parameter/speed', val)
|
||||
get: return material.get('shader_parameter/speed')
|
||||
|
||||
|
||||
@export var disabled: bool = false:
|
||||
set(val): material.set('shader_parameter/disabled', val)
|
||||
get: return material.get('shader_parameter/disabled')
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="6"]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="2"]
|
||||
@@ -22,18 +78,7 @@ theme_override_styles/panel = SubResource("1")
|
||||
script = ExtResource("1_mm6jw")
|
||||
toggle_mode = true
|
||||
|
||||
[node name="button" type="Button" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_styles/normal = SubResource("6")
|
||||
theme_override_styles/hover = SubResource("2")
|
||||
theme_override_styles/pressed = SubResource("3")
|
||||
theme_override_styles/disabled = SubResource("5")
|
||||
theme_override_styles/focus = SubResource("4")
|
||||
toggle_mode = true
|
||||
clip_text = true
|
||||
|
||||
[node name="state" type="NinePatchRect" parent="."]
|
||||
show_behind_parent = true
|
||||
layout_mode = 2
|
||||
texture = ExtResource("2_yle0i")
|
||||
patch_margin_left = 10
|
||||
@@ -43,4 +88,26 @@ patch_margin_bottom = 10
|
||||
axis_stretch_horizontal = 2
|
||||
axis_stretch_vertical = 2
|
||||
|
||||
[node name="back" type="Sprite2D" parent="."]
|
||||
material = SubResource("ShaderMaterial_hhdyc")
|
||||
scale = Vector2(30, 30)
|
||||
texture = SubResource("PlaceholderTexture2D_6nup5")
|
||||
centered = false
|
||||
script = SubResource("GDScript_uyl5d")
|
||||
speed = 0.0
|
||||
|
||||
[node name="button" type="Button" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 4
|
||||
theme_override_styles/normal = SubResource("6")
|
||||
theme_override_styles/hover = SubResource("2")
|
||||
theme_override_styles/pressed = SubResource("3")
|
||||
theme_override_styles/disabled = SubResource("5")
|
||||
theme_override_styles/focus = SubResource("4")
|
||||
toggle_mode = true
|
||||
clip_text = true
|
||||
|
||||
[connection signal="resized" from="." to="." method="_on_resized"]
|
||||
[connection signal="visibility_changed" from="back" to="back" method="_on_visibility_changed"]
|
||||
[connection signal="toggled" from="button" to="." method="_on_button_toggled"]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
extends PanelContainer
|
||||
|
||||
## Кнопка текстурная на два состояния
|
||||
var save_modulate: Color
|
||||
|
||||
|
||||
@export var texture_state0: Texture2D = preload('res://data/кнопка-квадрат-0.png'):
|
||||
@@ -19,7 +19,14 @@ extends PanelContainer
|
||||
|
||||
|
||||
@export var disabled: bool = false:
|
||||
set(val): $button.set_disabled(val)
|
||||
set(val):
|
||||
$button.set_disabled(val)
|
||||
$back.disabled = val
|
||||
if val:
|
||||
save_modulate = $state.modulate
|
||||
$state.modulate *= Color(1.0, 1.0, 1.0, 0.5)
|
||||
else:
|
||||
$state.modulate = save_modulate
|
||||
get: return $button.disabled
|
||||
|
||||
|
||||
@@ -37,11 +44,18 @@ extends PanelContainer
|
||||
|
||||
func set_text(val: String): $button.set_text(val)
|
||||
func set_pressed(val: bool): $button.set_pressed(val)
|
||||
func set_disabled(val: bool): $button.set_disabled(val)
|
||||
func set_disabled(val: bool): disabled = val
|
||||
func button_connect(button_signal: String, proc: Callable): $button.connect(button_signal, proc)
|
||||
func get_text(): return $button.get_text()
|
||||
func is_pressed(): return $button.is_pressed()
|
||||
func is_toggle_mode(): return $button.is_toggle_mode()
|
||||
func _on_resized() -> void: $back.scale = size
|
||||
|
||||
|
||||
|
||||
func _enter_tree() -> void:
|
||||
$back.scale = size
|
||||
save_modulate = modulate
|
||||
|
||||
|
||||
func set_toggle_mode (val: bool):
|
||||
|
||||
Reference in New Issue
Block a user