59 lines
1.3 KiB
GDScript
59 lines
1.3 KiB
GDScript
extends CharacterBody2D
|
|
|
|
signal exited()
|
|
@export var speed:float = 300
|
|
@export var turn_speed_degrees:float = 180
|
|
|
|
@export var context:GUIDEMappingContext
|
|
@export var accelerate:GUIDEAction
|
|
@export var turn:GUIDEAction
|
|
@export var leave:GUIDEAction
|
|
|
|
|
|
@onready var _player_spot:Node2D = %PlayerSpot
|
|
@onready var _exit_spot:Node2D = %ExitSpot
|
|
|
|
var _player:Node2D
|
|
|
|
func _ready():
|
|
leave.triggered.connect(_on_leave)
|
|
|
|
|
|
func _physics_process(delta):
|
|
# rotate by our turn axis
|
|
rotate(turn.value_axis_1d * deg_to_rad(turn_speed_degrees) * delta)
|
|
# accelerate by our acceleration axis
|
|
velocity = transform.x * accelerate.value_axis_1d * speed
|
|
move_and_slide()
|
|
|
|
|
|
func enter(player:Node2D):
|
|
# Move the player to the player spot
|
|
_player = player
|
|
player.reparent(_player_spot, false)
|
|
_player.position = Vector2.ZERO
|
|
|
|
# And enable the boat controls
|
|
GUIDE.enable_mapping_context(context)
|
|
|
|
|
|
func _on_leave():
|
|
# Disable boat controls
|
|
GUIDE.disable_mapping_context(context)
|
|
|
|
# put player back in the world
|
|
_player.reparent(get_parent(), false)
|
|
_player.global_position = _exit_spot.global_position
|
|
|
|
# this is to prevent the physics engine from going crazy when moving
|
|
# the player's body
|
|
await get_tree().physics_frame
|
|
|
|
# notify any interested parties that the player has exited
|
|
exited.emit()
|
|
|
|
|
|
|
|
|
|
|