Files
2025-05-27 19:20:46 +02:00

47 lines
1.3 KiB
GDScript

extends CharacterBody2D
@export var speed:float = 300
@export var look_relative:GUIDEAction
@export var look_absolute:GUIDEAction
@export var move:GUIDEAction
@export var fire:GUIDEAction
@export var bolt:PackedScene
@onready var left_hand:Node2D = %LeftHand
@onready var right_hand:Node2D = %RightHand
func _ready():
# fire some bolts when the fire action triggers
fire.triggered.connect(_fire)
func _physics_process(delta):
var target = Vector2.INF
# Looking at absolute coordinates. This is the case when we use a mouse.
if look_absolute.is_triggered():
target = look_absolute.value_axis_2d
# Looking at relative coordinates. This is the case when we use a controller
elif look_relative.is_triggered():
target = global_position + look_relative.value_axis_2d
# If we have a target, rotate towards it
if target.is_finite():
var target_orientation = Transform2D()\
.translated(transform.origin)\
.looking_at(target)
transform = transform.interpolate_with(target_orientation, 5 * delta)
# and move according to the input.
velocity = speed * move.value_axis_2d
move_and_slide()
func _fire():
# for each hand of the player, spawn a bolt
for hand in [left_hand, right_hand]:
var a_bolt:Node2D = bolt.instantiate()
get_parent().add_child(a_bolt)
a_bolt.global_transform = hand.global_transform