1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat(技能图标): 添加技能冷却显示功能

- 新增 SkillIcon.gd 脚本用于管理武器技能图标显示
- 修改 CooldownProgress.gdshader 增加背景透明度参数
- 更新 CooldownTimer.gd 添加时间计算方法
- 重构 SkillIconBase.tscn 场景以支持新功能
This commit is contained in:
2025-09-06 15:04:32 +08:00
parent 41198cb51a
commit e4d04ff599
4 changed files with 22 additions and 5 deletions
+7 -3
View File
@@ -1,6 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://ufl4kek8hrmt"]
[gd_scene load_steps=6 format=3 uid="uid://ufl4kek8hrmt"]
[ext_resource type="Shader" path="res://shaders/CooldownProgress.gdshader" id="1_jaivk"]
[ext_resource type="Script" path="res://scripts/Statemachine/SkillIcon.gd" id="1_l7say"]
[ext_resource type="Texture2D" uid="uid://cp4ypuarjoshp" path="res://resources/skillIcons/purple-crystal.png" id="2_hh1bl"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a60wd"]
@@ -16,15 +17,18 @@ corner_radius_bottom_left = 15
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ew32n"]
shader = ExtResource("1_jaivk")
shader_parameter/progress = 0.58
shader_parameter/progress = 0.25
shader_parameter/backAlpha = 0.25
[node name="SkillIconBase" type="PanelContainer"]
custom_minimum_size = Vector2(30, 30)
offset_right = 30.0
offset_bottom = 30.0
theme_override_styles/panel = SubResource("StyleBoxFlat_a60wd")
script = ExtResource("1_l7say")
[node name="icon" type="TextureRect" parent="."]
[node name="texture" type="TextureRect" parent="."]
unique_name_in_owner = true
material = SubResource("ShaderMaterial_ew32n")
layout_mode = 2
texture = ExtResource("2_hh1bl")
+3 -1
View File
@@ -4,9 +4,11 @@ var cooldown: float = 100
var lastStart: int = 0
func isCooldowned():
return WorldManager.getTime() - lastStart >= cooldown
return timeSinceLastStart() >= cooldown
func start():
var state = isCooldowned()
if state:
lastStart = WorldManager.getTime()
return state
func timeSinceLastStart():
return WorldManager.getTime() - lastStart
+10
View File
@@ -0,0 +1,10 @@
extends PanelContainer
@export var weapon: Weapon = null;
@onready var textureRect = $"%texture"
func _physics_process(_delta):
if is_instance_valid(weapon):
textureRect.texture = weapon.avatarTexture
textureRect.material.set_shader_parameter("progress", clamp(weapon.cooldownTimer.timeSinceLastStart() / weapon.cooldownTimer.cooldown, 0, 1))
+2 -1
View File
@@ -1,8 +1,9 @@
shader_type canvas_item;
uniform float progress:hint_range(0.0, 1.0, 0.01)=0.5;
uniform float backAlpha:hint_range(0.0, 1.0, 0.01)=0.25;
void fragment() {
COLOR=texture(TEXTURE,UV);
if(UV.y>=progress){
COLOR.a*=0.5;
COLOR.a*=backAlpha;
}
}