IEnumerator getStunned(float t, GameObject stunningEffectObject, playerStatus.status prevStatus) { yield return(new WaitForSeconds(t)); if (prevStatus == playerStatus.status.DEFENSE) { ps.currStatus = playerStatus.status.NORMAL; } else if (prevStatus == playerStatus.status.DASH) { ps.currStatus = playerStatus.status.NORMAL; } else { ps.currStatus = prevStatus; } gameObject.layer = 12; Destroy(stunningEffectObject); }
public void hurt(Collision collision) { chargingAmount = 0; anim.SetTrigger("hurtTrigger"); anim.SetBool("moving", false); Camera.main.GetComponent <AudioSource>().PlayOneShot(stunningClip, 2.0f); //StartCoroutine(controllerVibration(1.0f)); if (ps.currStatus == playerStatus.status.HOLDING || ps.currStatus == playerStatus.status.HELD) { if (teamMember.layer != 11) { teamMember.layer = 11; teamMember.GetComponent <ArrowKeyMovement>().hurt(collision); } } prevStatus = ps.currStatus; ps.currStatus = playerStatus.status.FLYING; dropMoneyAfterhurt(); StartCoroutine(knockBack(collision, prevStatus)); }
public IEnumerator knockBack(Collision collision, playerStatus.status prevStatus, float stunTime = 2.5f) { if (ps.currStatus == playerStatus.status.HOLDING || ps.currStatus == playerStatus.status.HELD) { if (teamMember.layer != 11) { teamMember.layer = 11; StartCoroutine(teamMember.GetComponent <ArrowKeyMovement>().knockBack(collision, teamMember.GetComponent <playerStatus>().currStatus, 1.5f)); } } Instantiate(hitYellow, collision.contacts[0].point, Quaternion.identity); this.prevStatus = prevStatus; Vector3 dir = -collision.contacts[0].normal; ps.currStatus = playerStatus.status.STUNNED; GameObject stunningEffectObject = Instantiate(stunnedEffect); stunningEffectObject.transform.position = transform.position; stunningEffectObject.transform.parent = transform; stunningEffectObject.transform.localPosition += new Vector3(0, 1.2f, 0); if (!(prevStatus == playerStatus.status.HOLDING || prevStatus == playerStatus.status.HELD)) { for (float t = 0.0f; t <= 0.5f; t += Time.deltaTime) { if (!GameControl.instance.isStarted) { rb.velocity = Vector3.zero; yield break; } float speed = knockBackSpeed - dashSpeedCurve.Evaluate(t / 0.5f) * (knockBackSpeed - 5); rb.velocity = speed * dir; yield return(new WaitForSeconds(Time.deltaTime)); } } StartCoroutine(getStunned(stunTime, stunningEffectObject, prevStatus)); }