extends StaticBody2D

class_name GameObjectDoor

export(NodePath) var interlockTargetPath
var interlockTarget: GameObjectDoor = null

export var idle_usage = 2
export var active_usage = 10

onready var activationRange = $ActivationRange as ActivationRange
onready var manager = $PowerManager as PowerManager

signal changed(open)

func _ready():
	if interlockTargetPath != null:
		interlockTarget = get_node_or_null(interlockTargetPath)
	if not Engine.editor_hint:
		activationRange.visible = true

func set_open(open: bool):
	if not manager:
		return
	manager.power_usage = active_usage
	if manager.powered:
		if open:
			$Sprite.play("open")
			if interlockTarget != null:
				interlockTarget.set_open(false)
		else:
			$Sprite.play("close")

func _animation_finished():
	if manager:
		manager.power_usage = idle_usage
	if $Sprite.animation == "open":
		# Disable collider
		collision_layer = 16
		collision_mask = 16
		emit_signal("changed", true)
		# Start timer for auto-close
		$Timer.start()
	else:
		# Enable collider
		collision_mask = 1
		collision_layer = 1
		emit_signal("changed", false)

func _input_event(_viewport, event, _shape_idx):
	# Check if we clicked the item
	if event is InputEventMouseButton and event.pressed:
		# Must be in activation range
		if activationRange.in_range():
			set_open($Sprite.animation == "close")

func _close_timer_triggered():
	$Sprite.play("close")
