using System.Collections;
using UnityEngine;

public class TRB_AfterProjectOutsideCutscene : MonoBehaviour
{
    [Header("-= Cutscene References =-")]
    [SerializeField]
    private CameraManager playerCamera;

    [SerializeField]
    private Animator Toriel;

    [SerializeField]
    private Animator Alphys;

    [SerializeField]
    private Animator Berdly;

    [SerializeField]
    private GameObject BerdlySweatOverlay;

    [SerializeField]
    private Animator Susie;

    [SerializeField]
    private PlayerManager Kris;

    [Header("- Dialogue -")]
    [SerializeField]
    private CHATBOXTEXT[] CutsceneChats;

    [Header("- Sounds -")]
    [SerializeField]
    private AudioClip[] CutsceneSounds;

    private void Start()
    {
        LightworldMenu.Instance.CanOpenMenu = false;
        DarkworldMenu.Instance.CanOpenMenu = false;
        Kris = PlayerManager.Instance;
        Toriel.SetBool("InCutscene", value: true);
        Alphys.SetBool("InCutscene", value: true);
        Susie.SetBool("InCutscene", value: true);
        Berdly.SetBool("InCutscene", value: true);
        Kris._PMove.AnimationOverriden = true;
        Kris._PMove._anim.SetBool("MOVING", value: false);
        RotateAlphysToDirection(Vector2.down);
        RotateSusieToDirection(Vector2.down);
        RotateBerdlyToDirection(Vector2.down);
        RotateTorielToDirection(Vector2.right);
        StartCoroutine(Cutscene());
    }

    private IEnumerator Cutscene()
    {
        PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.down);
        Kris._PMove._anim.SetBool("MOVING", value: true);
        Vector2 krisWalkPos = new Vector2(11f, -0.45f);
        yield return null;
        CutsceneUtils.MoveTransformLinear(Kris.transform, krisWalkPos, 2f);
        yield return new WaitForSeconds(1.5f);
        Susie.gameObject.SetActive(value: true);
        RotateSusieToDirection(Vector2.down);
        Susie.SetBool("InCutscene", value: true);
        Susie.Play("IdleSad");
        CutsceneUtils.PlaySound(CutsceneSounds[0]);
        yield return new WaitForSeconds(0.5f);
        Kris._PMove._anim.SetBool("MOVING", value: false);
        PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.up);
        CutsceneUtils.RunFreshChat(CutsceneChats[0], 0, ForcePosition: true, OnBottom: true);
        while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
        {
            yield return null;
        }
        CutsceneUtils.MoveTransformLinear(endPoint: new Vector2(11f, -1.3f), target: Susie.transform, duration: 1f);
        Susie.speed = 2f;
        Susie.Play("WalkSad");
        yield return new WaitForSeconds(0.66f);
        krisWalkPos = new Vector2(9.25f, -0.45f);
        Kris._PMove._anim.SetBool("MOVING", value: true);
        PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.right);
        CutsceneUtils.MoveTransformLinear(Kris.transform, krisWalkPos, 0.33f);
        yield return new WaitForSeconds(0.33f);
        Kris._PMove._anim.SetBool("MOVING", value: false);
        PlayerManager.Instance._PMove.RotatePlayerAnim(Vector2.right);
        RotateSusieToDirection(Vector2.left);
        Susie.Play("IdleSad");
        Susie.speed = 1f;
        CutsceneUtils.RunFreshChat(CutsceneChats[0], 1, ForcePosition: true, OnBottom: false);
        while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
        {
            yield return null;
        }
        yield return new WaitForSeconds(0.35f);
        CutsceneUtils.RunFreshChat(CutsceneChats[0], 2, ForcePosition: true, OnBottom: false);
        while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
        {
            yield return null;
        }
        yield return new WaitForSeconds(0.35f);
        Berdly.gameObject.SetActive(value: true);
        RotateBerdlyToDirection(Vector2.down);
        Berdly.SetBool("InCutscene", value: true);
        Berdly.speed = 2f;
        Berdly.Play("Walk");
        CutsceneUtils.PlaySound(CutsceneSounds[0]);
        yield return null;
        CutsceneUtils.MoveTransformLinear(Berdly.transform, new Vector2(11f, -1.95f), 0.85f);
        yield return new WaitForSeconds(0.57f);
        CutsceneUtils.MoveTransformLinear(endPoint: new Vector2(9.25f, -1.75f), target: Kris.transform, duration: 0.28f);
        Vector2 vector = new Vector2(8.85f, -1.3f);
        Susie.Play("Susie_Shock_Right");
        CutsceneUtils.MoveTransformLinear(Susie.transform, vector, 0.28f);
        yield return new WaitForSeconds(0.28f);
        RotateBerdlyToDirection(Vector2.left);
        yield return new WaitForSeconds(0.33f);
        RotateBerdlyToDirection(Vector2.up);
        yield return new WaitForSeconds(0.33f);
        RotateBerdlyToDirection(Vector2.right);
        yield return new WaitForSeconds(0.66f);
        Berdly.Play("Idle");
        Berdly.speed = 1f;
        yield return new WaitForSeconds(1f);
        RotateBerdlyToDirection(Vector2.left);
        RotateSusieToDirection(Vector2.right);
        BerdlySweatOverlay.SetActive(value: false);
        CutsceneUtils.RunFreshChat(CutsceneChats[0], 3, ForcePosition: true, OnBottom: false);
        while (ChatboxManager.Instance.ChatIsCurrentlyRunning)
        {
            yield return null;
        }
    }

    private void RotateTorielToDirection(Vector2 direction)
    {
        CutsceneUtils.RotateCharacterToDirection(Toriel, "VelocityX", "VelocityY", direction);
    }

    private void RotateSusieToDirection(Vector2 direction)
    {
        CutsceneUtils.RotateCharacterToDirection(Susie, "VelocityX", "VelocityY", direction);
    }

    private void RotateBerdlyToDirection(Vector2 direction)
    {
        CutsceneUtils.RotateCharacterToDirection(Berdly, "VelocityX", "VelocityY", direction);
    }

    private void RotateAlphysToDirection(Vector2 direction)
    {
        CutsceneUtils.RotateCharacterToDirection(Alphys, "VelocityX", "VelocityY", direction);
    }

    public void SusieAngry()
    {
        Susie.Play("Susie_Angry_Left");
    }

    public void SusieIdle()
    {
        Susie.Play("Idle");
    }

    public void SusieAwkward()
    {
        Susie.Play("Susie_Awkward");
    }

    public void SusieLeft()
    {
        RotateSusieToDirection(Vector2.left);
    }

    public void SusieUp()
    {
        RotateSusieToDirection(Vector2.up);
    }

    public void SusieRight()
    {
        RotateSusieToDirection(Vector2.right);
    }

    public void SusieDown()
    {
        RotateSusieToDirection(Vector2.down);
    }

    public void SusieIdleSad()
    {
        Susie.Play("IdleSad");
    }

    public void BerdlyLeft()
    {
        RotateBerdlyToDirection(Vector2.left);
    }

    public void BerdlyUp()
    {
        RotateBerdlyToDirection(Vector2.up);
    }

    public void BerdlyRight()
    {
        RotateBerdlyToDirection(Vector2.right);
    }

    public void BerdlyDown()
    {
        RotateBerdlyToDirection(Vector2.down);
    }
}