62 lines
1.5 KiB
GDScript
62 lines
1.5 KiB
GDScript
class_name Player
|
|
extends CharacterBody2D
|
|
|
|
|
|
@export_group("Movement", "move_")
|
|
@export var move_normal_speed: float
|
|
@export var move_focused_speed: float
|
|
@onready var startpos = position
|
|
|
|
var can_die = true
|
|
var can_graze = true
|
|
var can_shoot = true
|
|
var can_move = true
|
|
|
|
var focused: bool:
|
|
get(): return Input.is_action_pressed(&"focus")
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
print(can_die)
|
|
var input_dir = Input.get_vector(&"move_left", &"move_right", &"move_up", &"move_down").sign()
|
|
if can_move:
|
|
velocity = input_dir.normalized() * (move_focused_speed if focused else move_normal_speed)
|
|
move_and_slide()
|
|
|
|
|
|
func _on_hurtbox_area_entered(area: Area2D) -> void:
|
|
if can_die:
|
|
%DeathSound.play()
|
|
%AnimationPlayer.play("respawn")
|
|
position = startpos
|
|
CurrentGame.change_lives(-1)
|
|
set_invincible(true)
|
|
set_disabled(true)
|
|
|
|
func set_disabled(truefalse: bool):
|
|
velocity = Vector2.ZERO
|
|
%HurtboxShape.disabled = truefalse
|
|
%CollectionShape.disabled = truefalse
|
|
%GrazeShape.disabled = truefalse
|
|
can_shoot = !truefalse
|
|
can_move = !truefalse
|
|
if truefalse == true:
|
|
%PlayerBulletEmitter.timer.stop()
|
|
else:
|
|
if Input.is_action_pressed("shoot"):
|
|
%PlayerBulletEmitter.timer.start()
|
|
%PlayerBulletEmitter._on_timer_timeout()
|
|
|
|
func set_immobile(truefalse: bool):
|
|
can_move = truefalse
|
|
|
|
func set_invincible(truefalse: bool):
|
|
can_die = !truefalse
|
|
|
|
func _on_graze_box_area_entered(area: Area2D) -> void:
|
|
if !area.grazed && can_graze:
|
|
area.grazed = true
|
|
%GrazeSound.play()
|
|
%GrazeParticles.emitting = true
|
|
CurrentGame.change_graze(1)
|
|
|