diff --git a/scenes/bullet.gd b/scenes/bullet.gd index 8062cef..8d56db0 100644 --- a/scenes/bullet.gd +++ b/scenes/bullet.gd @@ -1,11 +1,16 @@ extends Area2D +@onready var bullet = $Bullet/Sprite2D + @export var speed = -250 +var shader_active = false +var pause = false func start(pos): position = pos func _process(delta): + if pause == true: return position.y += speed * delta # Signal checks to see if the bullet leaves the viewport then removes bullet. @@ -13,7 +18,32 @@ func _on_visible_on_screen_notifier_2d_screen_exited() -> void: queue_free() func _on_area_entered(area: Area2D) -> void: - if area.is_in_group("enemies"): - area.explode() - queue_free() - + + var enemies = get_tree().get_nodes_in_group("enemies") + + for enemy in enemies: + match enemy.enemy_type: + "crt": + if area.is_in_group("enemies"): + if enemy.vulnerable == true: + area.explode() + queue_free() + if enemy.vulnerable == false: + print("blocked!") + enemy.block() + #await bullet_fx() + queue_free() + + _: + if area.is_in_group("enemies"): + area.explode() + queue_free() + +#func bullet_fx(): + #shader_active = true + #bullet.material.set_shader_parameter("toggle", 1.0) + #pause = true + #await get_tree().create_timer(1).timeout + #pause = false + #shader_active = false + #bullet.material.set_shader_parameter("toggle", 0.0) diff --git a/scenes/bullet.tscn b/scenes/bullet.tscn index 6ecfa68..bd34070 100644 --- a/scenes/bullet.tscn +++ b/scenes/bullet.tscn @@ -1,9 +1,14 @@ [gd_scene format=3 uid="uid://bwxxdrdvo3le0"] [ext_resource type="Script" uid="uid://c6oorp45vpqpc" path="res://scenes/bullet.gd" id="1_v8qja"] +[ext_resource type="Shader" uid="uid://dfywtah53il1m" path="res://shaders/player_hit.gdshader" id="2_eoqba"] [ext_resource type="Texture2D" uid="uid://bnc77g20gb20h" path="res://sprites/david-head.png" id="2_y25gk"] [ext_resource type="Texture2D" uid="uid://dwd6pycecukqb" path="res://sprites/david-headshot.png" id="3_l5glv"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_qncy5"] +shader = ExtResource("2_eoqba") +shader_parameter/toggle = 0.0 + [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_eoqba"] particle_flag_disable_z = true gravity = Vector3(0, 98, 0) @@ -16,6 +21,7 @@ z_index = -1 script = ExtResource("1_v8qja") [node name="Sprite2D" type="Sprite2D" parent="." unique_id=29933687] +material = SubResource("ShaderMaterial_qncy5") position = Vector2(1.1920929e-07, 2.9802322e-07) scale = Vector2(1.1111112, 1.1764706) texture = ExtResource("2_y25gk") diff --git a/scenes/enemy_chicken.gd b/scenes/enemy_chicken.gd index fa4593a..397e8d8 100644 --- a/scenes/enemy_chicken.gd +++ b/scenes/enemy_chicken.gd @@ -1,5 +1,7 @@ extends Area2D +var enemy_type: String = "chicken" + var bullet_scene = preload("res://scenes/enemy_bullet.tscn") var start_pos = Vector2.ZERO var speed = 0 diff --git a/scenes/enemy_crt.gd b/scenes/enemy_crt.gd index 96ef23d..ecc5bf5 100644 --- a/scenes/enemy_crt.gd +++ b/scenes/enemy_crt.gd @@ -1,28 +1,40 @@ extends Area2D +var enemy_type: String = "crt" + var bullet_scene = preload("res://scenes/enemy_bullet.tscn") var start_pos = Vector2.ZERO +var move_break var speed = 0 var direction = Vector2(0,1) var tween_speed: float = 1.4 var exploding = false +var can_shoot = true +var vulnerable = true +var stunned = false +var blocking = false + +var shader_active = false var enemy_move_aggression = randf_range(5, 20) var enemy_shoot_aggression = randf_range(4, 20) +const TILE = 32 + @onready var screensize = get_viewport_rect().size @onready var timer = $MoveTimer - +@onready var crt = $EnemyCRT/CRT func _ready(): timer.start() func start(pos): speed = 2 - var pos_mod = randf_range(-32,32) #modify the start position randomly - position = Vector2(pos.x + pos_mod, -pos.y) #add the modifier - #position = Vector2(pos.x, -pos.y) + $CRT.frame = 0 + #var pos_mod = randf_range(-TILE,TILE) #modify the start position randomly + #position = Vector2(pos.x + pos_mod, -pos.y) #add the modifier + position = Vector2(pos.x, -pos.y) start_pos = pos await get_tree().create_timer(randf_range(0.25, 0.55)).timeout var tween = create_tween().set_trans(Tween.TRANS_BACK) @@ -38,65 +50,74 @@ func _on_timer_timeout(): $DirectionTimer.start() func _on_direction_timer_timeout(): - direction = Vector2(randf_range(-1, 1), randf_range(0, 1)) - direction = direction.snapped(Vector2(0,1)) - match direction: - Vector2(0,1): - $EnemyCRT.set_frame(0) - Vector2(1,0): - $EnemyCRT.set_frame(1) - Vector2(-1,0): - $EnemyCRT.set_frame(2) + var move_direction = int(randf_range(0,2)) + match move_direction: + 0: + $CRT.frame = 0 + direction = Vector2(0,1) + can_shoot = true + vulnerable = true + 1: + $CRT.frame = 1 + direction = Vector2(1,0) + can_shoot = false + vulnerable = false + 2: + $CRT.frame = 2 + direction = Vector2(-1,0) + can_shoot = false + vulnerable = false + $DirectionTimer.start() func _on_shoot_timer_timeout(): - var b = bullet_scene.instantiate() - get_tree().root.add_child(b) - b.start(position) - $ShootTimer.wait_time = randf_range(4, 20) - $ShootTimer.start() + if can_shoot == true: + var b = bullet_scene.instantiate() + get_tree().root.add_child(b) + b.start(position) + $ShootTimer.wait_time = randf_range(4, 20) + $ShootTimer.start() + + else: + $ShootTimer.start() func _process(delta): + + if stunned == true: + return + position += direction * speed * delta - + + if position.x > screensize.x + 32: + start(start_pos) - - - - #direction = direction.snapped(Vector2(1, 0)) # Snap to horizontal - #direction = direction.snapped(Vector2(0, 1)) # Snap to vertical - - - if position.y > screensize.y + 32: start(start_pos) - - #if position.x > screensize.x + 32: - #start(start_pos) - # - #if position.x < screensize.x + 32: - #start(start_pos) - - #if Input.is_action_just_pressed("ui_right"): - #direction = Vector2(1, 0) # Move right - #elif Input.is_action_just_pressed("ui_left"): - #direction = Vector2(-1, 0) # Move left - #elif Input.is_action_just_pressed("ui_up"): - #direction = Vector2(0, -1) # Move up - #elif Input.is_action_just_pressed("ui_down"): - #direction = Vector2(0, 1) # Move down - - - + func explode(): if exploding: return exploding = true EventBus.enemy_hit.emit(5) speed = 0 + $ImpactCRT.play() $AnimationPlayer.play("explode") #set_deferred("monitoring", false) await $AnimationPlayer.animation_finished queue_free() EventBus.enemy_died.emit() + +func block(): + if blocking: return + blocking = true + stunned = true + await get_tree().create_timer(5).timeout + shader_active = true + crt.material.set_shader_parameter("toggle", 1.0) + await get_tree().create_timer(1).timeout + shader_active = false + crt.material.set_shader_parameter("toggle", 0.0) + stunned = false + + diff --git a/scenes/enemy_crt.tscn b/scenes/enemy_crt.tscn index 85b9794..2e77193 100644 --- a/scenes/enemy_crt.tscn +++ b/scenes/enemy_crt.tscn @@ -2,8 +2,14 @@ [ext_resource type="Script" uid="uid://7ls7phfcupal" path="res://scenes/enemy_crt.gd" id="1_ugdur"] [ext_resource type="Texture2D" uid="uid://b5pswf7r8b7j4" path="res://sprites/crt.png" id="2_emiuq"] +[ext_resource type="Shader" uid="uid://dfywtah53il1m" path="res://shaders/player_hit.gdshader" id="2_gas3w"] [ext_resource type="Texture2D" uid="uid://cy4jggxmnohbb" path="res://sprites/chicken.png" id="2_ugdur"] [ext_resource type="Texture2D" uid="uid://bm7fgqwqfqmf4" path="res://sprites/explosion_pallete-swap.png" id="3_emiuq"] +[ext_resource type="AudioStream" uid="uid://cbi5q575w1g1n" path="res://sounds/CRT_IMPACT.wav" id="6_gas3w"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_gas3w"] +shader = ExtResource("2_gas3w") +shader_parameter/toggle = 0.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_4gyqm"] size = Vector2(32.727318, 27.272764) @@ -13,7 +19,7 @@ length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/path = NodePath("CRT:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -25,7 +31,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:texture") +tracks/1/path = NodePath("CRT:texture") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -37,7 +43,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/path = NodePath("CRT:hframes") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -49,7 +55,7 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/path = NodePath("CRT:region_rect") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { @@ -77,7 +83,7 @@ step = 0.2 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:texture") +tracks/0/path = NodePath("CRT:texture") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -89,7 +95,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:frame") +tracks/1/path = NodePath("CRT:frame") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -101,7 +107,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/path = NodePath("CRT:hframes") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -113,7 +119,7 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/path = NodePath("CRT:region_rect") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { @@ -142,7 +148,7 @@ loop_mode = 2 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/path = NodePath("CRT:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -154,7 +160,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("Sprite2D:texture") +tracks/1/path = NodePath("CRT:texture") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -166,7 +172,7 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/path = NodePath("CRT:hframes") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { @@ -178,7 +184,7 @@ tracks/2/keys = { tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/path = NodePath("CRT:region_rect") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { @@ -198,7 +204,9 @@ _data = { [node name="EnemyCRT" type="Area2D" unique_id=1433837580 groups=["enemies"]] script = ExtResource("1_ugdur") -[node name="Sprite2D" type="Sprite2D" parent="." unique_id=2115910138] +[node name="CRT" type="Sprite2D" parent="." unique_id=2115910138] +material = SubResource("ShaderMaterial_gas3w") +position = Vector2(0, -8) texture = ExtResource("2_emiuq") hframes = 3 region_enabled = true @@ -213,13 +221,17 @@ shape = SubResource("RectangleShape2D_4gyqm") one_shot = true [node name="ShootTimer" type="Timer" parent="." unique_id=1985644907] +wait_time = 0.35 one_shot = true +[node name="DirectionTimer" type="Timer" parent="." unique_id=2080229505] +wait_time = 0.25 + [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=702523492] libraries/ = SubResource("AnimationLibrary_7ellt") -[node name="DirectionTimer" type="Timer" parent="." unique_id=2080229505] -wait_time = 5.0 +[node name="ImpactCRT" type="AudioStreamPlayer2D" parent="." unique_id=518408763] +stream = ExtResource("6_gas3w") [connection signal="timeout" from="MoveTimer" to="." method="_on_timer_timeout"] [connection signal="timeout" from="ShootTimer" to="." method="_on_shoot_timer_timeout"] diff --git a/scenes/player.tscn b/scenes/player.tscn index 7aa33a5..7bae6c3 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -123,12 +123,11 @@ process_material = SubResource("ParticleProcessMaterial_b26j0") [node name="Head" type="Sprite2D" parent="Ship" unique_id=522385006] z_index = -1 -position = Vector2(1, -17) +position = Vector2(2, -17) texture = ExtResource("8_ur7pv") hframes = 3 [node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1614510161] -position = Vector2(0, -0.4999997) scale = Vector2(2.0054688, 2.0054688) shape = SubResource("RectangleShape2D_op7ga") diff --git a/sounds/CRT_IMPACT.wav b/sounds/CRT_IMPACT.wav new file mode 100644 index 0000000..e3467d5 Binary files /dev/null and b/sounds/CRT_IMPACT.wav differ diff --git a/sounds/CRT_IMPACT.wav.import b/sounds/CRT_IMPACT.wav.import new file mode 100644 index 0000000..1c6dfca --- /dev/null +++ b/sounds/CRT_IMPACT.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cbi5q575w1g1n" +path="res://.godot/imported/CRT_IMPACT.wav-af51af94afffec0024af9a47ed165c45.sample" + +[deps] + +source_file="res://sounds/CRT_IMPACT.wav" +dest_files=["res://.godot/imported/CRT_IMPACT.wav-af51af94afffec0024af9a47ed165c45.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2