1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-13 07:07:12 +08:00

feat: 添加炸弹效果和着色器,创建新的Bomb效果和相关资源

This commit is contained in:
2025-08-27 14:55:34 +08:00
parent 28b86e8b1e
commit 9127692146
11 changed files with 86 additions and 16 deletions
+1
View File
@@ -18,6 +18,7 @@ _data = {
script = ExtResource("1_pklpq")
[node name="texture" type="AnimatedSprite2D" parent="."]
unique_name_in_owner = true
sprite_frames = SubResource("SpriteFrames_vypy3")
[node name="animator" type="AnimationPlayer" parent="texture"]
+13 -4
View File
@@ -2,9 +2,7 @@
[ext_resource type="Script" path="res://scripts/Statemachine/EffectController.gd" id="1_pt2rk"]
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_tgxns"]
particle_flag_disable_z = true
gravity = Vector3(0, 98, 0)
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7cv4k"]
[node name="EffectBase" type="Node2D"]
script = ExtResource("1_pt2rk")
@@ -12,5 +10,16 @@ script = ExtResource("1_pt2rk")
[node name="particles" type="GPUParticles2D" parent="."]
unique_name_in_owner = true
amount = 30
process_material = SubResource("ParticleProcessMaterial_tgxns")
process_material = SubResource("ShaderMaterial_7cv4k")
explosiveness = 1.0
[node name="stage" type="ColorRect" parent="."]
unique_name_in_owner = true
offset_left = -50.0
offset_top = -50.0
offset_right = 50.0
offset_bottom = 50.0
color = Color(1, 1, 1, 0)
[node name="animator" type="AnimationPlayer" parent="stage"]
unique_name_in_owner = true
+2 -4
View File
@@ -8,9 +8,6 @@
[sub_resource type="ShaderMaterial" id="ShaderMaterial_5n8cv"]
shader = ExtResource("2_h6cxi")
shader_parameter/color = Color(0.654902, 1, 1, 1)
shader_parameter/laser_width = 0.01
shader_parameter/soft_edge = 0.5
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_y85id"]
height = 300.0
@@ -32,9 +29,10 @@ sprite_frames = SubResource("SpriteFrames_yip5k")
material = SubResource("ShaderMaterial_5n8cv")
offset_left = -10.0
offset_top = -300.0
offset_right = 10.0
offset_right = 19.0
[node name="hitbox" parent="." index="1"]
visible = false
position = Vector2(150, 0)
rotation = 1.5708
shape = SubResource("CapsuleShape2D_y85id")
+2 -1
View File
@@ -59,7 +59,7 @@ tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"handle_modes": PackedInt32Array(0, 0),
"points": PackedFloat32Array(-100, -0.25, 0, 0.25, 0, -44, -0.25, 0, 0.25, 0),
"points": PackedFloat32Array(-200, -0.25, 0, 0.25, 0, -44, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0.75, 1)
}
@@ -121,6 +121,7 @@ size = Vector2(10, 10)
[node name="Pencil" instance=ExtResource("1_anksp")]
script = ExtResource("2_4w6n2")
lifeTime = 3000.0
[node name="texture" parent="." index="0"]
position = Vector2(0, -44)
+16
View File
@@ -0,0 +1,16 @@
[gd_scene load_steps=4 format=3 uid="uid://bsqq3oqcidjve"]
[ext_resource type="PackedScene" uid="uid://bcvuuy2m0pke0" path="res://components/Abstracts/EffectBase.tscn" id="1_6fayo"]
[ext_resource type="Shader" path="res://shaders/Bomb.gdshader" id="2_fmma6"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1h4c2"]
shader = ExtResource("2_fmma6")
shader_parameter/explosion_radius = 0.0
shader_parameter/explosion_intensity = 1.0
shader_parameter/explosion_color = Color(1, 0.5, 0, 1)
shader_parameter/time_scale = 1.0
[node name="EffectBase" instance=ExtResource("1_6fayo")]
[node name="stage" parent="." index="1"]
material = SubResource("ShaderMaterial_1h4c2")
+1 -1
View File
@@ -2,7 +2,7 @@ extends BulletBase
class_name Diamond
func ai():
var tracing = Time.get_ticks_msec() - spawnInWhen < 1000
var tracing = timeLived() < 1000
if tracing:
rotation = lerp_angle(rotation, position.angle_to_point(launcher.currentFocusedBoss.position), 0.1)
canDamageSelf = !tracing
+6
View File
@@ -1 +1,7 @@
extends BulletBase
func spawn():
await TickTool.millseconds(1000)
hitbox.disabled = false
func ai():
texture.global_rotation = 0
+2 -1
View File
@@ -19,7 +19,8 @@ func ai():
func attack(type):
if type == 0:
var weaponPos = findWeaponAnchor("normal")
return BulletBase.generate(preload("res://components/Bullets/PurpleCrystal.tscn"), self, weaponPos, (get_global_mouse_position() - weaponPos).angle())
return BulletBase.generate(preload("res://components/Bullets/Pencil.tscn"), self, weaponPos, (get_global_mouse_position() - weaponPos).angle())
# return BulletBase.generate(preload("res://components/Bullets/PurpleCrystal.tscn"), self, weaponPos, (get_global_mouse_position() - weaponPos).angle())
func sprint():
move(Vector2(
Input.get_axis("m_left", "m_right"),
+5 -2
View File
@@ -12,8 +12,9 @@ class_name BulletBase
@export var canDamageSelf: bool = false # 是否可以伤害发射者
@export var needEnergy: float = 4.0 # 发射时需要消耗的能量
@onready var animator = $"%animator"
@onready var hitbox = $"%hitbox"
@onready var animator: AnimationPlayer = $"%animator"
@onready var hitbox: CollisionShape2D = $"%hitbox"
@onready var texture: AnimatedSprite2D = $"%texture"
var launcher: EntityBase = null
var spawnInWhen: float = 0
@@ -51,6 +52,8 @@ func forward(direction: Vector2):
position += direction.normalized() * fields.get(FieldStore.Bullet.SPEED) * GameRule.bulletSpeedMultiplier
func fullPenerate():
return fields.get(FieldStore.Bullet.PENERATE) + launcher.fields.get(FieldStore.Entity.PENERATE)
func timeLived():
return Time.get_ticks_msec() - spawnInWhen
func ai():
pass
+31
View File
@@ -0,0 +1,31 @@
shader_type canvas_item;
uniform float explosion_radius : hint_range(0.0, 1.0) = 0.0;
uniform float explosion_intensity : hint_range(0.0, 2.0) = 1.0;
uniform vec4 explosion_color : source_color = vec4(1.0, 0.5, 0.0, 1.0);
uniform float time_scale = 1.0;
void fragment() {
// 计算当前像素到中心的距离
vec2 center = vec2(0.5, 0.5);
float dist = distance(UV, center);
// 使用TIME创建随时间变化的爆炸效果
float time = TIME * time_scale;
float explosion = smoothstep(explosion_radius, explosion_radius - 0.2, dist) * explosion_intensity;
// 添加一些噪声使爆炸看起来更自然
float noise = sin(dist * 20.0 - time * 5.0) * 0.1;
explosion += noise;
// 计算最终颜色,混合原始纹理和爆炸效果
vec4 original_color = texture(TEXTURE, UV);
vec4 final_color = mix(original_color, explosion_color, explosion);
// 添加一些发光效果
float glow = exp(-dist * 5.0) * explosion_intensity;
final_color.rgb += glow * explosion_color.rgb;
final_color.a;
// 输出最终颜色
COLOR = final_color;
}
+7 -3
View File
@@ -3,10 +3,14 @@ uniform vec4 color: source_color;
uniform float laser_width: hint_range(0.01, 1.0) = 0;
uniform float soft_edge: hint_range(0.0, 0.5) = 0.5;
void fragment() {
float dist = abs(UV.x - 0.5);
float textureWidth=float(textureSize(TEXTURE,0).x);
float textureHeight=float(textureSize(TEXTURE,0).y);
float radius=textureHeight/2.0;
float radiusU=radius*TEXTURE_PIXEL_SIZE;
float dist = distance(vec2(0.5,clamp(UV.y,radiusU,1.0-radiusU)),UV);
float core = 1.0 - smoothstep(0.0, laser_width, dist);
float edge = 1.0 - smoothstep(laser_width, laser_width + soft_edge, dist);
float alpha = max(core, edge);
float edge=1.0 - smoothstep(laser_width, laser_width + soft_edge, dist);
float alpha = max(core, edge);
COLOR = color;
COLOR.a = alpha;
}