Files
the-connection/client/Scripts/Entities/Elevator.gd

66 lines
1.5 KiB
GDScript

extends Node2D
signal elevator_stopped
export(Array, Vector2) var relative_positions = [Vector2(0,0)]
export(Array, String) var labels = ["Default"]
export(Array, NodePath) var doors = []
export var current_pos : int = 0
var moving : bool = false
var gui
var motion
var intial_pos : Vector2
export var elevator_speed = 25
func _ready():
motion = Vector2.ZERO
intial_pos = global_position
func _on_interact():
if not moving:
if not gui:
gui = get_node("/root/World/GUI")
gui.open_elevator_menu(self)
func _on_choice(index):
start_moving(index)
gui.close_elevator_menu()
func start_moving(index):
if current_pos != index:
moving = true
current_pos = index
# Close all doors while in transit
for door_path in doors:
var door = get_node(door_path)
door.close()
door.lock()
return true
return false
func stop_moving():
emit_signal("elevator_stopped")
moving = false
motion = Vector2.ZERO
# Alert doors of updated elevator state
for door_path in doors:
get_node(door_path).on_elevator_stop(current_pos)
func _physics_process(delta):
if moving:
# Move towards elevator stop
var target_pos = intial_pos + relative_positions[current_pos]
var angle = get_angle_to(target_pos)
var velocity = Vector2(cos(angle),sin(angle))
motion = velocity * elevator_speed
global_position += velocity * elevator_speed * delta
# Stop when elevator is at destination
if global_position.distance_to(target_pos) < 0.25:
global_position = target_pos
stop_moving()