Пример #1
0
 protected virtual Transform SpawnEdge()
 {
     Transform transform = new GameObject("WallChunk").transform;
     transform.transform.position = this._p1;
     Vector3 b = new Vector3(0f, this._logWidth * 0.95f, 0f);
     Vector3 vector = this._p2 - this._p1;
     Quaternion rotation = Quaternion.LookRotation(vector);
     Vector3 vector2 = this._p1;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     Vector3 localScale = new Vector3(1f, 1f, vector.magnitude / this._logLength);
     Vector3 localScale2 = new Vector3(1f, 1f, 0.31f + (localScale.z - 1f) / 2f);
     float d = 1f - localScale2.z / localScale.z;
     for (int i = 0; i < 5; i++)
     {
         Transform transform2 = this.NewLog(vector2, rotation);
         transform2.parent = transform;
         WallChunkArchitect.Additions addition = this._addition;
         switch (addition + 1)
         {
         case WallChunkArchitect.Additions.Window:
             transform2.localScale = localScale;
             break;
         case WallChunkArchitect.Additions.Door1:
             if (i == 2 || i == 3)
             {
                 transform2.localScale = localScale2;
                 Transform transform3 = this.NewLog(vector2 + vector * d, rotation);
                 transform3.parent = transform2;
                 transform3.localScale = Vector3.one;
             }
             else
             {
                 transform2.localScale = localScale;
             }
             break;
         case WallChunkArchitect.Additions.Door2:
         case WallChunkArchitect.Additions.LockedDoor1:
         case WallChunkArchitect.Additions.LockedDoor2:
         case (WallChunkArchitect.Additions)5:
             if (i < 4)
             {
                 transform2.localScale = localScale2;
                 Transform transform4 = this.NewLog(vector2 + vector * d, rotation);
                 transform4.parent = transform2;
                 transform4.localScale = Vector3.one;
             }
             else
             {
                 transform2.localScale = localScale;
             }
             break;
         }
         vector2 += b;
     }
     return transform;
 }
 protected override Transform SpawnEdge()
 {
     Transform transform = new GameObject("FenceChunk").transform;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     Vector3 vector = this._p2 - this._p1;
     Vector3 normalized = Vector3.Scale(vector, new Vector3(1f, 0f, 1f)).normalized;
     float y = Mathf.Tan(Vector3.Angle(vector, normalized) * 0.0174532924f) * this._logWidth * (float)this._spread;
     Quaternion rotation = Quaternion.LookRotation(Vector3.forward);
     Quaternion rhs = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
     Quaternion rotation2 = Quaternion.LookRotation(transform.forward) * rhs;
     bool flag = this._p1.y < this._p2.y;
     float num = Vector3.Distance(this._p1, this._p2);
     int num2 = Mathf.RoundToInt(num / (this._logWidth * (float)this._spread));
     if (num2 > 1)
     {
         num2--;
     }
     Vector3 vector2 = normalized * (num / (float)num2);
     vector2.y = y;
     if (!flag)
     {
         vector2.y *= -1f;
     }
     Vector3 vector3 = this._p1;
     vector3 += vector2 / 2f;
     for (int i = 0; i < num2; i++)
     {
         Transform transform2 = base.NewLog(vector3, rotation);
         transform2.localScale = Vector3.one;
         transform2.parent = transform;
         vector3 += vector2;
     }
     Vector3 vector4 = new Vector3(0f, this._logLength * 0.45f, this._logWidth / 2f);
     Vector3 vector5 = new Vector3(0f, this._logLength * 0.8f, this._logWidth / 2f);
     vector4 += vector2 / 2f;
     vector5 += vector2 / 2f;
     Vector3 localScale = new Vector3(1f, num * 0.335f, 1f);
     Transform transform3 = base.NewLog(this._p1 + vector4, rotation2);
     transform3.parent = transform;
     transform3.localScale = localScale;
     transform3 = base.NewLog(this._p1 + vector5, rotation2);
     transform3.parent = transform;
     transform3.localScale = localScale;
     return transform;
 }
 protected override Transform SpawnEdge()
 {
     Transform transform = new GameObject("FenceChunk").transform;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     Vector3 vector = this._p1;
     Vector3 vector2 = this._p2 - this._p1;
     Vector3 normalized = Vector3.Scale(vector2, new Vector3(1f, 0f, 1f)).normalized;
     float y = Mathf.Tan(Vector3.Angle(vector2, normalized) * 0.0174532924f) * this._offset;
     Quaternion rotation = Quaternion.LookRotation(-vector2);
     bool flag = this._p1.y < this._p2.y;
     float num = Vector3.Distance(this._p1, this._p2);
     int i = Mathf.RoundToInt(num / this._offset);
     if (i < 1)
     {
         i = 1;
     }
     Vector3 a = normalized * this._offset;
     a.y = y;
     if (!flag)
     {
         a.y *= -1f;
     }
     vector.y -= 0.15f;
     while (i > 0)
     {
         int num2 = Mathf.Min(i, 5);
         i -= num2;
         Transform transform2;
         if (!this._wasBuilt)
         {
             if (!this._wallRoot)
             {
                 transform2 = (Transform)UnityEngine.Object.Instantiate(Prefabs.Instance.RockFenceChunksGhostPrefabs[num2 - 1], vector, rotation);
             }
             else
             {
                 transform2 = (Transform)UnityEngine.Object.Instantiate(Prefabs.Instance.RockFenceChunksGhostFillPrefabs[num2 - 1], vector, rotation);
             }
         }
         else
         {
             transform2 = (Transform)UnityEngine.Object.Instantiate(Prefabs.Instance.RockFenceChunksBuiltPrefabs[num2 - 1], vector, rotation);
         }
         transform2.parent = transform;
         vector += a * (float)num2;
     }
     return transform;
 }
