Exemplo n.º 1
0
        public static Water FindWater(Vector3 position, float radius, List <Water> allowedWaters, out bool isInsideSubtractiveVolume, out bool isInsideAdditiveVolume)
        {
            isInsideSubtractiveVolume = false;
            isInsideAdditiveVolume    = false;
            int num = Physics.OverlapSphereNonAlloc(position, radius, Water._CollidersBuffer, 1 << WaterProjectSettings.Instance.WaterCollidersLayer, QueryTriggerInteraction.Collide);

            Water._PossibleWaters.Clear();
            Water._ExcludedWaters.Clear();
            for (int i = 0; i < num; i++)
            {
                WaterVolumeBase waterVolume = WaterVolumeBase.GetWaterVolume(Water._CollidersBuffer[i]);
                if (waterVolume != null)
                {
                    if (waterVolume is WaterVolumeAdd)
                    {
                        isInsideAdditiveVolume = true;
                        if (allowedWaters == null || allowedWaters.Contains(waterVolume.Water))
                        {
                            Water._PossibleWaters.Add(waterVolume.Water);
                        }
                    }
                    else
                    {
                        isInsideSubtractiveVolume = true;
                        Water._ExcludedWaters.Add(waterVolume.Water);
                    }
                }
            }
            for (int j = 0; j < Water._PossibleWaters.Count; j++)
            {
                if (!Water._ExcludedWaters.Contains(Water._PossibleWaters[j]))
                {
                    return(Water._PossibleWaters[j]);
                }
            }
            List <Water> boundlessWaters = ApplicationSingleton <WaterSystem> .Instance.BoundlessWaters;
            int          count           = boundlessWaters.Count;

            for (int k = 0; k < count; k++)
            {
                Water water = boundlessWaters[k];
                if ((allowedWaters == null || allowedWaters.Contains(water)) && water.Volume.IsPointInsideMainVolume(position, radius) && !Water._ExcludedWaters.Contains(water))
                {
                    return(water);
                }
            }
            return(null);
        }
Exemplo n.º 2
0
 public void OnTriggerExit(Collider other)
 {
     if (this._CurrentWater == null)
     {
         WaterVolumeBase waterVolume = WaterVolumeBase.GetWaterVolume <WaterVolumeSubtract>(other);
         if (waterVolume != null && waterVolume.EnablePhysics)
         {
             this.ScanWaters();
         }
     }
     else
     {
         WaterVolumeBase waterVolume2 = WaterVolumeBase.GetWaterVolume <WaterVolumeAdd>(other);
         if (waterVolume2 != null && waterVolume2.Water == this._CurrentWater && waterVolume2.EnablePhysics)
         {
             this.LeaveCurrentWater();
         }
     }
 }
Exemplo n.º 3
0
 public static WaterVolumeBase GetWaterVolume <T>(Collider collider) where T : WaterVolumeBase
 {
     return(WaterVolumeBase.GetWaterVolume(collider) as T);
 }