diff --git a/components/Bullets/NuclearBomb.tscn b/components/Bullets/NuclearBomb.tscn index 4733044..da35614 100644 --- a/components/Bullets/NuclearBomb.tscn +++ b/components/Bullets/NuclearBomb.tscn @@ -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="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="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"] animations = [{ @@ -32,7 +40,14 @@ indisDamage = true canDamageSelf = true 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") [node name="anchor" type="Node2D" parent="texture" index="1"] @@ -49,6 +64,5 @@ label_settings = SubResource("LabelSettings_asfas") horizontal_alignment = 1 vertical_alignment = 1 -[node name="hitbox" parent="." index="1"] -visible = false +[node name="hitbox" parent="." index="2"] shape = SubResource("CircleShape2D_nhppq") diff --git a/components/Effects/NuclearExplosion.tscn b/components/Effects/NuclearExplosion.tscn index 912a9ab..929d352 100644 --- a/components/Effects/NuclearExplosion.tscn +++ b/components/Effects/NuclearExplosion.tscn @@ -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="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"] 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"] 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 emission_shape = 1 emission_sphere_radius = 50.0 +angle_min = 1.07288e-05 +angle_max = 360.0 +angle_curve = SubResource("CurveTexture_p1xl1") spread = 30.0 initial_velocity_min = -600.0 initial_velocity_max = 600.0 gravity = Vector3(0, -400, 0) -scale_min = 3.0 -scale_max = 8.0 +scale_min = 5.0 +scale_max = 10.0 scale_curve = SubResource("CurveTexture_8kws8") color_ramp = SubResource("GradientTexture1D_vjiyn") color_initial_ramp = SubResource("GradientTexture1D_suafd") diff --git a/components/Weapons/NuclearBomb.tscn b/components/Weapons/NuclearBomb.tscn index 90c6a75..0399a32 100644 --- a/components/Weapons/NuclearBomb.tscn +++ b/components/Weapons/NuclearBomb.tscn @@ -12,8 +12,8 @@ quality = 4 typeTopic = 2 costBeachball = 100 store = { -"atk": 100, -"radius": 400.0 +"atk": 200, +"radius": 500.0 } storeType = { "atk": 1, diff --git a/scripts/Contents/Bullets/NuclearBomb.gd b/scripts/Contents/Bullets/NuclearBomb.gd index 196df0a..4cd49ee 100644 --- a/scripts/Contents/Bullets/NuclearBomb.gd +++ b/scripts/Contents/Bullets/NuclearBomb.gd @@ -3,6 +3,7 @@ class_name NuclearBomb @onready var label: Label = $"%label" @onready var anchor: Node2D = $"%anchor" +@onready var warn: ShaderStage = $"%warn" var countdown = 10000 var radius = 500 @@ -14,11 +15,13 @@ func spawn(): func ai(): speed *= 0.99 PresetBulletAI.forward(self, rotation) - label.text = "NUCLEAR WARNING %.1f" % ((countdown - timeLived()) / 1000) if timeLived() > countdown: tryDestroy() + else: + warn.size = Vector2.ONE * 2 * radius * (timeLived() / countdown) + label.text = "NUCLEAR WARNING %.1f" % ((countdown - timeLived()) / 1000) func destroy(_b): EffectController.create(preload("res://components/Effects/NuclearExplosion.tscn"), global_position).shot() 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) diff --git a/scripts/Statemachine/ShaderStage.gd b/scripts/Statemachine/ShaderStage.gd index 0459acf..f919637 100644 --- a/scripts/Statemachine/ShaderStage.gd +++ b/scripts/Statemachine/ShaderStage.gd @@ -5,6 +5,8 @@ class_name ShaderStage @export var size: Vector2 = Vector2.ONE * 100 @export var color: Color = Color.WHITE +func _ready(): + material = material.duplicate() func _draw(): draw_rect(Rect2(size / -2, size), color) func _process(_delta): diff --git a/shaders/FilledRing.gdshader b/shaders/FilledRing.gdshader new file mode 100644 index 0000000..1ba83df --- /dev/null +++ b/shaders/FilledRing.gdshader @@ -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