コード例 #1
0
        public void OnReceiveAttack(vDamage damage, vIMeleeFighter 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 (!passiveToDamage && damage.sender != null)
            {
                SetCurrentTarget(damage.sender);
                currentState = AIStates.Chase;
            }
            damage.hitReaction = !isBlocking;
            if (!passiveToDamage)
            {
                SetAgressive(true);
            }
            TakeDamage(damage);
        }
コード例 #2
0
 public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     if (overrideReactionID)
     {
         damage.reaction_id = reactionID;
     }
     if (ragdoll && !ragdoll.iChar.isDead)
     {
         var _damage = new vDamage(damage);
         var value   = (float)_damage.damageValue;
         _damage.damageValue = (int)(value * damageMultiplier);
         ragdoll.gameObject.ApplyDamage(_damage, attacker);
     }
     else
     {
         if (!iChar)
         {
             iChar = GetComponentInParent <vCharacter>();
         }
         if (iChar)
         {
             var _damage = new vDamage(damage);
             var value   = (float)_damage.damageValue;
             _damage.damageValue = (int)(value * damageMultiplier);
             iChar.gameObject.ApplyDamage(_damage, attacker);
         }
     }
 }
コード例 #3
0
 public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     //character is blocking
     if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(damage.sender.position))
     {
         var damageReduction = meleeManager.GetDefenseRate();
         if (damageReduction > 0)
         {
             damage.ReduceDamage(damageReduction);
         }
         if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack())
         {
             attacker.BreakAttack(meleeManager.GetDefenseRecoilID());
         }
         meleeManager.OnDefense();
         cc.currentStaminaRecoveryDelay = damage.staminaRecoveryDelay;
         cc.currentStamina -= damage.staminaBlockCost;
     }
     //apply damage
     damage.hitReaction = !isBlocking;
     if (GetComponent <PhotonView>().IsMine == true)
     {
         cc.TakeDamage(damage);
     }
     else
     {
         GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.Others, JsonUtility.ToJson(damage));
     }
 }
コード例 #4
0
        /// <summary>
        /// Init properties
        /// </summary>
        protected virtual void Init()
        {
            fighter = gameObject.GetMeleeFighter();
            ///Initialize all bodyMembers and weapons
            foreach (vBodyMember 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 <vMeleeWeapon>(true);
                    leftWeapon = weapon;
                }
                if (member.bodyPart == HumanBodyBones.RightLowerArm.ToString())
                {
                    var weapon = member.attackObject.GetComponentInChildren <vMeleeWeapon>(true);
                    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);
            }
        }
コード例 #5
0
ファイル: vAIInterface.cs プロジェクト: nerodroid/dog_game
 public override void ClearTarget()
 {
     base.ClearTarget();
     healthController  = null;
     meleeFighter      = null;
     character         = null;
     combateController = null;
 }
コード例 #6
0
 /// <summary>
 /// This makes this action only callable by the owner and networked
 /// players will not react to the input of the owner players.
 /// </summary>
 public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     if (GetComponent <PhotonView>().IsMine == false)
     {
         return;
     }
     base.OnReceiveAttack(damage, attacker);
 }
コード例 #7
0
ファイル: vMeleeAttackControl.cs プロジェクト: hejia-v/xgame
 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     mFighter    = animator.GetComponent <vIMeleeFighter>();
     isAttacking = true;
     if (mFighter != null)
     {
         mFighter.OnEnableAttack();
     }
 }
コード例 #8
0
ファイル: vAIInterface.cs プロジェクト: nerodroid/dog_game
 public override void InitTarget(Transform target)
 {
     base.InitTarget(target);
     if (target)
     {
         healthController     = target.GetComponent <vIHealthController>();
         _hadHealthController = this.healthController != null;
         meleeFighter         = target.GetComponent <vIMeleeFighter>();
         character            = target.GetComponent <vICharacter>();
         combateController    = target.GetComponent <vIControlAICombat>();
     }
 }
