//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()); }