Shmup-01b/player.gd

89 lines
2.3 KiB
GDScript

extends Area2D
signal died
signal damage_taken
# signal shield_damage
# signal shield_ui
@export var speed = 150
@export var cooldown = 0.25
@export var bullet_scene : PackedScene
@export var max_shield: int = 10
var shield: int = max_shield:
set = set_shield
var can_shoot = true
var shader_active = false
@onready var screensize = get_viewport_rect().size
func _ready():
start()
func start():
set_process(true)
$Ship.show()
position = Vector2(screensize.x / 2, screensize.y - 64)
shield = max_shield
$GunCooldown.wait_time = cooldown
func _process(delta):
var input = Input.get_vector("left", "right", "up", "down")
if input.x > 0:
$Ship.frame = 2
$Ship/Boosters.animation = "right"
elif input.x < 0:
$Ship.frame = 0
$Ship/Boosters.animation = "left"
else:
$Ship.frame = 1
$Ship/Boosters.animation = "forward"
position += input * speed * delta
position = position.clamp(Vector2(8, 8), screensize - Vector2(8, 8))
if Input.is_action_pressed("shoot"):
shoot()
func shoot():
if not can_shoot:
return
can_shoot = false
$GunCooldown.start()
var b = bullet_scene.instantiate()
get_tree().root.add_child(b)
b.start(position + Vector2(0, -8))
func set_shield(value: int):
var old_value: int = shield
shield = min(max_shield, value)
EventBus.shield_changed.emit(max_shield, old_value, shield)
# shield_damage.emit()
if shield <= 0:
set_process(false)
$Ship.hide()
$Explosion.show()
$Explosion/AnimationPlayer.play("explosion-one-shot")
await $Explosion/AnimationPlayer.animation_finished
died.emit()
func _on_gun_cooldown_timeout():
can_shoot = true
func _on_gun_cool_down_timeout() -> void:
can_shoot = true
func _on_area_entered(area):
if area.is_in_group("enemies"):
area.explode()
shield -= max_shield / 2
damage_taken.emit()
if area.is_in_group("enemy_bullets"):
damage_taken.emit()
func _on_damage_taken() -> void:
# emit_signal("shield_ui")
shader_active = true
$Ship.material.set_shader_parameter("toggle", 1.0)
await get_tree().create_timer(1).timeout
shader_active = false
$Ship.material.set_shader_parameter("toggle", 0.0)