extends Spatial

var active = false
onready var fsm: AnimationNodeStateMachinePlayback = $Animations/AnimationTree.get("parameters/playback")
export var default_screen_color = Color(0.886275, 1, 0, 1)
export var screen_off_color = Color(0.0, 0.0, 0.0)
var is_screen_on: bool
export var screen_flicker_fastest: float = 0.1
export var screen_flicker_slowest: float = 1.0

onready var util = get_node("/root/Util")

func _ready():
	is_screen_on = false
	turn_screen_off()
	fsm.start("WalkieTalkieStart")

func turn_screen_off():
	var mat = $Animations/walkie_talkie/Body.get_active_material(1)
	mat.albedo_color = screen_off_color
	mat.emission_enabled = false
	is_screen_on = false

func turn_screen_on():
	var mat = $Animations/walkie_talkie/Body.get_active_material(1)
	mat.albedo_color = default_screen_color
	mat.emission_enabled = true		
	is_screen_on = true

func toggle_screen():
	if is_screen_on:
		turn_screen_off()
	else:
		turn_screen_on()

func make_active():
	if active:
		return
	fsm.travel("WalkieTalkieEnter")
	#$StaticBuzz.play()
	#$StaticFizz.play()
	#$Talk.play()
	#$Whale1.play()
	#$Whale2.play()
	turn_screen_on()
	$Click.play()
	active = true
	GlobalEventBus.emit_signal("player_walkie_talkie_state_change", true)

func make_inactive():
	if not active:
		return
	fsm.travel("WalkieTalkieLeave")
	$StaticBuzz.stop()
	$StaticFizz.stop()
	$Talk.stop()
	$Whale1.stop()
	$Whale2.stop()
	turn_screen_off()
	$Click.play()
	active = false
	GlobalEventBus.emit_signal("player_walkie_talkie_state_change", false)

func toggle_active():
	if active:
		make_inactive()
	else:
		make_active()

func _process(_delta):
	if Input.is_action_just_pressed("toggle_walkie_talkie"):
		toggle_active()
	if not active or not fsm.is_playing():
		return
	if Util.player.is_ground_walking():
		fsm.travel("WalkieTalkieWalking")
	else:
		fsm.travel("WalkieTalkieIdle")

func _on_ScreenFlicker_timeout():
	if active:
		toggle_screen()
	var weight = Util.player.objective_distance() / 115.0
	var time = Util.clamped_lerp(screen_flicker_fastest, screen_flicker_slowest, weight, 0.0)
	$Animations/walkie_talkie/Body/ScreenFlicker.start(time)