mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-30 07:12:29 +08:00
feat(武器): 增强核弹效果并添加警告动画
- 提升核弹的攻击力和爆炸半径 - 为核弹添加逐渐扩大的红色警告环 - 改进核爆炸效果,调整粒子参数和震动强度 - 新增填充环着色器用于警告效果
This commit is contained in:
@@ -1,8 +1,16 @@
|
|||||||
[gd_scene load_steps=7 format=3 uid="uid://6aetx86j5ue"]
|
[gd_scene load_steps=10 format=3 uid="uid://6aetx86j5ue"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_dpea6"]
|
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_dpea6"]
|
||||||
[ext_resource type="Texture2D" uid="uid://gs6jd1qxkl74" path="res://resources/bullets/nuclear-bomb/bomb.png" id="2_1kyo5"]
|
[ext_resource type="Texture2D" uid="uid://gs6jd1qxkl74" path="res://resources/bullets/nuclear-bomb/bomb.png" id="2_1kyo5"]
|
||||||
[ext_resource type="Script" path="res://scripts/Contents/Bullets/NuclearBomb.gd" id="2_f85ek"]
|
[ext_resource type="Script" path="res://scripts/Contents/Bullets/NuclearBomb.gd" id="2_f85ek"]
|
||||||
|
[ext_resource type="Shader" path="res://shaders/FilledRing.gdshader" id="4_dheb6"]
|
||||||
|
[ext_resource type="Script" path="res://scripts/Statemachine/ShaderStage.gd" id="4_wb270"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_s7tor"]
|
||||||
|
shader = ExtResource("4_dheb6")
|
||||||
|
shader_parameter/inner = 0.98
|
||||||
|
shader_parameter/outer = 1.0
|
||||||
|
shader_parameter/alpha = 0.1
|
||||||
|
|
||||||
[sub_resource type="SpriteFrames" id="SpriteFrames_mku0w"]
|
[sub_resource type="SpriteFrames" id="SpriteFrames_mku0w"]
|
||||||
animations = [{
|
animations = [{
|
||||||
@@ -32,7 +40,14 @@ indisDamage = true
|
|||||||
canDamageSelf = true
|
canDamageSelf = true
|
||||||
autoDestroyOnHitMap = false
|
autoDestroyOnHitMap = false
|
||||||
|
|
||||||
[node name="texture" parent="." index="0"]
|
[node name="warn" type="Node2D" parent="." index="0"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
material = SubResource("ShaderMaterial_s7tor")
|
||||||
|
script = ExtResource("4_wb270")
|
||||||
|
size = Vector2(0, 0)
|
||||||
|
color = Color(1, 0, 0, 1)
|
||||||
|
|
||||||
|
[node name="texture" parent="." index="1"]
|
||||||
sprite_frames = SubResource("SpriteFrames_mku0w")
|
sprite_frames = SubResource("SpriteFrames_mku0w")
|
||||||
|
|
||||||
[node name="anchor" type="Node2D" parent="texture" index="1"]
|
[node name="anchor" type="Node2D" parent="texture" index="1"]
|
||||||
@@ -49,6 +64,5 @@ label_settings = SubResource("LabelSettings_asfas")
|
|||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="hitbox" parent="." index="1"]
|
[node name="hitbox" parent="." index="2"]
|
||||||
visible = false
|
|
||||||
shape = SubResource("CircleShape2D_nhppq")
|
shape = SubResource("CircleShape2D_nhppq")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=21 format=3 uid="uid://8lxfkx47fn2c"]
|
[gd_scene load_steps=23 format=3 uid="uid://8lxfkx47fn2c"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bcvuuy2m0pke0" path="res://components/Abstracts/EffectBase.tscn" id="1_qngiw"]
|
[ext_resource type="PackedScene" uid="uid://bcvuuy2m0pke0" path="res://components/Abstracts/EffectBase.tscn" id="1_qngiw"]
|
||||||
[ext_resource type="AudioStream" uid="uid://b6lss67etwrl" path="res://resources/sounds/effect/nuclear-explosion.mp3" id="2_8nbe8"]
|
[ext_resource type="AudioStream" uid="uid://b6lss67etwrl" path="res://resources/sounds/effect/nuclear-explosion.mp3" id="2_8nbe8"]
|
||||||
@@ -11,6 +11,13 @@ point_count = 2
|
|||||||
[sub_resource type="CurveTexture" id="CurveTexture_afnd6"]
|
[sub_resource type="CurveTexture" id="CurveTexture_afnd6"]
|
||||||
curve = SubResource("Curve_dhavk")
|
curve = SubResource("Curve_dhavk")
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_8kj3m"]
|
||||||
|
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 2
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_p1xl1"]
|
||||||
|
curve = SubResource("Curve_8kj3m")
|
||||||
|
|
||||||
[sub_resource type="Gradient" id="Gradient_gan5i"]
|
[sub_resource type="Gradient" id="Gradient_gan5i"]
|
||||||
colors = PackedColorArray(1, 0.801445, 0.486847, 1, 1, 0.432907, 0, 1)
|
colors = PackedColorArray(1, 0.801445, 0.486847, 1, 1, 0.432907, 0, 1)
|
||||||
|
|
||||||
@@ -35,12 +42,15 @@ curve = SubResource("Curve_c6aew")
|
|||||||
particle_flag_disable_z = true
|
particle_flag_disable_z = true
|
||||||
emission_shape = 1
|
emission_shape = 1
|
||||||
emission_sphere_radius = 50.0
|
emission_sphere_radius = 50.0
|
||||||
|
angle_min = 1.07288e-05
|
||||||
|
angle_max = 360.0
|
||||||
|
angle_curve = SubResource("CurveTexture_p1xl1")
|
||||||
spread = 30.0
|
spread = 30.0
|
||||||
initial_velocity_min = -600.0
|
initial_velocity_min = -600.0
|
||||||
initial_velocity_max = 600.0
|
initial_velocity_max = 600.0
|
||||||
gravity = Vector3(0, -400, 0)
|
gravity = Vector3(0, -400, 0)
|
||||||
scale_min = 3.0
|
scale_min = 5.0
|
||||||
scale_max = 8.0
|
scale_max = 10.0
|
||||||
scale_curve = SubResource("CurveTexture_8kws8")
|
scale_curve = SubResource("CurveTexture_8kws8")
|
||||||
color_ramp = SubResource("GradientTexture1D_vjiyn")
|
color_ramp = SubResource("GradientTexture1D_vjiyn")
|
||||||
color_initial_ramp = SubResource("GradientTexture1D_suafd")
|
color_initial_ramp = SubResource("GradientTexture1D_suafd")
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ quality = 4
|
|||||||
typeTopic = 2
|
typeTopic = 2
|
||||||
costBeachball = 100
|
costBeachball = 100
|
||||||
store = {
|
store = {
|
||||||
"atk": 100,
|
"atk": 200,
|
||||||
"radius": 400.0
|
"radius": 500.0
|
||||||
}
|
}
|
||||||
storeType = {
|
storeType = {
|
||||||
"atk": 1,
|
"atk": 1,
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ class_name NuclearBomb
|
|||||||
|
|
||||||
@onready var label: Label = $"%label"
|
@onready var label: Label = $"%label"
|
||||||
@onready var anchor: Node2D = $"%anchor"
|
@onready var anchor: Node2D = $"%anchor"
|
||||||
|
@onready var warn: ShaderStage = $"%warn"
|
||||||
|
|
||||||
var countdown = 10000
|
var countdown = 10000
|
||||||
var radius = 500
|
var radius = 500
|
||||||
@@ -14,11 +15,13 @@ func spawn():
|
|||||||
func ai():
|
func ai():
|
||||||
speed *= 0.99
|
speed *= 0.99
|
||||||
PresetBulletAI.forward(self, rotation)
|
PresetBulletAI.forward(self, rotation)
|
||||||
label.text = "NUCLEAR WARNING %.1f" % ((countdown - timeLived()) / 1000)
|
|
||||||
if timeLived() > countdown:
|
if timeLived() > countdown:
|
||||||
tryDestroy()
|
tryDestroy()
|
||||||
|
else:
|
||||||
|
warn.size = Vector2.ONE * 2 * radius * (timeLived() / countdown)
|
||||||
|
label.text = "NUCLEAR WARNING %.1f" % ((countdown - timeLived()) / 1000)
|
||||||
func destroy(_b):
|
func destroy(_b):
|
||||||
EffectController.create(preload("res://components/Effects/NuclearExplosion.tscn"), global_position).shot()
|
EffectController.create(preload("res://components/Effects/NuclearExplosion.tscn"), global_position).shot()
|
||||||
hitbox.disabled = false
|
hitbox.disabled = false
|
||||||
CameraManager.shake(5000, 250, func(_c, t, r): return t * r) # 震屏强度随进度递减
|
CameraManager.shake(5000, 500, func(_c, t, r): return t * r) # 震屏强度随进度递减
|
||||||
await TickTool.frame(5)
|
await TickTool.frame(5)
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ class_name ShaderStage
|
|||||||
@export var size: Vector2 = Vector2.ONE * 100
|
@export var size: Vector2 = Vector2.ONE * 100
|
||||||
@export var color: Color = Color.WHITE
|
@export var color: Color = Color.WHITE
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
material = material.duplicate()
|
||||||
func _draw():
|
func _draw():
|
||||||
draw_rect(Rect2(size / -2, size), color)
|
draw_rect(Rect2(size / -2, size), color)
|
||||||
func _process(_delta):
|
func _process(_delta):
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
shader_type canvas_item;
|
||||||
|
uniform float inner:hint_range(0.0, 1.0, 0.01)=0.5;
|
||||||
|
uniform float outer:hint_range(0.0, 1.0, 0.01)=0.75;
|
||||||
|
uniform float alpha:hint_range(0.0, 1.0, 0.1)=0.5;
|
||||||
|
void fragment() {
|
||||||
|
vec2 center=vec2(0.5);
|
||||||
|
float dist=distance(UV,center)*2.0;
|
||||||
|
if(dist<inner){
|
||||||
|
COLOR.a*=alpha;
|
||||||
|
}else{
|
||||||
|
COLOR.a*=float(inner<dist&&dist<outer);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user