Made ship more responsive, refactored responsibility for hit/death into the thing that got hit/died
This commit is contained in:
parent
cae134a054
commit
baa57c4d33
3 changed files with 52 additions and 28 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue