예제 #1
0
        void OnTakeDamage(Damageable damageable, DamageMessage damageMessage)
        {
            // if we're dead and passed in a damageable that's part of our ragdoll
            // maybe dismember it

            if (damageable != null)
            {
                RagdollTransform damagedBone;
                if (ragdollController.ragdoll.Transform2HumanBone(damageable.transform, out damagedBone))
                {
                    if (damageMessage.severity >= minSeverityForDismember)
                    {
                        float dismemberChance = boneData[damagedBone.bone.bone].chanceDismember;
                        if (Random.value <= dismemberChance)
                        {
                            ragdollController.ragdoll.DismemberBone("damage", damagedBone);
                        }
                    }

                    // set bone decay for the hit bone, so the physics will affect it
                    // (slightly lower for neighbor bones)
                    float mainDecay          = 1;
                    float neighborMultiplier = .75f;
                    ragdollController.AddBoneDecay(damagedBone.bone.bone, mainDecay, neighborMultiplier);
                }
            }
        }
예제 #2
0
        public void SendDamage(Damageable subDamageable, DamageMessage damageMessage)
        {
            bool deadFromDamage = false;

            if (health > 0)
            {
                float damage = damageMessage.baseDamage;
                if (damageModifier != null)
                {
                    damage = damageModifier(subDamageable, damage);
                }
                health -= damage;
                // Debug.LogError(name + " DAMAGE +" + damage);

                deadFromDamage = health <= 0;
                if (damageMessage.damager != null)
                {
                    damageMessage.damager.DamageDealtCallback(this, damage, health);
                }
            }

            if (onTakeDamage != null)
            {
                onTakeDamage(subDamageable, damageMessage);
            }
            if (deadFromDamage)
            {
                OnDeath(subDamageable, damageMessage);
            }
        }
예제 #3
0
 public void SendDamage(DamageMessage damageMessage)
 {
     if (onDamageReceive != null)
     {
         onDamageReceive(this, damageMessage);
     }
     else
     {
         Debug.LogError(name + " Damageable isn't doing anything...");
     }
 }
예제 #4
0
        public void OnDeath(Damageable subDamageable, DamageMessage damageMessage)
        {
            health = 0;

            if (damageMessage.damager != null)
            {
                damageMessage.damager.DamageDeathCallback(this);
            }

            if (onDeath != null)
            {
                onDeath(subDamageable, damageMessage);
            }

            // Debug.LogError(name + " is DEAD");
            StartCoroutine(DebugRevival());
        }
예제 #5
0
        void OnDeath(Damageable damageable, DamageMessage damageMessage)
        {
            // if (damageable != null) {

            //     RagdollTransform damagedBone = null;

            //     if ( ragdollController.ragdoll.Transform2HumanBone (damageable.transform, out damagedBone) ) {

            //         // set bone decay for the hit bone, so the physics will affect it
            //         // (slightly lower for neighbor bones)
            //         float mainDecay = 1;
            //         float neighborMultiplier = .75f;
            //         ragdollController.AddBoneDecay(damagedBone.bone.bone, mainDecay, neighborMultiplier);
            //     }
            // }

            //make it go ragdoll
            ragdollController.GoRagdoll("death");

            ragdollController.disableGetUp = true;
        }