diff --git a/objects/enemy/laser_wall.gd b/objects/enemy/laser_wall.gd index a953219..2d50fe3 100644 --- a/objects/enemy/laser_wall.gd +++ b/objects/enemy/laser_wall.gd @@ -6,6 +6,7 @@ export var laser_time = 0.5 onready var line = $Laser onready var cast = $RayCast2D onready var timer = $Timer +onready var sparks = $SparkParticles func _ready(): _disable_laser() @@ -14,11 +15,15 @@ func _physics_process(delta): if cast.is_colliding(): line.points[1].y = line.to_local(cast.get_collision_point()).y line.visible = true + sparks.global_position.y = cast.get_collision_point().y + sparks.emitting = true + var collider = cast.get_collider() if collider.is_in_group("player"): collider.get_parent().die() else: line.visible = false + sparks.emitting = false func _enable_laser(): cast.enabled = true diff --git a/objects/enemy/laser_wall.tscn b/objects/enemy/laser_wall.tscn index a566d08..205a500 100644 --- a/objects/enemy/laser_wall.tscn +++ b/objects/enemy/laser_wall.tscn @@ -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://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"] script = ExtResource( 2 ) blood = false +speed = 16 flip_sprite = false [node name="Sprite" type="Sprite" parent="."] @@ -13,7 +24,7 @@ texture = ExtResource( 1 ) centered = false [node name="Laser" type="Line2D" parent="."] -visible = false +material = SubResource( 1 ) position = Vector2( 4, 2 ) points = PoolVector2Array( 0, 0, 0, 8 ) width = 2.0 @@ -27,3 +38,19 @@ collide_with_areas = true [node name="Timer" type="Timer" parent="."] process_mode = 0 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 ) diff --git a/shaders/color_noise.gdshader b/shaders/color_noise.gdshader new file mode 100644 index 0000000..ae90cb4 --- /dev/null +++ b/shaders/color_noise.gdshader @@ -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); +} \ No newline at end of file