コード例 #9
0
 protected virtual void TryApplyRecoil(vIMeleeFighter fighter)
 {
     if (MeleeManager && fighter != null)
     {
         if (isBlocking && MeleeManager.CanBlockAttack(fighter.transform.position))
         {
             if (MeleeManager.CanBreakAttack())
             {
                 fighter.OnRecoil(MeleeManager.GetDefenseRecoilID());
             }
         }
     }
 }
コード例 #10
0
        /// <summary>
        /// Apply damage using OnReeiveAttack method if receiver dosent has a vIAttackReceiver, the Simple ApplyDamage is called
        /// </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, vDamage damage, vIMeleeFighter attacker)
        {
            var attackReceiver = receiver.GetComponent <vIAttackReceiver>();

            if (attackReceiver != null)
            {
                attackReceiver.OnReceiveAttack(damage, attacker);
            }
            else
            {
                receiver.ApplyDamage(damage);
            }
        }
コード例 #11
0
        /// <summary>
        /// Apply damage using OnReeiveAttack method if receiver dosent has a vIAttackReceiver, the Simple ApplyDamage is called
        /// </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, vDamage damage, vIMeleeFighter attacker)
        {
            var attackReceiver = receiver.GetComponent <vIAttackReceiver>();

            if (attackReceiver != null)
            {
                attackReceiver.OnReceiveAttack(damage, attacker);
            }
            else
            {
                receiver.ApplyDamage(damage);
            }
            if (receiver.transform.root.gameObject.GetComponent <PhotonView>() && receiver.transform.root.gameObject.GetComponent <PhotonView>().IsMine == false)
            {
                receiver.transform.root.gameObject.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.Others, JsonUtility.ToJson(damage));
            }
        }
コード例 #12
0
 public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     if ((ragdoll && !ragdoll.iChar.isDead))
     {
         var _damage = ApplyDamageModifiers(damage);
         ragdoll.gameObject.ApplyDamage(ApplyDamageModifiers(_damage), attacker);
         onReceiveDamage.Invoke(ApplyDamageModifiers(_damage));
     }
     else if (targetReceiver)
     {
         var _damage = ApplyDamageModifiers(damage);
         targetReceiver.gameObject.ApplyDamage(ApplyDamageModifiers(_damage), attacker);
         onReceiveDamage.Invoke(ApplyDamageModifiers(_damage));
     }
     else
     {
         TakeDamage(damage);
     }
 }
コード例 #13
0
 public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     if (!ragdoll)
     {
         return;
     }
     if (!ragdoll.iChar.isDead)
     {
         var _damage = new vDamage(damage);
         var value   = (float)_damage.damageValue;
         _damage.damageValue = (int)(value * damageMultiplier);
         if (ragdoll.gameObject.IsAMeleeFighter())
         {
             ragdoll.gameObject.GetMeleeFighter().OnReceiveAttack(_damage, attacker);
         }
         else
         {
             ragdoll.gameObject.ApplyDamage(_damage);
         }
     }
 }
コード例 #14
0
 public void OnReceiveAttack(vDamage damage, vIMeleeFighter 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
     cc.TakeDamage(damage, !isBlocking);
 }
コード例 #15
0
        public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
        {
            if (overrideReactionID)
            {
                damage.reaction_id = reactionID;
            }

            if (ragdoll && !ragdoll.iChar.isDead)
            {
                var _damage = new vDamage(damage);
                var value   = (float)_damage.damageValue;
                _damage.damageValue = (int)(value * damageMultiplier);
                ragdoll.gameObject.ApplyDamage(_damage, attacker);
                onReceiveDamage.Invoke(_damage);
            }
            else
            {
                if (healthController == null)
                {
                    healthController = GetComponentInParent <vIHealthController>();
                }

                if (healthController != null)
                {
                    var _damage = new vDamage(damage);
                    var value   = (float)_damage.damageValue;
                    _damage.damageValue = (int)(value * damageMultiplier);
                    try
                    {
                        healthController.gameObject.ApplyDamage(_damage, attacker);
                        onReceiveDamage.Invoke(_damage);
                    }
                    catch
                    {
                        this.enabled = false;
                    }
                }
            }
        }
コード例 #16
0
 public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
 {
     TakeDamage(damage);
     TryApplyRecoil(attacker);
 }
