private IEnumerator _ChargeAttack(AttackAction attackAction)
    {
        if (_repelCirclePart.energy < ActivationEnergy)
        {
            attackAction.EndAttack(dontFade: true);
            yield break;
        }

        while (_chargeAmount < chargeMinLength || //At least charge to min
               (attackAction.inH != 0 && _ctrl.attackHorizontal == attackAction.inH ||
                attackAction.inV != 0 && _ctrl.attackVertical == attackAction.inV) && _chargeAmount < chargeMaxLength)
        {
            _dir += 2 * chargeMaxLength * Time.fixedDeltaTime *
                    new Vector2(_ctrl.attackHorizontal, _ctrl.attackVertical);
            var   right  = _repelCirclePart.transform.right;
            float rotAmt = Vector2.SignedAngle(attackAction.inH >= 0 ? right : -right, _dir);
            _repelCirclePart.transform.Rotate(Vector3.forward, rotAmt * Time.fixedDeltaTime * 10);
            _rb.gravityScale = 0;
            _rb.velocity    -= Time.fixedDeltaTime * 10 * _rb.velocity;
            _chargeAmount   += Time.fixedDeltaTime;
            yield return(Yields.WaitForFixedUpdate);
        }
        attackAction.state = AttackState.Attacking;
        attackAction.BeginAttacking();
    }
Exemple #2
0
 /// <summary> Receives events from weapon animations. </summary>
 /// <param name="e"> The object sent from the animation </param>
 /// <param name="duration"> An optional duration that some events need </param>
 public void ReceiveAnimationEvent(AnimationEventObject e, float duration)
 {
     if (primaryAttack.state == AttackState.Ended)
     {
         return;
     }
     if (e == _animEventObjs.attackFadeIn && primaryAttack.state == AttackState.WindingUp)
     {
         FadeAttackIn(duration);
     }
     else if (e == _animEventObjs.attackAttackingStart && primaryAttack.state == AttackState.WindingUp)
     {
         primaryAttack.BeginAttacking();
     }
     else if (e == _animEventObjs.attackAttackingEnd && primaryAttack.state == AttackState.Attacking)
     {
         primaryAttack.BeginRecovering();
     }
     else if (e == _animEventObjs.attackFadeOut && primaryAttack.state == AttackState.Recovering)
     {
         primaryAttack.EndAttack(duration);
     }
 }