Esempio n. 1
0
        /// <summary>
        /// Called when the actor takes damage. This allows the actor to respond.
        /// Damage Type 0 = Physical melee
        /// Damage Type 1 = Physical ranged
        /// </summary>
        /// <param name="rDamageValue">Amount of damage to take</param>
        /// <param name="rDamageType">Damage type taken</param>
        /// <param name="rAttackAngle">Angle that the damage came from releative to the actor's forward</param>
        /// <returns>Determines if the damage was applied</returns>
        public virtual bool OnDamaged(float rDamageValue, int rDamageType = 0, float rAttackAngle = 0f, Transform rBone = null)
        {
            if (!IsAlive)
            {
                return(true);
            }

            float lRemainingHealth = 0f;

            if (AttributeSource != null)
            {
                lRemainingHealth = AttributeSource.GetAttributeValue(HealthID) - rDamageValue;
                AttributeSource.SetAttributeValue(HealthID, lRemainingHealth);
            }

            if (lRemainingHealth <= 0f)
            {
                OnDeath(rDamageValue, rDamageType, rAttackAngle, rBone);
            }
            else
            {
                MotionController lMC = gameObject.GetComponent <MotionController>();
                if (lMC != null)
                {
                    lMC.ActivateMotion(DamagedMotion, (int)rAttackAngle);
                }
            }

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// Called when the actor takes damage. This allows the actor to respond.
        /// Damage Type 0 = Physical melee
        /// Damage Type 1 = Physical ranged
        /// </summary>
        /// <param name="rDamageValue">Amount of damage to take</param>
        /// <param name="rDamageType">Damage type taken</param>
        /// <param name="rAttackAngle">Angle that the damage came from releative to the actor's forward</param>
        /// <param name="rDamagedMotion">Motion to activate due to damage</param>
        /// <param name="rDeathMotion">Motion to activate due to death</param>
        /// <returns>Determines if the damage was applied</returns>
        public virtual bool OnDamaged(IMessage rMessage)
        {
            com.ootii.Utilities.Debug.Log.FileWrite(transform.name + ".OnDamaged()");

            if (!IsAlive)
            {
                return(true);
            }

            float lRemainingHealth = 0f;

            if (AttributeSource != null && rMessage is CombatMessage)
            {
                lRemainingHealth = AttributeSource.GetAttributeValue(HealthID) - ((CombatMessage)rMessage).Damage;
                AttributeSource.SetAttributeValue(HealthID, lRemainingHealth);
            }

            if (lRemainingHealth <= 0f)
            {
                OnKilled(rMessage);
            }
            else
            {
                MotionController lMC = gameObject.GetComponent <MotionController>();
                if (lMC != null)
                {
                    // Send the message to the MC to let it activate
                    //ActorMessage lMessage = ActorMessage.Allocate();
                    rMessage.ID = CombatMessage.MSG_DEFENDER_DAMAGED;
                    lMC.SendMessage(rMessage);

                    //lMC.ActivateMotion((rDamagedMotion.Length > 0 ? rDamagedMotion : DamagedMotion), (int)rAttackAngle);
                }
                else
                {
                    Animator lAnimator = gameObject.GetComponent <Animator>();
                    if (lAnimator != null)
                    {
                        lAnimator.CrossFade(DamagedMotion, 0.25f);
                    }
                }
            }

            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// Called when the actor takes damage. This allows the actor to respond.
        /// Damage Type 0 = Physical melee
        /// Damage Type 1 = Physical ranged
        /// </summary>
        /// <param name="rDamageValue">Amount of damage to take</param>
        /// <param name="rDamageType">Damage type taken</param>
        /// <param name="rAttackAngle">Angle that the damage came from releative to the actor's forward</param>
        /// <param name="rDamagedMotion">Motion to activate due to damage</param>
        /// <param name="rDeathMotion">Motion to activate due to death</param>
        /// <returns>Determines if the damage was applied</returns>
        public virtual bool OnDamaged(IMessage rMessage)
        {
            if (!IsAlive)
            {
                return(true);
            }

            float lRemainingHealth = 0f;

            if (AttributeSource != null)
            {
                if (rMessage is DamageMessage)
                {
                    lRemainingHealth = AttributeSource.GetAttributeValue(HealthID) - ((DamageMessage)rMessage).Damage;
                    AttributeSource.SetAttributeValue(HealthID, lRemainingHealth);
                }
            }

            if (lRemainingHealth <= 0f)
            {
                OnKilled(rMessage);
            }
            else if (rMessage != null)
            {
                bool lPlayAnimation = true;
                if (rMessage is DamageMessage)
                {
                    lPlayAnimation = ((DamageMessage)rMessage).AnimationEnabled;
                }

                if (lPlayAnimation)
                {
                    MotionController lMotionController = gameObject.GetComponent <MotionController>();
                    if (lMotionController != null)
                    {
                        // Send the message to the MC to let it activate
                        rMessage.ID = CombatMessage.MSG_DEFENDER_DAMAGED;
                        lMotionController.SendMessage(rMessage);
                    }

                    if (!rMessage.IsHandled && DamagedMotion.Length > 0)
                    {
                        MotionControllerMotion lMotion = lMotionController.GetMotion(DamagedMotion);
                        if (lMotion != null)
                        {
                            lMotionController.ActivateMotion(lMotion);
                        }
                        else
                        {
                            Animator lAnimator = gameObject.GetComponent <Animator>();
                            if (lAnimator != null)
                            {
                                lAnimator.CrossFade(DamagedMotion, 0.25f);
                            }
                        }
                    }
                }
            }

            return(true);
        }