add noise shader to laser graphics

This commit is contained in:
Haze Weathers 2023-03-21 17:19:26 -04:00
parent 90cc0f0550
commit 5a9751946c
3 changed files with 51 additions and 2 deletions

View file

@ -6,6 +6,7 @@ export var laser_time = 0.5
onready var line = $Laser onready var line = $Laser
onready var cast = $RayCast2D onready var cast = $RayCast2D
onready var timer = $Timer onready var timer = $Timer
onready var sparks = $SparkParticles
func _ready(): func _ready():
_disable_laser() _disable_laser()
@ -14,11 +15,15 @@ func _physics_process(delta):
if cast.is_colliding(): if cast.is_colliding():
line.points[1].y = line.to_local(cast.get_collision_point()).y line.points[1].y = line.to_local(cast.get_collision_point()).y
line.visible = true line.visible = true
sparks.global_position.y = cast.get_collision_point().y
sparks.emitting = true
var collider = cast.get_collider() var collider = cast.get_collider()
if collider.is_in_group("player"): if collider.is_in_group("player"):
collider.get_parent().die() collider.get_parent().die()
else: else:
line.visible = false line.visible = false
sparks.emitting = false
func _enable_laser(): func _enable_laser():
cast.enabled = true cast.enabled = true

View file

@ -1,11 +1,22 @@
[gd_scene load_steps=3 format=2] [gd_scene load_steps=7 format=2]
[ext_resource path="res://graphics/enemy/laser_wall.png" type="Texture" id=1] [ext_resource path="res://graphics/enemy/laser_wall.png" type="Texture" id=1]
[ext_resource path="res://objects/enemy/laser_wall.gd" type="Script" id=2] [ext_resource path="res://objects/enemy/laser_wall.gd" type="Script" id=2]
[ext_resource path="res://shaders/color_noise.gdshader" type="Shader" id=3]
[ext_resource path="res://graphics/particles/dust.png" type="Texture" id=4]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 3 )
shader_param/animate_noise = true
shader_param/noise_intensity = 0.5
[sub_resource type="Curve" id=2]
_data = [ Vector2( 0, 1 ), 0.0, -1.45746, 0, 0, Vector2( 1, 0 ), 0.00323196, 0.0, 0, 0 ]
[node name="LaserWall" type="Node2D"] [node name="LaserWall" type="Node2D"]
script = ExtResource( 2 ) script = ExtResource( 2 )
blood = false blood = false
speed = 16
flip_sprite = false flip_sprite = false
[node name="Sprite" type="Sprite" parent="."] [node name="Sprite" type="Sprite" parent="."]
@ -13,7 +24,7 @@ texture = ExtResource( 1 )
centered = false centered = false
[node name="Laser" type="Line2D" parent="."] [node name="Laser" type="Line2D" parent="."]
visible = false material = SubResource( 1 )
position = Vector2( 4, 2 ) position = Vector2( 4, 2 )
points = PoolVector2Array( 0, 0, 0, 8 ) points = PoolVector2Array( 0, 0, 0, 8 )
width = 2.0 width = 2.0
@ -27,3 +38,19 @@ collide_with_areas = true
[node name="Timer" type="Timer" parent="."] [node name="Timer" type="Timer" parent="."]
process_mode = 0 process_mode = 0
one_shot = true one_shot = true
[node name="SparkParticles" type="CPUParticles2D" parent="."]
position = Vector2( 4, 0 )
amount = 16
lifetime = 0.5
texture = ExtResource( 4 )
spread = 180.0
gravity = Vector2( 0, 0 )
initial_velocity = 30.0
initial_velocity_random = 0.5
damping = 50.0
angle = 720.0
angle_random = 1.0
scale_amount = 0.3
scale_amount_curve = SubResource( 2 )
color = Color( 1, 1, 0.290196, 1 )

View file

@ -0,0 +1,17 @@
shader_type canvas_item;
uniform bool animate_noise = false;
uniform float noise_intensity = 1.0;
float random (vec2 uv) {
return fract(sin(dot(uv.xy,
vec2(12.9898,78.233))) * 43758.5453123);
}
void fragment() {
vec2 noise_uv = SCREEN_UV + TIME * float(animate_noise);
float noise = random(noise_uv);
noise = mix(1.0 - noise_intensity, 1.0, noise);
COLOR = vec4(COLOR.rgb * noise, COLOR.a);
}