Пример #4
0
 protected override Transform SpawnEdge(WallArchitect.Edge edge)
 {
     Transform transform = new GameObject("StickFenceEdge").transform;
     transform.transform.position = edge._p1;
     transform.LookAt(edge._p2);
     Quaternion rotation = Quaternion.LookRotation(Vector3.forward);
     Quaternion rhs = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
     for (int i = 0; i < edge._segments.Length; i++)
     {
         WallArchitect.HorizontalSegment horizontalSegment = edge._segments[i];
         Vector3 vector = horizontalSegment._p1;
         Vector3 vector2 = horizontalSegment._p2 - horizontalSegment._p1;
         Vector3 normalized = Vector3.Scale(vector2, new Vector3(1f, 0f, 1f)).normalized;
         float y = Mathf.Tan(Vector3.Angle(vector2, normalized) * 0.0174532924f) * this._logWidth * (float)this._spread;
         Transform transform2 = new GameObject("S" + i).transform;
         transform2.parent = transform;
         transform2.position = horizontalSegment._p1;
         transform2.LookAt(horizontalSegment._p2);
         horizontalSegment._root = transform2;
         bool flag = horizontalSegment._p1.y < horizontalSegment._p2.y;
         float num = Vector3.Distance(horizontalSegment._p1, horizontalSegment._p2);
         int num2 = Mathf.RoundToInt(num / (this._logWidth * (float)this._spread));
         if (num2 > 1)
         {
             num2--;
         }
         else
         {
             num2 = 1;
         }
         Vector3 vector3 = normalized * (num / (float)num2);
         vector3.y = y;
         if (!flag)
         {
             vector3.y *= -1f;
         }
         vector += vector3 / 2f;
         for (int j = 0; j < num2; j++)
         {
             Transform transform3 = base.NewLog(vector, rotation);
             transform3.localScale = Vector3.one;
             transform3.parent = transform2;
             this._newPool.Enqueue(transform3);
             vector += vector3;
         }
         Vector3 vector4 = new Vector3(0f, this._logLength * 0.45f, this._logWidth / 2f);
         Vector3 vector5 = new Vector3(0f, this._logLength * 0.8f, this._logWidth / 2f);
         vector4 += vector3 / 2f;
         vector5 += vector3 / 2f;
         Vector3 localScale = new Vector3(1f, num * 0.335f, 1f);
         Quaternion rotation2 = Quaternion.LookRotation(transform2.forward) * rhs;
         Debug.DrawRay(horizontalSegment._p1 + vector4, -transform2.up, Color.red);
         Transform transform4 = base.NewLog(horizontalSegment._p1 + vector4, rotation2);
         transform4.parent = transform2;
         transform4.localScale = localScale;
         this._newPool.Enqueue(transform4);
         transform4 = base.NewLog(horizontalSegment._p1 + vector5, rotation2);
         transform4.parent = transform2;
         transform4.localScale = localScale;
         this._newPool.Enqueue(transform4);
     }
     return transform;
 }
 protected override Transform SpawnEdge()
 {
     Transform transform = new GameObject("FenceChunk").transform;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     Quaternion rhs = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
     Vector3 position = this._p1;
     Vector3 vector = Vector3.Lerp(this._p1, this._p2, 0.5f);
     Vector3 vector2 = new Vector3(0f, this._logLength, 0f);
     Vector3 vector3 = this._p2 - this._p1;
     Vector3 normalized = Vector3.Scale(vector3, new Vector3(1f, 0f, 1f)).normalized;
     float y = Mathf.Tan(Vector3.Angle(vector3, normalized) * 0.0174532924f) * this._logWidth * (float)this._spread;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     bool flag = this._p1.y < this._p2.y;
     float num = Vector3.Distance(this._p1, this._p2);
     int num2 = 4;
     Vector3 vector4 = normalized * (num / (float)num2);
     vector4.y = y;
     if (!flag)
     {
         vector4.y *= -1f;
     }
     for (int i = 0; i < num2; i++)
     {
         Transform transform2;
         switch (i)
         {
         case 0:
             transform2 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(this._p1, this._p2, 0.1f) + vector2 - this._p1) * rhs);
             Debug.DrawLine(Vector3.Lerp(this._p1, this._p2, 0.1f) + vector2, this._p1, Color.red);
             break;
         case 1:
             position = vector;
             transform2 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(this._p1, this._p2, 0.35f) + vector2 - vector) * rhs);
             Debug.DrawLine(Vector3.Lerp(this._p1, this._p2, 0.35f) + vector2, vector, Color.blue);
             break;
         case 2:
             position = vector;
             transform2 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(this._p1, this._p2, 0.7f) + vector2 - vector) * rhs);
             Debug.DrawLine(Vector3.Lerp(this._p1, this._p2, 0.7f) + vector2, vector, Color.green);
             break;
         default:
             position = this._p2;
             transform2 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(this._p1, this._p2, 0.9f) + vector2 - this._p2) * rhs);
             Debug.DrawLine(Vector3.Lerp(this._p1, this._p2, 0.9f) + vector2, this._p2, Color.yellow);
             break;
         }
         transform2.name = "v" + i;
         transform2.parent = transform;
     }
     Vector3 vector5 = new Vector3(0f, this._logLength * 0.4f, this._logWidth / 2f);
     Vector3 b = vector5 + (this._p2 - this._p1) / 2f;
     Quaternion rotation = Quaternion.LookRotation(vector + vector2 * 0.6f - (this._p1 + vector5)) * rhs;
     Transform transform3 = base.NewLog(this._p1 + vector5, rotation);
     transform3.name = "h1";
     transform3.parent = transform;
     transform3 = base.NewLog(this._p1 + b, rotation);
     transform3.name = "h2";
     transform3.parent = transform;
     Quaternion rotation2 = Quaternion.LookRotation(this._p1 + vector2 * 0.8f - vector) * rhs;
     Transform transform4 = base.NewLog(vector, rotation2);
     transform4.name = "d1";
     transform4.parent = transform;
     transform4 = base.NewLog(this._p2, rotation2);
     transform4.name = "d2";
     transform4.parent = transform;
     return transform;
 }
