Ejemplo n.º 1
0
        public static void ImpactEffect(HitInfo info)
        {
            if (!info.DoHitEffects)
            {
                return;
            }
            string materialName = StringPool.Get(info.HitMaterial);
            string strName      = EffectDictionary.GetParticle(info.damageTypes.GetMajorityDamageType(), materialName);
            string decal        = EffectDictionary.GetDecal(info.damageTypes.GetMajorityDamageType(), materialName);

            if (TerrainMeta.WaterMap != null && info.HitMaterial != Projectile.WaterMaterialID() && info.HitMaterial != Projectile.FleshMaterialID() && info.HitPositionWorld.y < TerrainMeta.WaterMap.GetHeight(info.HitPositionWorld) && WaterLevel.Test(info.HitPositionWorld, false))
            {
                return;
            }
            if (BaseEntityEx.IsValid(info.HitEntity))
            {
                GameObjectRef impactEffect = info.HitEntity.GetImpactEffect(info);
                if (impactEffect.isValid)
                {
                    strName = impactEffect.resourcePath;
                }
                Run(strName, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                if (info.DoDecals)
                {
                    Run(decal, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                }
            }
            else
            {
                Type overrideType = Type.Generic;
                Run(strName, info.HitPositionWorld, info.HitNormalWorld, default(Vector3), overrideType);
                Run(decal, info.HitPositionWorld, info.HitNormalWorld, default(Vector3), overrideType);
            }
            if ((bool)info.WeaponPrefab)
            {
                BaseMelee baseMelee = info.WeaponPrefab as BaseMelee;
                if (baseMelee != null)
                {
                    string strikeEffectPath = baseMelee.GetStrikeEffectPath(materialName);
                    if (BaseEntityEx.IsValid(info.HitEntity))
                    {
                        Run(strikeEffectPath, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                    }
                    else
                    {
                        Run(strikeEffectPath, info.HitPositionWorld, info.HitNormalWorld);
                    }
                }
            }
            if (info.damageTypes.Has(DamageType.Explosion))
            {
                DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/explosion.prefab");
            }
            if (info.damageTypes.Has(DamageType.Heat))
            {
                DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/fire.prefab");
            }
        }
Ejemplo n.º 2
0
        public static void ImpactEffect(HitInfo info)
        {
            if (!info.DoHitEffects)
            {
                return;
            }
            string materialName = StringPool.Get(info.HitMaterial);

            if (Object.op_Inequality((Object)TerrainMeta.WaterMap, (Object)null) && (int)info.HitMaterial != (int)Projectile.WaterMaterialID() && ((int)info.HitMaterial != (int)Projectile.FleshMaterialID() && info.HitPositionWorld.y < (double)WaterLevel.GetWaterDepth(info.HitPositionWorld)))
            {
                return;
            }
            string strName = EffectDictionary.GetParticle(info.damageTypes.GetMajorityDamageType(), materialName);
            string decal   = EffectDictionary.GetDecal(info.damageTypes.GetMajorityDamageType(), materialName);

            if (info.HitEntity.IsValid())
            {
                GameObjectRef impactEffect = info.HitEntity.GetImpactEffect(info);
                if (impactEffect.isValid)
                {
                    strName = impactEffect.resourcePath;
                }
                Effect.server.Run(strName, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal, info.Predicted, false);
                Effect.server.Run(decal, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal, info.Predicted, false);
            }
            else
            {
                Effect.server.Run(strName, info.HitPositionWorld, info.HitNormalWorld, info.Predicted, false);
                Effect.server.Run(decal, info.HitPositionWorld, info.HitNormalWorld, info.Predicted, false);
            }
            if (Object.op_Implicit((Object)info.WeaponPrefab))
            {
                BaseMelee weaponPrefab = info.WeaponPrefab as BaseMelee;
                if (Object.op_Inequality((Object)weaponPrefab, (Object)null))
                {
                    string strikeEffectPath = weaponPrefab.GetStrikeEffectPath(materialName);
                    if (info.HitEntity.IsValid())
                    {
                        Effect.server.Run(strikeEffectPath, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal, info.Predicted, false);
                    }
                    else
                    {
                        Effect.server.Run(strikeEffectPath, info.HitPositionWorld, info.HitNormalWorld, info.Predicted, false);
                    }
                }
            }
            if (info.damageTypes.Has(DamageType.Explosion))
            {
                Effect.server.DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/explosion.prefab");
            }
            if (!info.damageTypes.Has(DamageType.Heat))
            {
                return;
            }
            Effect.server.DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/fire.prefab");
        }
    public static string GetParticle(DamageType damageType, string materialName)
    {
        switch (damageType)
        {
        case DamageType.Bullet:
        {
            return(EffectDictionary.GetParticle("bullet", materialName));
        }

        case DamageType.Slash:
        {
            return(EffectDictionary.GetParticle("slash", materialName));
        }

        case DamageType.Blunt:
        {
            return(EffectDictionary.GetParticle("blunt", materialName));
        }

        case DamageType.Fall:
        case DamageType.Radiation:
        case DamageType.Bite:
        {
            return(EffectDictionary.GetParticle("blunt", materialName));
        }

        case DamageType.Stab:
        {
            return(EffectDictionary.GetParticle("stab", materialName));
        }

        default:
        {
            if (damageType == DamageType.Arrow)
            {
                return(EffectDictionary.GetParticle("bullet", materialName));
            }
            return(EffectDictionary.GetParticle("blunt", materialName));
        }
        }
    }
Ejemplo n.º 4
0
    public static string GetParticle(DamageType damageType, string materialName)
    {
        switch (damageType)
        {
        case DamageType.Bullet:
            return(EffectDictionary.GetParticle("bullet", materialName));

        case DamageType.Slash:
            return(EffectDictionary.GetParticle("slash", materialName));

        case DamageType.Blunt:
            return(EffectDictionary.GetParticle("blunt", materialName));

        case DamageType.Stab:
            return(EffectDictionary.GetParticle("stab", materialName));

        case DamageType.Arrow:
            return(EffectDictionary.GetParticle("bullet", materialName));

        default:
            return(EffectDictionary.GetParticle("blunt", materialName));
        }
    }
Ejemplo n.º 5
0
        public static void ImpactEffect(HitInfo info)
        {
            Vector3 vector3;
            string  str      = StringPool.Get(info.HitMaterial);
            string  particle = EffectDictionary.GetParticle(info.damageTypes.GetMajorityDamageType(), str);
            string  decal    = EffectDictionary.GetDecal(info.damageTypes.GetMajorityDamageType(), str);

            if (TerrainMeta.WaterMap != null && info.HitMaterial != Projectile.WaterMaterialID() && info.HitMaterial != Projectile.FleshMaterialID() && info.HitPositionWorld.y < TerrainMeta.WaterMap.GetHeight(info.HitPositionWorld))
            {
                return;
            }
            if (!info.HitEntity.IsValid())
            {
                Vector3 hitPositionWorld = info.HitPositionWorld;
                Vector3 hitNormalWorld   = info.HitNormalWorld;
                vector3 = new Vector3();
                Effect.client.Run(particle, hitPositionWorld, hitNormalWorld, vector3);
                Vector3 hitPositionWorld1 = info.HitPositionWorld;
                Vector3 hitNormalWorld1   = info.HitNormalWorld;
                vector3 = new Vector3();
                Effect.client.Run(decal, hitPositionWorld1, hitNormalWorld1, vector3);
            }
            else
            {
                GameObjectRef impactEffect = info.HitEntity.GetImpactEffect(info);
                if (impactEffect.isValid)
                {
                    particle = impactEffect.resourcePath;
                }
                Effect.client.Run(particle, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                if (info.DoDecals)
                {
                    Effect.client.Run(decal, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                }
            }
            if (info.WeaponPrefab)
            {
                BaseMelee weaponPrefab = info.WeaponPrefab as BaseMelee;
                if (weaponPrefab != null)
                {
                    string strikeEffectPath = weaponPrefab.GetStrikeEffectPath(str);
                    if (!info.HitEntity.IsValid())
                    {
                        Vector3 vector31        = info.HitPositionWorld;
                        Vector3 hitNormalWorld2 = info.HitNormalWorld;
                        vector3 = new Vector3();
                        Effect.client.Run(strikeEffectPath, vector31, hitNormalWorld2, vector3);
                    }
                    else
                    {
                        Effect.client.Run(strikeEffectPath, info.HitEntity, info.HitBone, info.HitPositionLocal, info.HitNormalLocal);
                    }
                }
            }
            if (info.damageTypes.Has(DamageType.Explosion))
            {
                Effect.client.DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/explosion.prefab");
            }
            if (info.damageTypes.Has(DamageType.Heat))
            {
                Effect.client.DoAdditiveImpactEffect(info, "assets/bundled/prefabs/fx/impacts/additive/fire.prefab");
            }
        }