IEnumerator AttackPattern(AttackDataEx data) { yield return(new WaitForSeconds(data.startupFrames / 60)); for (int i = 0; i < data.hbData.Length; i++) { rb.AddForce(data.hbData[i].playerForce * facingSide, ForceMode.Impulse); Instantiate(data.hbData[i].hurtBox, gameObject.transform.position + Vector3.Scale(data.hbData[i].hurtBox.transform.position, tempFacingV3), gameObject.transform.rotation); CancelCalculations(); yield return(new WaitForSeconds(data.hbData[i].activeFrames / 60)); } yield return(new WaitForSeconds(data.recoveryFramesOnMiss / 60)); isAttacking = false; }
IEnumerator AttackPattern(AttackDataEx data) { isAttacking = true; canCancel = true; data.SetID(counterID); if (counterID == short.MaxValue) { counterID = 0; } counterID++; yield return(new WaitWhile(() => attackBuffer.Count != 0)); attackBuffer.Add(data); // Add the current attack to the attackBuffer animator.SetInteger(_AnimatorAttack, data.num); yield return(new WaitForSeconds(data.startupFrames / 60)); GameObject soundClip = Instantiate(data.sound, GameObject.Find("Main Camera/audio/").transform); for (int i = 0; i < data.hbData.Length; i++) { rb.AddForce(Vector3.Scale(data.hbData[i].playerForce, tempFacingV3), ForceMode.Impulse); string path = "Prefabs/Hurtboxes/"; string hurt = (data.hbData[i].hurtBox).name; if (hurt.StartsWith("Light")) { path += "Light/"; } else if (hurt.StartsWith("Heavy")) { path += "Heavy/"; } else if (hurt.StartsWith("Special")) { path += "Special/"; } CmdHurt(path + hurt, gameObject.transform.position + Vector3.Scale(data.hbData[i].hurtBox.transform.position, tempFacingV3), gameObject.transform.rotation, data.damage, data.stunFrames, data.meterValue, data.knockdown, data.GetID()); if (data.endsAerial && jumpedMidair == false) { jumpedMidair = true; } yield return(new WaitForSeconds(data.hbData[i].activeFrames / 60)); } attackBuffer.Remove(data); animator.SetInteger(_AnimatorAttack, 0); yield return(new WaitForSeconds(data.recoveryFrames / 60)); if (attackBuffer.Count == 0) { currentMoveInCombo = 0; canCancel = false; isAttacking = false; } }
} // Used for midair jump calculations (DO NOT TOUCH) void Attack(AttackDataEx attack) { StartCoroutine(AttackPattern(attack)); }
} // Used for midair jump calculations (DO NOT TOUCH) void Attack(AttackDataEx attack) { lightAttack = false; rb.velocity = Vector3.zero; StartCoroutine(AttackPattern(attack)); }