Пример #6
0
 public void CreateStructure(bool isRepair = false, bool addColliders = true)
 {
     if (this._wasBuilt && isRepair)
     {
         if (this._bridgeRoot)
         {
             UnityEngine.Object.Destroy(this._bridgeRoot.gameObject);
         }
         this._bridgeRoot = null;
         base.StartCoroutine(this.DelayedAwake(true));
     }
     GameObject gameObject = (!this._bridgeRoot) ? null : this._bridgeRoot.gameObject;
     this._bridgeRoot = this.CreateBridge(this._anchor1.transform.position, this._anchor2.transform.position);
     this._bridgeRoot.name = "BridgeRoot" + ((!addColliders) ? "Ghost" : "Built");
     this._bridgeRoot.parent = base.transform;
     if (gameObject)
     {
         UnityEngine.Object.Destroy(gameObject);
     }
     if (addColliders)
     {
         base.transform.position = this._anchor1.transform.position;
         this._bridgeRoot.parent = base.transform;
         Vector3 vector = this._bridgeRoot.GetChild(0).position;
         int num = Mathf.CeilToInt(Vector3.Distance(this._anchor1.transform.position, this._anchor2.transform.position) / this._maxColliderLength);
         int num2 = Mathf.CeilToInt((float)this._bridgeRoot.childCount / (float)num);
         for (int i = 1; i <= num; i++)
         {
             int num3 = num2 * i;
             if (num3 >= this._bridgeRoot.childCount)
             {
                 num3 = this._bridgeRoot.childCount - 1;
             }
             Transform child = this._bridgeRoot.GetChild(num3);
             Vector3 position = child.position;
             Transform transform = new GameObject("Floor" + i).transform;
             transform.parent = base.transform;
             transform.position = vector;
             transform.LookAt(position);
             BoxCollider boxCollider = transform.gameObject.AddComponent<BoxCollider>();
             boxCollider.center = transform.InverseTransformPoint(Vector3.Lerp(vector, position, 0.5f));
             boxCollider.size = new Vector3(4.5f, this._logWidth, Vector3.Distance(vector, position));
             transform.tag = "UnderfootWood";
             vector = position;
         }
     }
     if (this._wasBuilt && isRepair)
     {
         this._bridgeRoot.parent = base.transform;
     }
 }
