50 lines
1.7 KiB
GDScript
50 lines
1.7 KiB
GDScript
extends CharacterBody2D
|
|
class_name Player
|
|
|
|
@export var SPEED := 4
|
|
|
|
var last_direction = 0
|
|
var interaction_location: Vector2i
|
|
var _interaction_options: InteractionWheel
|
|
|
|
@onready var animation_player: AnimationPlayer = $AnimationPlayer
|
|
@onready var interaction_timer: Timer = $InteractionTimer
|
|
const INTERACTION_WHEEL = preload("res://scene/interaction_wheel.tscn")
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
|
velocity = input_direction * SPEED / delta
|
|
move_and_slide()
|
|
|
|
if input_direction:
|
|
if _interaction_options:
|
|
_interaction_options.queue_free()
|
|
_interaction_options = null
|
|
animation_player.current_animation = "walk"
|
|
animation_player.play()
|
|
last_direction = input_direction.angle() + 3 * PI / 2
|
|
rotation = last_direction
|
|
interaction_location = Grid.world_to_grid(position) + Vector2i(input_direction.round())
|
|
Grid.set_selected_tile(interaction_location)
|
|
else:
|
|
animation_player.stop()
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if event.is_action_pressed("select") and not _interaction_options:
|
|
var interactions: Array[Interaction] = Grid.get_location_data(interaction_location).get_interaction_options()
|
|
if interactions.size() > 0:
|
|
_interaction_options = INTERACTION_WHEEL.instantiate()
|
|
_interaction_options.initialize(interaction_location, interactions)
|
|
add_sibling(_interaction_options)
|
|
|
|
func _finished_interaction(results: Dictionary) -> void:
|
|
print("interaction finished: %s" % results)
|
|
|
|
func _unhandled_input(event):
|
|
if event is InputEventMouseButton:
|
|
match event.button_index:
|
|
MOUSE_BUTTON_WHEEL_DOWN:
|
|
$Camera2D.zoom -= Vector2(0.01, 0.01)
|
|
MOUSE_BUTTON_WHEEL_UP:
|
|
$Camera2D.zoom += Vector2(0.01, 0.01)
|