From baa57c4d331fd08ed8e79eb9a38af5496d2b1abb Mon Sep 17 00:00:00 2001 From: Benjamin Morgan Date: Tue, 21 Oct 2025 20:02:17 -0600 Subject: [PATCH] Made ship more responsive, refactored responsibility for hit/death into the thing that got hit/died --- Enemies/Scripts/asteroid.gd | 25 +++++++++++++---------- Scripts/laser.gd | 15 +------------- Scripts/ship.gd | 40 ++++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/Enemies/Scripts/asteroid.gd b/Enemies/Scripts/asteroid.gd index ab22ec4..3a1eeb4 100644 --- a/Enemies/Scripts/asteroid.gd +++ b/Enemies/Scripts/asteroid.gd @@ -2,8 +2,9 @@ extends Area2D var velocity = Vector2(0, 0) var rot_velocity = 0 + var explosion = preload('res://Scenes/explosion.tscn') -var pop = preload("res://Sounds/Explosion5.wav") +var pop = preload("res://Sounds/Explosion.wav") func _ready() -> void: connect("body_entered", _on_body_entered) @@ -15,14 +16,16 @@ func _physics_process(delta): Utils.wrap_position(self) func _on_body_entered(body): - if body.name == "Ship": - Game.set_lives(Game.lives - 1) - - Utils.play_sound(pop, get_parent()) - - var boom = explosion.instantiate() - boom.position = body.global_position - boom.scale = Vector2(6, 6) - get_parent().add_child(boom) - body.reset() + if body.name == "Ship" and body.hit(): queue_free() + +func hit(): + Utils.play_sound(pop, get_parent()) + + var boom = explosion.instantiate() + boom.position = global_position + boom.scale = scale + get_parent().add_child(boom) + + Game.set_score(Game.score + 100) + queue_free() diff --git a/Scripts/laser.gd b/Scripts/laser.gd index dd9abed..8c28f22 100644 --- a/Scripts/laser.gd +++ b/Scripts/laser.gd @@ -1,7 +1,5 @@ extends Area2D -var explosion = preload('res://Scenes/explosion.tscn') -var pop = preload("res://Sounds/Explosion.wav") var speed = 750 var half_size: Vector2 # half of sprite dimensions (used for wrapping) @@ -17,21 +15,10 @@ func _physics_process(delta): var rect = get_viewport_rect() if position.x < -half_size.x or position.x > rect.size.x + half_size.x or position.y < -half_size.y or position.y > rect.size.y + half_size.y: - #print_debug("FREED") queue_free() func _on_body_entered(body): if body.is_in_group("enemies"): - body.queue_free() - - Utils.play_sound(pop, get_parent()) - - var boom = explosion.instantiate() - boom.position = body.global_position - boom.scale = body.scale - get_parent().add_child(boom) - - Game.set_score(Game.score + 100) + body.hit() queue_free() - #print_debug("KILLED") diff --git a/Scripts/ship.gd b/Scripts/ship.gd index e2b8ee6..60631ad 100644 --- a/Scripts/ship.gd +++ b/Scripts/ship.gd @@ -1,15 +1,21 @@ extends CharacterBody2D -const ROT_SPEED = 3.0 -const MOVE_ACC = 100 +const ROT_SPEED = 4.0 +const MOVE_ACC = 120 const FRICTION = 0.995 const FIRE_RATE = 0.2 +const INV_FLASH_INT = 0.1 @export var Laser: PackedScene @export var pew: Resource var speed = Vector2(0, 0) var last_shot = 0.0 +var last_flash = 0.0 +var inv_time = 0.0 + +var explosion = preload('res://Scenes/explosion.tscn') +var pop = preload("res://Sounds/Explosion5.wav") func _ready() -> void: Game.player = self @@ -47,6 +53,15 @@ func _physics_process(delta: float) -> void: Utils.wrap_position(self) + if is_invincible(): + inv_time -= delta + last_flash += delta + if last_flash >= INV_FLASH_INT: + $AnimatedSprite2D.visible = !$AnimatedSprite2D.visible + last_flash = 0.0 + else: + $AnimatedSprite2D.visible = true + # --- Fire projectile on space --- last_shot += delta if Input.is_action_pressed("ui_accept") and last_shot >= FIRE_RATE: # default = Space/Enter @@ -58,6 +73,25 @@ func _physics_process(delta: float) -> void: bullet.transform = $Muzzle.global_transform last_shot = 0.0 -func reset(): +func die(): position = get_viewport_rect().size / 2 speed = Vector2(0, 0) + inv_time = 3.0 + +func is_invincible(): + return inv_time > 0 + +func hit() -> bool: + if !is_invincible(): + Game.set_lives(Game.lives - 1) + + Utils.play_sound(pop, get_parent()) + + var boom = explosion.instantiate() + boom.position = global_position + boom.scale = Vector2(6, 6) + get_parent().add_child(boom) + die() + return true + + return false -- 2.47.2