Пример #7
0
 protected override Transform SpawnEdge(WallArchitect.Edge edge)
 {
     Transform transform = new GameObject("StickFenceEdge").transform;
     transform.transform.position = edge._p1;
     transform.LookAt(edge._p2);
     Quaternion quaternion = Quaternion.LookRotation(Vector3.forward);
     Quaternion rhs = Quaternion.FromToRotation(Vector3.up, Vector3.forward);
     for (int i = 0; i < edge._segments.Length; i++)
     {
         WallArchitect.HorizontalSegment horizontalSegment = edge._segments[i];
         Vector3 position = horizontalSegment._p1;
         Vector3 vector = Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.5f);
         Vector3 vector2 = new Vector3(0f, this._logLength, 0f);
         Vector3 vector3 = horizontalSegment._p2 - horizontalSegment._p1;
         Vector3 normalized = Vector3.Scale(vector3, new Vector3(1f, 0f, 1f)).normalized;
         float y = Mathf.Tan(Vector3.Angle(vector3, normalized) * 0.0174532924f) * this._logWidth * (float)this._spread;
         Transform transform2 = new GameObject("S" + i).transform;
         transform2.parent = transform;
         transform2.position = horizontalSegment._p1;
         transform2.LookAt(horizontalSegment._p2);
         horizontalSegment._root = transform2;
         bool flag = horizontalSegment._p1.y < horizontalSegment._p2.y;
         float num = Vector3.Distance(horizontalSegment._p1, horizontalSegment._p2);
         int num2 = 4;
         Vector3 vector4 = normalized * (num / (float)num2);
         vector4.y = y;
         if (!flag)
         {
             vector4.y *= -1f;
         }
         for (int j = 0; j < num2; j++)
         {
             Transform transform3;
             switch (j)
             {
             case 0:
                 transform3 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.1f) + vector2 - horizontalSegment._p1) * rhs);
                 Debug.DrawLine(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.1f) + vector2, horizontalSegment._p1, Color.red);
                 break;
             case 1:
                 position = vector;
                 transform3 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.35f) + vector2 - vector) * rhs);
                 Debug.DrawLine(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.35f) + vector2, vector, Color.blue);
                 break;
             case 2:
                 position = vector;
                 transform3 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.7f) + vector2 - vector) * rhs);
                 Debug.DrawLine(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.7f) + vector2, vector, Color.green);
                 break;
             default:
                 position = horizontalSegment._p2;
                 transform3 = base.NewLog(position, Quaternion.LookRotation(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.9f) + vector2 - horizontalSegment._p2) * rhs);
                 Debug.DrawLine(Vector3.Lerp(horizontalSegment._p1, horizontalSegment._p2, 0.9f) + vector2, horizontalSegment._p2, Color.yellow);
                 break;
             }
             transform3.name = "v" + j;
             transform3.parent = transform2;
             this._newPool.Enqueue(transform3);
         }
         Vector3 vector5 = new Vector3(0f, this._logLength * 0.4f, this._logWidth / 2f);
         Vector3 b = vector5 + (horizontalSegment._p2 - horizontalSegment._p1) / 2f;
         Quaternion rotation = Quaternion.LookRotation(vector + vector2 * 0.6f - (horizontalSegment._p1 + vector5)) * rhs;
         Transform transform4 = base.NewLog(horizontalSegment._p1 + vector5, rotation);
         transform4.name = "h1";
         transform4.parent = transform2;
         this._newPool.Enqueue(transform4);
         transform4 = base.NewLog(horizontalSegment._p1 + b, rotation);
         transform4.name = "h2";
         transform4.parent = transform2;
         this._newPool.Enqueue(transform4);
         Quaternion rotation2 = Quaternion.LookRotation(horizontalSegment._p1 + vector2 * 0.8f - vector) * rhs;
         Transform transform5 = base.NewLog(vector, rotation2);
         transform5.name = "d1";
         transform5.parent = transform2;
         this._newPool.Enqueue(transform5);
         transform5 = base.NewLog(horizontalSegment._p2, rotation2);
         transform5.name = "d2";
         transform5.parent = transform2;
         this._newPool.Enqueue(transform5);
     }
     return transform;
 }
