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)