Beispiel #1
0
    protected virtual void Init()
    {
        fighter = gameObject.GetMeleeFighter();
        ///Initialize all bodyMembers and weapons
        foreach (BodyMember member in Members)
        {
            ///damage of member will be always the defaultDamage
            //member.attackObject.damage = defaultDamage;
            member.attackObject.damage.damageValue = defaultDamage.damageValue;
            if (member.bodyPart == HumanBodyBones.LeftLowerArm.ToString())
            {
                var weapon = member.attackObject.GetComponentInChildren <MeleeWeapon>();
                leftWeapon = weapon;
            }
            if (member.bodyPart == HumanBodyBones.RightLowerArm.ToString())
            {
                var weapon = member.attackObject.GetComponentInChildren <MeleeWeapon>();
                rightWeapon = weapon;
            }
            member.attackObject.meleeManager = this;
            member.SetActiveDamage(false);
        }

        if (leftWeapon != null)
        {
            leftWeapon.SetActiveDamage(false);
            leftWeapon.meleeManager = this;
        }
        if (rightWeapon != null)
        {
            rightWeapon.meleeManager = this;
            rightWeapon.SetActiveDamage(false);
        }
    }// Init properties
Beispiel #2
0
    public void OnReceiveAttack(Damage damage, IMeleeFighter attacker)
    {
        StartCoroutine(CheckChanceToBlock(chanceToBlockAttack, 0));

        var attackPos = (attacker != null && attacker.Character() != null) ? attacker.Character().transform.position : damage.hitPosition;

        if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(attackPos))
        {
            var damageReduction = meleeManager != null?meleeManager.GetDefenseRate() : 0;

            if (damageReduction > 0)
            {
                damage.ReduceDamage(damageReduction);
            }
            if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack())
            {
                attacker.OnRecoil(meleeManager.GetDefenseRecoilID());
            }
            meleeManager.OnDefense();
        }
        // apply tag from the character that hit you and start chase
        if (!sphereSensor.passiveToDamage && damage.sender != null)
        {
            target       = damage.sender;
            currentState = AIStates.Chase;
            sphereSensor.SetTagToDetect(damage.sender);
        }
        if (!passiveToDamage)
        {
            SetAgressive(true);
        }
        TakeDamage(damage, !isBlocking);
    }
Beispiel #3
0
 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     mFighter    = animator.GetComponent <IMeleeFighter>();
     isAttacking = true;
     if (mFighter != null)
     {
         mFighter.OnEnableAttack();
     }
 }
Beispiel #4
0
    /// <summary>
    /// Init properties
    /// </summary>
    protected virtual void Init()
    {
        fighter = gameObject.GetMeleeFighter();
        if (this.aiAttackObject == null)
        {
            this.aiAttackObject = GetComponentInChildren <AIAttackObject>();
        }

        var attackObject = this.aiAttackObject.GetComponent <AIAttackObject>();

        attackObject.aiManager = this;
        attackObject.SetActiveDamage(false);
    }
Beispiel #5
0
    /// <summary>
    /// Aplica o dano usando OnReeciver method
    /// </summary>
    /// <param name="receiver">target damage receiver</param>
    /// <param name="damage">damage</param>
    /// <param name="attacker">damage sender</param>
    public static void ApplyDamage(this GameObject receiver, Damage damage, IMeleeFighter attacker)
    {
        var attackReceiver = receiver.GetComponent <IAttackReceiver>();

        if (attackReceiver != null)
        {
            attackReceiver.OnReceiveAttack(damage, attacker);
        }
        else
        {
            receiver.ApplyDamage(damage);
        }
    }// Apply damage using OnReeiveAttack method if receiver dosent has a IAttackReceiver, the Simple ApplyDamage is called
 public void OnReceiveAttack(Damage damage, IMeleeFighter attacker)
 {
     // character is blocking
     if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(attacker.Character().transform.position))
     {
         var damageReduction = meleeManager.GetDefenseRate();
         if (damageReduction > 0)
         {
             damage.ReduceDamage(damageReduction);
         }
         if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack())
         {
             attacker.OnRecoil(meleeManager.GetDefenseRecoilID());
         }
         meleeManager.OnDefense();
         //cc.currentStaminaRecoveryDelay = damage.staminaRecoveryDelay;
         //cc.currentStamina -= damage.staminaBlockCost;
     }
     // apply damage
     character.TakeDamage(damage, !isBlocking);
 }
Beispiel #7
0
 public void OnReceiveAttack(Damage damage, IMeleeFighter attacker)
 {
 }