extends CharacterBody2D class_name PlayerCharacter signal InteractScannerAreaEntered(area: Area2D) signal InteractScannerAreaExited(area: Area2D) signal InteractScannerBodyEntered(body: Node2D) signal InteractScannerBodyExited(body: Node2D) signal InteractionActionTriggered() signal ArrowFired(fire_position: Vector2, direction: Vector2) signal SitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enums.Directions) signal CutsceneStarted() signal CutsceneEnded() @export var player_sprite: Node2D @export var state_machine: PlayerStateMachine # Public Methods func OnSitOnFurnitureTriggered(sitting_position: Vector2, sitting_direction: Enums.Directions): SitOnFurnitureTriggered.emit(sitting_position, sitting_direction) func OnCutsceneStarted() -> void: CutsceneStarted.emit() func OnCutsceneEnded() -> void: CutsceneEnded.emit() # Private Methods func _on_interact_scanner_area_entered(area: Area2D) -> void: InteractScannerAreaEntered.emit(area) func _on_interact_scanner_area_exited(area: Area2D) -> void: InteractScannerAreaExited.emit(area) func _on_interact_scanner_body_entered(body: Node2D) -> void: InteractScannerBodyEntered.emit(body) func _on_interact_scanner_body_exited(body: Node2D) -> void: InteractScannerBodyExited.emit(body) func _on_interaction_action_triggered() -> void: if state_machine.current_state.IsStateActionable(): InteractionActionTriggered.emit() func _on_using_item_a_state_arrow_fired(fire_position: Vector2, direction: Vector2) -> void: ArrowFired.emit(fire_position, direction)