47 lines
1.3 KiB
GDScript
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
|