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;
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: } }