// Token: 0x0600016C RID: 364 RVA: 0x000083E4 File Offset: 0x000065E4
    public static SurfaceDef GetObjectSurfaceDef(Collider collider, Vector3 position)
    {
        SurfaceDefProvider component = collider.GetComponent <SurfaceDefProvider>();

        if (!component)
        {
            return(null);
        }
        return(component.surfaceDef);
    }
Example #2
0
 private bool CheckForWaterOld(Vector3 position, bool below = true)
 {
     if (Physics.Raycast(new Ray(position + Vector3.up * 1.5f, below ? Vector3.down : Vector3.up), out RaycastHit raycastHit, below ? 4f : 8f, LayerIndex.world.mask | LayerIndex.water.mask, QueryTriggerInteraction.Collide))
     {
         SurfaceDef objectSurfaceDef = SurfaceDefProvider.GetObjectSurfaceDef(raycastHit.collider, raycastHit.point);
         if (objectSurfaceDef)
         {
             if (objectSurfaceDef == waterSD)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Example #3
0
        public static bool CheckForWater(Vector3 position, float castDistance = 8f)
        {
            var layerMask = LayerIndex.world.mask | LayerIndex.water.mask;

            if (Physics.Raycast(new Ray(position + Vector3.up * castDistance, Vector3.down), out RaycastHit raycastHit, castDistance, layerMask, QueryTriggerInteraction.Collide) ||
                Physics.Raycast(new Ray(position + Vector3.down * castDistance, Vector3.up), out raycastHit, castDistance, layerMask, QueryTriggerInteraction.Collide))
            {
                SurfaceDef objSurfDefDown = SurfaceDefProvider.GetObjectSurfaceDef(raycastHit.collider, raycastHit.point);
                if (objSurfDefDown && objSurfDefDown == waterSD)
                {
                    return(true);
                }
            }
            return(false);
        }
        private void ProcessHits(List <ExtendedOverlapAttack.OverlapInfo> hitList)
        {
            if (hitList.Count == 0)
            {
                return;
            }
            Vector3 vector = Vector3.zero;
            float   d      = 1f / (float)hitList.Count;

            for (int i = 0; i < hitList.Count; i++)
            {
                ExtendedOverlapAttack.OverlapInfo overlapInfo = hitList[i];
                if (this.hitEffectPrefab)
                {
                    Vector3 forward = -hitList[i].pushDirection;
                    EffectManager.SpawnEffect(this.hitEffectPrefab, new EffectData
                    {
                        origin   = overlapInfo.hitPosition,
                        rotation = Util.QuaternionSafeLookRotation(forward),
                    }, true);

                    Util.PlaySound("Play_MULT_shift_hit", this.hitEffectPrefab.gameObject);
                }
                vector += overlapInfo.hitPosition * d;
                SurfaceDefProvider component = hitList[i].hurtBox.GetComponent <SurfaceDefProvider>();
                if (component && component.surfaceDef)
                {
                    SurfaceDef objectSurfaceDef = SurfaceDefProvider.GetObjectSurfaceDef(hitList[i].hurtBox.collider, hitList[i].hitPosition);
                    if (objectSurfaceDef)
                    {
                        if (objectSurfaceDef.impactEffectPrefab)
                        {
                            EffectManager.SpawnEffect(objectSurfaceDef.impactEffectPrefab, new EffectData
                            {
                                origin   = overlapInfo.hitPosition,
                                rotation = ((overlapInfo.pushDirection == Vector3.zero) ? Quaternion.identity : Util.QuaternionSafeLookRotation(overlapInfo.pushDirection)),
                                color    = objectSurfaceDef.approximateColor,
                                scale    = 2f
                            }, true);
                        }
                        if (objectSurfaceDef.impactSoundString != null && objectSurfaceDef.impactSoundString.Length != 0)
                        {
                            Util.PlaySound(objectSurfaceDef.impactSoundString, hitList[i].hurtBox.gameObject);
                        }
                    }
                }
            }
            this.lastFireAverageHitPosition = vector;
            //Since we're the server, we can do damage pretty freely.
            if (NetworkServer.active)
            {
                ExtendedOverlapAttack.PerformDamage(this.attacker, this.inflictor, this.damage, this.isCrit, this.procChainMask, this.procCoefficient, this.damageColorIndex, this.damageType, this.forceVector, this.pushAwayForce, this.upwardsForce, hitList);
                return;
            }
            ExtendedOverlapAttack.outgoingMessage.attacker         = this.attacker;
            ExtendedOverlapAttack.outgoingMessage.inflictor        = this.inflictor;
            ExtendedOverlapAttack.outgoingMessage.damage           = this.damage;
            ExtendedOverlapAttack.outgoingMessage.isCrit           = this.isCrit;
            ExtendedOverlapAttack.outgoingMessage.procChainMask    = this.procChainMask;
            ExtendedOverlapAttack.outgoingMessage.procCoefficient  = this.procCoefficient;
            ExtendedOverlapAttack.outgoingMessage.damageColorIndex = this.damageColorIndex;
            ExtendedOverlapAttack.outgoingMessage.damageType       = this.damageType;
            ExtendedOverlapAttack.outgoingMessage.forceVector      = this.forceVector;
            ExtendedOverlapAttack.outgoingMessage.pushAwayForce    = this.pushAwayForce;
            ExtendedOverlapAttack.outgoingMessage.upwardsForce     = this.upwardsForce;

            Util.CopyList <ExtendedOverlapAttack.OverlapInfo>(hitList, ExtendedOverlapAttack.outgoingMessage.overlapInfoList);
            GameNetworkManager.singleton.client.connection.SendByChannel(7595, ExtendedOverlapAttack.outgoingMessage, QosChannelIndex.defaultReliable.intVal);
        }