Made ship more responsive, refactored responsibility for hit/death into the thing that got hit/died

This commit is contained in:
Benjamin Morgan 2025-10-21 20:02:17 -06:00
parent cae134a054
commit baa57c4d33
3 changed files with 52 additions and 28 deletions

View file

@ -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