Пример #1
0
 public void SpawnSide(ref uint seed, PathList.SideObject obj)
 {
     if (string.IsNullOrEmpty(obj.Folder))
     {
         return;
     }
     Prefab[] prefabs = Prefab.Load("assets/bundled/prefabs/autospawn/" + obj.Folder, (GameManager)null, (PrefabAttribute.Library)null, true);
     if (prefabs == null || prefabs.Length == 0)
     {
         Debug.LogError((object)("Empty decor folder: " + obj.Folder));
     }
     else
     {
         PathList.Side    side      = obj.Side;
         SpawnFilter      filter    = obj.Filter;
         float            density   = obj.Density;
         float            distance1 = obj.Distance;
         float            num1      = this.Width * 0.5f + obj.Offset;
         TerrainHeightMap heightMap = TerrainMeta.HeightMap;
         float[]          numArray  = new float[2] {
             -num1, num1
         };
         int            num2      = 0;
         Vector3        vector3_1 = this.Path.GetStartPoint();
         List <Vector3> positions = new List <Vector3>();
         float          num3      = distance1 * 0.25f;
         float          num4      = distance1 * 0.5f;
         double         num5      = (double)this.Path.StartOffset + (double)num4;
         float          num6      = this.Path.Length - this.Path.EndOffset - num4;
         for (float distance2 = (float)num5; (double)distance2 <= (double)num6; distance2 += num3)
         {
             Vector3 vector3_2 = this.Spline ? this.Path.GetPointCubicHermite(distance2) : this.Path.GetPoint(distance2);
             Vector3 vector3_3 = Vector3.op_Subtraction(vector3_2, vector3_1);
             if ((double)((Vector3) ref vector3_3).get_magnitude() >= (double)distance1)
             {
                 Vector3 tangent   = this.Path.GetTangent(distance2);
                 Vector3 vector3_4 = Quaternion.op_Multiply(PathList.rot90, tangent);
                 for (int index1 = 0; index1 < numArray.Length; ++index1)
                 {
                     int index2 = (num2 + index1) % numArray.Length;
                     if ((side != PathList.Side.Left || index2 == 0) && (side != PathList.Side.Right || index2 == 1))
                     {
                         float      num7     = numArray[index2];
                         Vector3    position = vector3_2;
                         ref __Null local1   = ref position.x;
Пример #2
0
    public void SpawnSide(ref uint seed, PathList.SideObject obj)
    {
        if (string.IsNullOrEmpty(obj.Folder))
        {
            return;
        }
        Prefab[] prefabArray = Prefab.Load(string.Concat("assets/bundled/prefabs/autospawn/", obj.Folder), null, null, true);
        if (prefabArray == null || prefabArray.Length == 0)
        {
            Debug.LogError(string.Concat("Empty decor folder: ", obj.Folder));
            return;
        }
        PathList.Side    side      = obj.Side;
        SpawnFilter      filter    = obj.Filter;
        float            density   = obj.Density;
        float            distance  = obj.Distance;
        float            width     = this.Width * 0.5f + obj.Offset;
        TerrainHeightMap heightMap = TerrainMeta.HeightMap;

        float[]        singleArray = new float[] { -width, width };
        int            num         = 0;
        Vector3        startPoint  = this.Path.GetStartPoint();
        List <Vector3> vector3s    = new List <Vector3>();
        float          single      = distance * 0.25f;
        float          single1     = distance * 0.5f;
        float          length      = this.Path.Length - this.Path.EndOffset - single1;

        for (float i = this.Path.StartOffset + single1; i <= length; i += single)
        {
            Vector3 vector3 = (this.Spline ? this.Path.GetPointCubicHermite(i) : this.Path.GetPoint(i));
            if ((vector3 - startPoint).magnitude >= distance)
            {
                Vector3 tangent  = this.Path.GetTangent(i);
                Vector3 vector31 = PathList.rot90 * tangent;
                for (int j = 0; j < (int)singleArray.Length; j++)
                {
                    int length1 = (num + j) % (int)singleArray.Length;
                    if ((side != PathList.Side.Left || length1 == 0) && (side != PathList.Side.Right || length1 == 1))
                    {
                        float     single2       = singleArray[length1];
                        Vector3   height        = vector3;
                        ref float singlePointer = ref height.x;
                        singlePointer = singlePointer + vector31.x * single2;
                        ref float singlePointer1 = ref height.z;
                        singlePointer1 = singlePointer1 + vector31.z * single2;
                        float single3 = TerrainMeta.NormalizeX(height.x);
                        float single4 = TerrainMeta.NormalizeZ(height.z);
                        if (filter.GetFactor(single3, single4) >= SeedRandom.Value(ref seed))
                        {
                            if (density >= SeedRandom.Value(ref seed))
                            {
                                height.y = heightMap.GetHeight(single3, single4);
                                if (obj.Alignment == PathList.Alignment.None)
                                {
                                    if (this.SpawnObject(ref seed, prefabArray, height, Quaternion.identity, filter))
                                    {
                                        goto Label1;
                                    }
                                    goto Label0;
                                }
                                else if (obj.Alignment == PathList.Alignment.Forward)
                                {
                                    if (this.SpawnObject(ref seed, prefabArray, height, Quaternion.LookRotation(tangent * single2), filter))
                                    {
                                        goto Label1;
                                    }
                                    goto Label0;
                                }
                                else if (obj.Alignment != PathList.Alignment.Inward)
                                {
                                    vector3s.Add(height);
                                }
                                else
                                {
                                    if (this.SpawnObject(ref seed, prefabArray, height, Quaternion.LookRotation(-vector31 * single2), filter))
                                    {
                                        goto Label1;
                                    }
                                    goto Label0;
                                }
                            }
Label1:
                            num        = length1;
                            startPoint = vector3;
                            if (side == PathList.Side.Any)
                            {
                                break;
                            }
                        }
                    }
Label0:
                }
            }