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:
@@ -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"]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
extends BulletBase
|
||||
|
||||
func spawn():
|
||||
await TickTool.millseconds(1000)
|
||||
hitbox.disabled = false
|
||||
func ai():
|
||||
texture.global_rotation = 0
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user