Compare commits

...

2 commits

Author SHA1 Message Date
bb18edb1be Merge pull request 'Added invincibility ticks after respawn, made player more responsive, and refactors' (#1) from tweaks into main
All checks were successful
Build Game / Build & push runner image (push) Successful in 7s
Build Game / Build Asteroids for all platforms (push) Successful in 34s
Reviewed-on: #1
2025-10-22 02:08:00 +00:00
baa57c4d33 Made ship more responsive, refactored responsibility for hit/death into the thing that got hit/died 2025-10-21 20:02:17 -06:00
3 changed files with 52 additions and 28 deletions

View file

@ -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)
if body.name == "Ship" and body.hit():
queue_free()
func hit():
Utils.play_sound(pop, get_parent())
var boom = explosion.instantiate()
boom.position = body.global_position
boom.scale = Vector2(6, 6)
boom.position = global_position
boom.scale = scale
get_parent().add_child(boom)
body.reset()
Game.set_score(Game.score + 100)
queue_free()

View file

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

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