コード例 #1
0
    //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);
    }
コード例 #2
0
    //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>());
    }