Exemplo n.º 1
0
 public static bool ApplyTerrainFilters(
     this Transform transform,
     TerrainFilter[] filters,
     Vector3 pos,
     Quaternion rot,
     Vector3 scale,
     SpawnFilter globalFilter = null)
 {
     if (filters.Length == 0)
     {
         return(true);
     }
     for (int index = 0; index < filters.Length; ++index)
     {
         TerrainFilter filter    = filters[index];
         Vector3       vector3_1 = Vector3.Scale(filter.worldPosition, scale);
         Vector3       vector3_2 = Quaternion.op_Multiply(rot, vector3_1);
         Vector3       vector3_3 = Vector3.op_Addition(pos, vector3_2);
         if (TerrainMeta.OutOfBounds(vector3_3) || globalFilter != null && (double)globalFilter.GetFactor(vector3_3) == 0.0 || !filter.Check(vector3_3))
         {
             return(false);
         }
     }
     return(true);
 }
 public static bool ApplyTerrainChecks(this Transform transform, TerrainCheck[] anchors, Vector3 pos, Quaternion rot, Vector3 scale, SpawnFilter filter = null)
 {
     if (anchors.Length == 0)
     {
         return(true);
     }
     for (int i = 0; i < (int)anchors.Length; i++)
     {
         TerrainCheck terrainCheck = anchors[i];
         Vector3      vector3      = Vector3.Scale(terrainCheck.worldPosition, scale);
         if (terrainCheck.Rotate)
         {
             vector3 = rot * vector3;
         }
         Vector3 vector31 = pos + vector3;
         if (TerrainMeta.OutOfBounds(vector31))
         {
             return(false);
         }
         if (filter != null && filter.GetFactor(vector31) == 0f)
         {
             return(false);
         }
         if (!terrainCheck.Check(vector31))
         {
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 3
0
 public static bool ApplyTerrainChecks(
     this Transform transform,
     TerrainCheck[] anchors,
     Vector3 pos,
     Quaternion rot,
     Vector3 scale,
     SpawnFilter filter = null)
 {
     if (anchors.Length == 0)
     {
         return(true);
     }
     for (int index = 0; index < anchors.Length; ++index)
     {
         TerrainCheck anchor    = anchors[index];
         Vector3      vector3_1 = Vector3.Scale(anchor.worldPosition, scale);
         if (anchor.Rotate)
         {
             vector3_1 = Quaternion.op_Multiply(rot, vector3_1);
         }
         Vector3 vector3_2 = Vector3.op_Addition(pos, vector3_1);
         if (TerrainMeta.OutOfBounds(vector3_2) || filter != null && (double)filter.GetFactor(vector3_2) == 0.0 || !anchor.Check(vector3_2))
         {
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 4
0
 public static bool ApplyTerrainFilters(this Transform transform, TerrainFilter[] filters, Vector3 pos, Quaternion rot, Vector3 scale, SpawnFilter globalFilter = null)
 {
     if (filters.Length == 0)
     {
         return(true);
     }
     for (int i = 0; i < (int)filters.Length; i++)
     {
         TerrainFilter terrainFilter = filters[i];
         Vector3       vector3       = Vector3.Scale(terrainFilter.worldPosition, scale);
         vector3 = rot * vector3;
         Vector3 vector31 = pos + vector3;
         if (TerrainMeta.OutOfBounds(vector31))
         {
             return(false);
         }
         if (globalFilter != null && globalFilter.GetFactor(vector31) == 0f)
         {
             return(false);
         }
         if (!terrainFilter.Check(vector31))
         {
             return(false);
         }
     }
     return(true);
 }
Exemplo n.º 5
0
    public static bool ApplyTerrainAnchors(this Transform transform, TerrainAnchor[] anchors, ref Vector3 pos, Quaternion rot, Vector3 scale, TerrainAnchorMode mode, SpawnFilter filter = null)
    {
        float single;
        float single1;
        float single2;

        if (anchors.Length == 0)
        {
            return(true);
        }
        float single3 = 0f;
        float single4 = Single.MinValue;
        float single5 = Single.MaxValue;

        for (int i = 0; i < (int)anchors.Length; i++)
        {
            TerrainAnchor terrainAnchor = anchors[i];
            Vector3       vector3       = Vector3.Scale(terrainAnchor.worldPosition, scale);
            vector3 = rot * vector3;
            Vector3 vector31 = pos + vector3;
            if (TerrainMeta.OutOfBounds(vector31))
            {
                return(false);
            }
            if (filter != null && filter.GetFactor(vector31) == 0f)
            {
                return(false);
            }
            terrainAnchor.Apply(out single, out single1, out single2, vector31);
            single3 = single3 + (single - vector3.y);
            single4 = Mathf.Max(single4, single1 - vector3.y);
            single5 = Mathf.Min(single5, single2 - vector3.y);
            if (single5 < single4)
            {
                return(false);
            }
        }
        if (mode != TerrainAnchorMode.MinimizeError)
        {
            pos.y = Mathf.Clamp(pos.y, single4, single5);
        }
        else
        {
            pos.y = Mathf.Clamp(single3 / (float)((int)anchors.Length), single4, single5);
        }
        return(true);
    }
Exemplo n.º 6
0
 public static bool IsInTerrain(Vector3 vPoint)
 {
     if (TerrainMeta.OutOfBounds(vPoint))
     {
         return(false);
     }
     if (!Object.op_Implicit((Object)TerrainMeta.Collision) || !TerrainMeta.Collision.GetIgnore(vPoint, 0.01f))
     {
         foreach (Terrain activeTerrain in Terrain.get_activeTerrains())
         {
             if ((double)activeTerrain.SampleHeight(vPoint) + ((Component)activeTerrain).get_transform().get_position().y > vPoint.y)
             {
                 return(true);
             }
         }
     }
     return(Physics.Raycast(new Ray(Vector3.op_Addition(vPoint, Vector3.op_Multiply(Vector3.get_up(), 3f)), Vector3.get_down()), 3f, 65536));
 }
Exemplo n.º 7
0
    public static bool ApplyTerrainAnchors(
        this Transform transform,
        TerrainAnchor[] anchors,
        ref Vector3 pos,
        Quaternion rot,
        Vector3 scale,
        TerrainAnchorMode mode,
        SpawnFilter filter = null)
    {
        if (anchors.Length == 0)
        {
            return(true);
        }
        float num1 = 0.0f;
        float num2 = float.MinValue;
        float num3 = float.MaxValue;

        for (int index = 0; index < anchors.Length; ++index)
        {
            TerrainAnchor anchor    = anchors[index];
            Vector3       vector3_1 = Vector3.Scale(anchor.worldPosition, scale);
            Vector3       vector3_2 = Quaternion.op_Multiply(rot, vector3_1);
            Vector3       vector3_3 = Vector3.op_Addition(pos, vector3_2);
            if (TerrainMeta.OutOfBounds(vector3_3) || filter != null && (double)filter.GetFactor(vector3_3) == 0.0)
            {
                return(false);
            }
            float height;
            float min;
            float max;
            anchor.Apply(out height, out min, out max, vector3_3);
            num1 += height - (float)vector3_2.y;
            num2  = Mathf.Max(num2, min - (float)vector3_2.y);
            num3  = Mathf.Min(num3, max - (float)vector3_2.y);
            if ((double)num3 < (double)num2)
            {
                return(false);
            }
        }
        pos.y = mode != TerrainAnchorMode.MinimizeError ? (__Null)(double)Mathf.Clamp((float)pos.y, num2, num3) : (__Null)(double)Mathf.Clamp(num1 / (float)anchors.Length, num2, num3);
        return(true);
    }
Exemplo n.º 8
0
 public static bool IsInTerrain(Vector3 vPoint)
 {
     if (TerrainMeta.OutOfBounds(vPoint))
     {
         return(false);
     }
     if (!TerrainMeta.Collision || !TerrainMeta.Collision.GetIgnore(vPoint, 0.01f))
     {
         Terrain[] terrainArray = Terrain.activeTerrains;
         for (int i = 0; i < (int)terrainArray.Length; i++)
         {
             Terrain terrain = terrainArray[i];
             if (terrain.SampleHeight(vPoint) + terrain.transform.position.y > vPoint.y)
             {
                 return(true);
             }
         }
     }
     if (Physics.Raycast(new Ray(vPoint + (Vector3.up * 3f), Vector3.down), 3f, 65536))
     {
         return(true);
     }
     return(false);
 }