paratate/objects/player/player.gd
2026-01-01 19:06:53 -05:00

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)