52 lines
1.3 KiB
GDScript
52 lines
1.3 KiB
GDScript
class_name Player extends Area2D
|
|
|
|
# Components managed by Player
|
|
@onready var input_component: InputComponent = %InputComponent
|
|
@onready var movement_component: MovementComponent = %MovementComponent
|
|
@onready var shoot_component: ShootComponent = %ShootComponent
|
|
@onready var weapon_component: WeaponComponent = %WeaponComponent
|
|
|
|
# Get the viewport size for positioning
|
|
@onready var screensize = get_viewport().content_scale_size
|
|
|
|
# Variables for Player shooting status
|
|
@export var can_shoot: bool = true
|
|
@export var is_shooting: bool = false
|
|
@export var muzzle_flash: bool = false
|
|
|
|
# Variables for Player position calculations for equidistant bullets
|
|
var previous_position: Vector2
|
|
var ship_displacement: float
|
|
var travel: float = 0
|
|
|
|
func _ready() -> void:
|
|
|
|
## Set initial start position
|
|
position = Vector2(screensize.x / 2, screensize.y - 45)
|
|
|
|
func _process(delta) -> void:
|
|
|
|
# Read Controls
|
|
input_component.update()
|
|
|
|
# Read Shooting
|
|
if input_component.shooting:
|
|
is_shooting = true
|
|
else: is_shooting = false
|
|
|
|
if is_shooting == true:
|
|
shoot_component.shoot()
|
|
$%MuzzleFlash.show()
|
|
|
|
if is_shooting == false:
|
|
$%MuzzleFlash.hide()
|
|
|
|
|
|
|
|
# Read Movement Component
|
|
movement_component.input = input_component.move_dir
|
|
movement_component.tick(delta)
|
|
|
|
# Cycle weapon (testing key)
|
|
if input_component.cycle_weapon:
|
|
weapon_component.cycle_weapon()
|