Пример #8
0
 protected virtual Transform SpawnEdge(WallArchitect.Edge edge)
 {
     Transform transform = new GameObject("WallEdge").transform;
     transform.transform.position = edge._p1;
     Vector3 b = new Vector3(0f, this._logWidth * 0.95f, 0f);
     for (int i = 0; i < edge._segments.Length; i++)
     {
         WallArchitect.HorizontalSegment horizontalSegment = edge._segments[i];
         Quaternion rotation = Quaternion.LookRotation(horizontalSegment._axis);
         Vector3 vector = horizontalSegment._p1;
         Transform transform2 = new GameObject("Segment" + i).transform;
         transform2.parent = transform;
         transform2.LookAt(horizontalSegment._axis);
         horizontalSegment._root = transform2;
         transform2.position = horizontalSegment._p1;
         Vector3 localScale = new Vector3(1f, 1f, horizontalSegment._length / this._logLength);
         Vector3 vector2 = new Vector3(1f, 1f, 0.31f + (localScale.z - 1f) / 2f);
         float num = 1f - vector2.z / localScale.z;
         for (int j = 0; j < 5; j++)
         {
             Transform transform3 = this.NewLog(vector, rotation);
             transform3.parent = transform2;
             this._newPool.Enqueue(transform3);
             transform3.localScale = localScale;
             vector += b;
         }
     }
     return transform;
 }
 protected override Transform SpawnEdge()
 {
     Transform transform = new GameObject("WallChunk").transform;
     transform.transform.position = this._p1;
     Vector3 vector = this._p2 - this._p1;
     Vector3 normalized = Vector3.Scale(vector, new Vector3(1f, 0f, 1f)).normalized;
     float y = Mathf.Tan(Vector3.Angle(vector, normalized) * 0.0174532924f) * this._logWidth;
     Quaternion rotation = Quaternion.LookRotation(Vector3.forward);
     float num = Vector3.Distance(this._p1, this._p2);
     int num2 = Mathf.RoundToInt(num / this._logWidth);
     Vector3 b = normalized * num / (float)num2;
     b.y = y;
     if (vector.y < 0f)
     {
         b.y *= -1f;
     }
     Vector3 vector2 = this._p1;
     transform.position = this._p1;
     transform.LookAt(this._p2);
     for (int i = 0; i < num2; i++)
     {
         Transform transform2 = base.NewLog(vector2, rotation);
         transform2.parent = transform;
         vector2 += b;
     }
     return transform;
 }