Files
Corupture/scripts/player.gd
Eric abde90e75f Interaction wheel
do interaction
2024-03-01 14:40:50 -06:00

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 sprite: AnimatedSprite2D = $Sprite
@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()
_on_interation_options_closed()
sprite.play("walk")
last_direction = input_direction.angle() + PI / 2
rotation = last_direction
interaction_location = Grid.world_to_grid(position) + Vector2i(input_direction.round())
Grid.set_selected_tile(interaction_location)
else:
sprite.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)
_interaction_options.closed.connect(_on_interation_options_closed)
add_sibling(_interaction_options)
func _on_interation_options_closed() -> void:
_interaction_options = null
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)