//Execute dash with a set vector already in mind // Pre: move == dashing move, dashVector != zero vector, time > 0, new Priority is between 1 & 10 public IEnumerator executeDash(IMove move, Vector2 dashVector, float time, int newPriority) { //Set general hitbox properties currentMove = move; priority = newPriority; Animator anim = entity.GetComponent <Animator>(); //Alter properties of character enemyTag = (transform.tag == "Player" || transform.tag == "PlayerRecovery") ? "Enemy" : "Player"; enemyAttackTag = (transform.tag == "Player" || transform.tag == "PlayerRecovery") ? "EnemyAttack" : "PlayerAttack"; transform.tag = (transform.tag == "Player" || transform.tag == "PlayerRecovery") ? "PlayerAttack" : "EnemyAttack"; if (!entity.getAssist()) { entity.getController().canMove = false; } //Set dashing variables dashing = true; float curTime = 0.0f; GetComponent <Rigidbody2D>().AddForce(dashVector); Battle.updatePlayerAOrientation(entity.transform); anim.SetBool("Dashing", true); //Dashing while (dashing && curTime < time && !entity.isStunned()) { yield return(new WaitForFixedUpdate()); curTime += Time.deltaTime; } //Check if player is recoiling (dash was interuppted) if (dashing) { dashing = false; GetComponent <Rigidbody2D>().velocity = Vector2.zero; } //Reset properties of character transform.tag = (transform.tag == "PlayerAttack") ? "Player" : "Enemy"; if (!entity.isStunned() && entity.isAlive()) { entity.getController().canMove = true; } anim.SetBool("Dashing", false); }
//Responsible for grab knockback IEnumerator grabKnockback(Transform enemy) { //Sets up knockback variable and needed reference variables Vector2 kVect = Battle.dirKnockbackCalc(enemy.position, basis.transform.position, KNOCKBACK_VAL); Rigidbody2D rb = enemy.GetComponent <Rigidbody2D>(); Rigidbody2D basisRB = basis.GetComponent <Rigidbody2D>(); PKMNEntity enemyFighter = enemy.GetComponent <PKMNEntity>(); Controller control = enemyFighter.getController(); //Disable movement until grab movement done if (!enemyFighter.getAssist()) { control.canMove = false; } yield return(new WaitForSeconds(STUN_DELAY)); //Overrides default knockback canceller (receiveDamage) rb.AddForce(kVect); float kbTimer = 0; while (kbTimer < KNOCKBACK_DURATION) { yield return(new WaitForFixedUpdate()); kbTimer += Time.deltaTime; } rb.velocity = Vector2.zero; basisRB.velocity = Vector2.zero; if (basis.tag == "Player" || basis.tag == "PlayerAttack" || basis.tag == "PlayerRecovery") { PlayerMovement mainControl = (PlayerMovement)(basis.getController()); mainControl.selectedFighter.GetComponent <Rigidbody2D>().velocity = Vector2.zero; } if (!enemyFighter.isStunned() && !enemy.GetComponent <DashChargeHitBox>().isDashing() && !enemy.GetComponent <Animator>().GetBool("Dashing")) { control.canMove = true; } //Add debuff StatEffect debuff = new StatEffect(DEBUFF_DURATION, DEBUFF_FACTOR, STAT_TYPE); debuff.applyEffect(enemy.GetComponent <PKMNEntity>()); }