1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-27 22:41:56 +08:00

feat(WeaponCard): 添加升华按钮动画效果

- 为升华按钮添加开合动画效果
- 更新TextSwitchButton以支持动态文本切换
- 在Weapon.gd中添加动画播放逻辑
This commit is contained in:
2026-05-10 12:10:08 +08:00
parent 70a80c036e
commit 2c705fc4eb
3 changed files with 145 additions and 7 deletions
+131 -3
View File
@@ -65,6 +65,128 @@ corner_radius_top_left = 15
corner_radius_bottom_right = 15
corner_detail = 1
[sub_resource type="Animation" id="Animation_75t4v"]
length = 0.001
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("container/anchor/climatePanel:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("container/anchor/climatePanel:scale:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0)
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("container/anchor/climatePanel:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_mjvvk"]
resource_name = "openSub"
length = 0.25
step = 0.05
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("container/anchor/climatePanel:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 0, 0, 0, 0, 0),
"times": PackedFloat32Array(0, 0.25)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("container/anchor/climatePanel:scale:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 0, 0, 0, 0, 0),
"times": PackedFloat32Array(0, 0.25)
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("container/anchor/climatePanel:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.25),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_sbvs2"]
resource_name = "openSub"
length = 0.25
step = 0.05
tracks/0/type = "bezier"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("container/anchor/climatePanel:scale:x")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(0, 0, 0, 0, 0, 1, -0.25, 0, 0, 0),
"times": PackedFloat32Array(0, 0.25)
}
tracks/1/type = "bezier"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("container/anchor/climatePanel:scale:y")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(0, 0, 0, 0, 0, 1, -0.25, 0, 0, 0),
"times": PackedFloat32Array(0, 0.25)
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("container/anchor/climatePanel:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.25),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mjvvk"]
_data = {
&"RESET": SubResource("Animation_75t4v"),
&"closeSub": SubResource("Animation_mjvvk"),
&"openSub": SubResource("Animation_sbvs2")
}
[node name="WeaponCard" type="PanelContainer" unique_id=2085048785]
offset_right = 350.0
offset_bottom = 304.0
@@ -89,12 +211,14 @@ alignment = 1
layout_mode = 2
[node name="climatePanel" type="PanelContainer" parent="container/anchor" unique_id=653448699]
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = -1
anchor_left = 1.15
anchor_right = 1.15
offset_right = 40.0
offset_bottom = 40.0
offset_right = 92.0
offset_bottom = 79.0
scale = Vector2(1e-05, 1e-05)
theme_override_styles/panel = SubResource("StyleBoxFlat_mjvvk")
[node name="wrapper" type="VBoxContainer" parent="container/anchor/climatePanel" unique_id=1097849201]
@@ -148,7 +272,7 @@ alignment = 2
layout_mode = 2
theme = ExtResource("2_fwkd3")
[node name="climateBtn" type="Button" parent="container/wrapper" unique_id=390423731]
[node name="sublimateBtn" type="Button" parent="container/wrapper" unique_id=390423731]
unique_name_in_owner = true
layout_mode = 2
theme = ExtResource("2_fwkd3")
@@ -305,3 +429,7 @@ unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "→"
[node name="animator" type="AnimationPlayer" parent="." unique_id=900403095]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_mjvvk")
+5 -4
View File
@@ -6,8 +6,9 @@ class_name TextSwitchButton
@export var unpressedText: String = "未按下"
func _ready():
updateText()
toggled.connect(updateText)
updateText(button_pressed)
toggle_mode = true
toggled.connect(func(on: bool): updateText(on))
func updateText():
text = [unpressedText, pressedText][int(button_pressed)]
func updateText(on: bool):
text = [unpressedText, pressedText][int(on)]
+9
View File
@@ -41,6 +41,7 @@ enum EmitType {
@onready var sounds: Node2D = $%sounds
@onready var moveLeftBtn: Button = $%moveleft
@onready var moveRightBtn: Button = $%moveright
@onready var animator: AnimationPlayer = $%animator
@onready var autoUpdateBtn: Button = $%autoUpdateBtn
@onready var onceUpdateBtn: Button = $%onceUpdateBtn
@@ -48,6 +49,7 @@ enum EmitType {
@onready var extractBtn: Button = $%extractBtn
@onready var inlayBtn: Button = $%inlayBtn
@onready var sublimateBtn: Button = $%sublimateBtn
@onready var sublimateOptionsBox: Control = $%sublimateOptions
var cooldownTimer: CooldownTimer = null
@@ -63,6 +65,13 @@ func _ready():
cooldownTimer = CooldownTimer.new()
cooldownTimer.cooldown = cooldown
originalStore = store
sublimateBtn.toggled.connect(
func(on: bool):
if on:
animator.play("openSub")
else:
animator.play("closeSub")
)
autoUpdateBtn.toggled.connect(
func(on: bool):
autoUpdate = on