smashball/scenes/player/player.gd
2025-11-18 18:39:37 -03:00

46 lines
1.6 KiB
GDScript

class_name Player extends CharacterBody2D
const DEADZONE: float = 0.1
@export var id: int = 1
@export var max_speed: float = 90
@onready var small_hit_scene: PackedScene = preload("res://scenes/hit/small_hit.tscn")
@onready var power_hit_scene: PackedScene = preload("res://scenes/hit/power_hit.tscn")
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
@onready var anim_player: AnimationPlayer = $AnimationPlayer
@onready var state_machine: StateMachine = $StateMachine
@onready var hit_timer: Timer = $HitTimer
@onready var power_timer: Timer = $PowerTimer
var anim_dir: String
var def_dir: String
var power_bar: float
func _ready() -> void:
assert(id == 1 or id == 2, "id ("+str(id)+") is invalid")
anim_dir = 'up' if id == 1 else 'down'
def_dir = 'idle_up' if id == 1 else 'idle_down'
power_bar = 0
hit_timer.connect("timeout", $StateMachine/Hitting._on_hit_end)
power_timer.connect("timeout", func() -> void:
print(power_bar)
)
func get_movement_vector() -> Vector2:
var x_mov: float = Input.get_action_strength('p'+str(id)+'_move_right') - Input.get_action_strength('p'+str(id)+'_move_left')
var y_mov: float = Input.get_action_strength('p'+str(id)+'_move_down') - Input.get_action_strength('p'+str(id)+'_move_up')
return Vector2(x_mov, y_mov)
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("p"+str(id)+"_power_hit") and power_bar == 100:
power_bar = 0
state_machine.state.finished.emit(PlayerState.HITTING, {"hit": "power"})
func _process(_delta: float) -> void:
if Input.is_action_pressed("p"+str(id)+"_hit_left") and Input.is_action_pressed("p"+str(id)+"_hit_right"):
if power_bar < 100: power_bar += 1