コード例 #17
0
ファイル: vDamageReceiver.cs プロジェクト: nerodroid/dog_game
        public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
        {
            float multiplier = (useRandomValues && !fixedValues) ? Random.Range(minDamageMultiplier, maxDamageMultiplier) :
                               (useRandomValues && fixedValues) ? randomChange ? maxDamageMultiplier : minDamageMultiplier : damageMultiplier;

            if (overrideReactionID)
            {
                if (useRandomValues && !fixedValues)
                {
                    damage.reaction_id = Random.Range(minReactionID, maxReactionID);
                }
                else if (useRandomValues && fixedValues)
                {
                    damage.reaction_id = randomChange ? maxReactionID : minReactionID;
                }
                else
                {
                    damage.reaction_id = reactionID;
                }
            }

            if (ragdoll && !ragdoll.iChar.isDead)
            {
                var _damage = new vDamage(damage);
                var value   = (float)_damage.damageValue;
                _damage.damageValue = (int)(value * multiplier);
                if (multiplier == maxDamageMultiplier)
                {
                    OnGetMaxValue.Invoke();
                }
                ragdoll.gameObject.ApplyDamage(_damage, attacker);
                onReceiveDamage.Invoke(_damage);
            }
            else
            {
                if (healthController == null && targetReceiver)
                {
                    healthController = targetReceiver.GetComponent <vIHealthController>();
                }
                else if (healthController == null)
                {
                    healthController = GetComponentInParent <vIHealthController>();
                }

                if (healthController != null)
                {
                    var _damage = new vDamage(damage);
                    var value   = (float)_damage.damageValue;
                    _damage.damageValue = (int)(value * multiplier);
                    if (multiplier == maxDamageMultiplier)
                    {
                        OnGetMaxValue.Invoke();
                    }
                    try
                    {
                        healthController.gameObject.ApplyDamage(_damage, attacker);
                        onReceiveDamage.Invoke(_damage);
                    }
                    catch
                    {
                        this.enabled = false;
                    }
                }
            }
        }
コード例 #18
0
 public virtual void OnReceiveAttack(vIControlAICombat controller, ref vDamage damage, vIMeleeFighter attacker, ref bool canBlock)
 {
     //HandleDefensiveCombat(controller, true);
     if (damage.damageValue > 0)
     {
         if (attacker != null && attacker.character != null && !attacker.character.isDead)
         {
             controller.SetCurrentTarget(attacker.transform);
         }
     }
 }
コード例 #19
0
    public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker)
    {
        if (overrideReactionID)
        {
            damage.reaction_id = reactionID;
        }

        if (ragdoll && !ragdoll.iChar.isDead)
        {
            var _damage = new vDamage(damage);
            var value   = (float)_damage.damageValue;
            _damage.damageValue = (int)(value * damageMultiplier);
            if (ragdoll.gameObject.transform.root.GetComponent <PhotonView>().IsMine == true)
            {
                ragdoll.gameObject.ApplyDamage(_damage, attacker);
            }
            else if (healthController != null)
            {
                healthController.gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage));
            }
            else if (gameObject.transform.root.GetComponent <PhotonView>())
            {
                gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage));
            }
            onReceiveDamage.Invoke(_damage);
        }
        else
        {
            if (healthController == null)
            {
                healthController = GetComponentInParent <vIHealthController>();
            }

            if (healthController != null)
            {
                var _damage = new vDamage(damage);
                var value   = (float)_damage.damageValue;
                _damage.damageValue = (int)(value * damageMultiplier);
                try
                {
                    if (healthController.gameObject.transform.root.GetComponent <PhotonView>().IsMine == true)
                    {
                        healthController.gameObject.ApplyDamage(_damage, attacker);
                    }
                    else if (healthController != null)
                    {
                        healthController.gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage));
                    }
                    else if (gameObject.transform.root.GetComponent <PhotonView>())
                    {
                        gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage));
                    }
                    onReceiveDamage.Invoke(_damage);
                }
                catch
                {
                    this.enabled = false;
                }
            }
        }
    }