﻿using System.Collections;
using UnityEngine;

public class Gate : MonoBehaviour {
    // Distanz die sich das Tor bewegt, wenn es geöffnet oder geschlossen wird
    public Vector3 moveDistance = new Vector3(0, 2.5f, 0);
    // Ist das Tor derzeit geöffnet?
    public bool isCurrentlyOpen = false;
    public AudioClip sfxOpenClose;
    // Startposition (entspricht geöffnet oder geschlossen, jenachdem ob isCurrentlyOpen im Inspector gesetzt ist)
    private Vector3 defaultPosition;
    // Entspricht der jeweils anderen Position
    private Vector3 otherPosition;


	void Start () {
        defaultPosition = transform.localPosition;
        otherPosition = defaultPosition + moveDistance;
    }
    // Öffnet das Tor
    public void Open()
    {
        // Wenn schon in Bewegung, Stoppe Bewegung
        StopCoroutine("OpenOrCloseAnimation");
        // Ändere Zustand
        isCurrentlyOpen = true;
        // Und starte Bewegung in andere Richtung neu
        StartCoroutine("OpenOrCloseAnimation");
    }
    // Schließt das Tor
    public void Close()
    {
        StopCoroutine("OpenOrCloseAnimation");
        isCurrentlyOpen = false;
        StartCoroutine("OpenOrCloseAnimation");
    }
    // Wechselt zwischen offen und Geschlossen, je nach Zustand
    public void Toggle()
    {
        if (isCurrentlyOpen)
        {
            Close();
        }
        else
        {
            Open();
        }
    }

    IEnumerator OpenOrCloseAnimation()
    {
        AudioSource.PlayClipAtPoint(sfxOpenClose, transform.position, 1f); // Soundeffekt
        Vector3 startPos = transform.localPosition;
        for (float t = 0; t <= 1; t += Time.deltaTime) // Bewege GameObject in einer Schleife
        {
            transform.localPosition = Vector3.Lerp(startPos, (isCurrentlyOpen ? otherPosition : defaultPosition), t);
            yield return null;
        }
    }
}
