//Alright so This will recursively move the part towards a location...
    //When it reaches a location it needs to say
    IEnumerator MoveToTracking(GolemAnimator Action, TrackingType newTracking, float Delay)
    {
        bool reachLocation = false;

        yield return(new WaitForSeconds(Time.deltaTime));

        Vector2 Targ;

        switch (newTracking)
        {
        case TrackingType.PlayerX:
            Targ = new Vector2(ShootTarget.transform.position.x, MoveToTarget.transform.position.y);
            transform.position = Vector2.MoveTowards(transform.position, Targ, MoveSpeed);
            if (Vector2.Distance(transform.position, Targ) < 0.1f)
            {
                reachLocation = true;
            }
            break;

        case TrackingType.PlayerY:
            Targ = new Vector2(MoveToTarget.transform.position.x, ShootTarget.transform.position.y + 0.5f);
            transform.position = Vector2.MoveTowards(transform.position, Targ, MoveSpeed);
            if (Vector2.Distance(transform.position, Targ) < 0.1f)
            {
                reachLocation = true;
            }
            break;

        case TrackingType.MoveAtoB:
            transform.position = Vector2.MoveTowards(transform.position, MoveToTarget.transform.position, MoveSpeed);
            FacePlayer();
            if (Vector2.Distance(transform.position, MoveToTarget.transform.position) < .1f)
            {
                reachLocation = true;
            }
            break;

        case TrackingType.None:
        default:
            FacePlayer();
            transform.position = Vector2.MoveTowards(transform.position, Commander.GolemBody.transform.position + OffsetAmount * SprList[0].transform.localScale.x, MoveSpeed);
            break;
        }
        if (reachLocation)
        {
            Delay -= Time.deltaTime;
            Debug.Log("Delay : " + Delay);
            if (Delay <= 0)
            {
                Anim.Play(Action.ToString(), -1, 0);
            }
        }
        if (Delay >= 0)
        {
            StartCoroutine(MoveToTracking(Action, newTracking, Delay));
        }
    }
    //When an animation finishes it'll call this as an animation event
    public void FinishAction()
    {
        Debug.Log(name + " Has Finished their action, Resetting Stats");
        Acting = false;
        Ready  = false;

        StopAllCoroutines();
        if (CurrentAnim != GolemAnimator.Fist)
        {
            CurrentAnim = GolemAnimator.Fist;
            Anim.Play(GolemAnimator.RemoveGun.ToString());
        }
        StartCoroutine(RotateTowardsAngle(Vector3.zero));
        if (Part != GolemPartType.Body)
        {
            StartCoroutine(MoveToBody());
        }
    }
    IEnumerator WaitForAnim(GolemAnimator Action, TrackingType newTracking, float Delay)
    {
        //This is pretty much only going to be activated when switching to "Cannon" form.
        yield return(new WaitForSeconds(Time.deltaTime));

        Debug.Log("Waiting for Action");
        if (!Ready)
        {
            StartCoroutine(WaitForAnim(Action, newTracking, Delay));
        }
        else
        {
            Ready = false;
            if (newTracking == TrackingType.PlayerX || newTracking == TrackingType.PlayerY)
            {
                TrackToAngle(newTracking);
            }
            StartCoroutine(MoveToTracking(Action, newTracking, Delay));
        }
    }
    public void StartAction(GolemAnimator Action, TrackingType NewTracking, float Delay)
    {
        //So we enter an Action then Stop ALL currently running Coroutines to ensure there is no conflict...
        //Since We're Acting we won't be able to set
        Acting = true;

        //Sooo... I need a buffer to switch to switch to gun then out of gun....
        StopAllCoroutines();
        if ((Action == GolemAnimator.Gun || Action == GolemAnimator.FormGun || Action == GolemAnimator.Firing))
        {
            CurrentAnim = GolemAnimator.Gun;
            Ready       = false;
            Anim.Play(GolemAnimator.FormGun.ToString());
            StartCoroutine(WaitForAnim(Action, NewTracking, Delay));
        }
        else
        {
            if (NewTracking == TrackingType.PlayerX || NewTracking == TrackingType.PlayerY)
            {
                TrackToAngle(NewTracking);
            }
            StartCoroutine(MoveToTracking(Action, NewTracking, Delay));
        }
    }
 //Called By the Golem Controller to play an animation
 public void PlayAnim(GolemAnimator Action)
 {
     Debug.Log(name + " is playing " + Action.ToString());
     Anim.Play(Action.ToString());
 }