示例#1
0
        private IEnumerator OnPlaced()
        {
            if (!this._wasPlaced && !this._wasBuilt && !BoltNetwork.isClient)
            {
                base.transform.position = this._multiPointsPositions.First <Vector3>();
                base.transform.LookAt(this._multiPointsPositions.Last <Vector3>());
                this._multiPointsPositions = (from p in this._multiPointsPositions
                                              select this.$this.transform.InverseTransformPoint(p)).ToList <Vector3>();
            }
            this.WasPlaced = true;
            base.enabled   = false;
            this._craftStructure.GetComponent <Collider>().enabled = false;
            Scene.HudGui.RoofConstructionIcons.Shutdown();
            Scene.HudGui.RotateIcon.SetActive(false);
            yield return(null);

            if (this._craftStructure)
            {
                UnityEngine.Object.Destroy(base.GetComponent <Rigidbody>());
                UnityEngine.Object.Destroy(base.GetComponent <Collider>());
                Transform newStairs = this.SpawnStructure();
                if (this._stairsRoot)
                {
                    UnityEngine.Object.Destroy(this._stairsRoot.gameObject);
                }
                this._stairsRoot = newStairs;
                Transform ghostRoot = this._stairsRoot;
                Transform transform = ghostRoot;
                transform.name += "Ghost";
                this._logPool   = null;
                this._newPool   = null;
                Craft_Structure.BuildIngredients ri = this._craftStructure._requiredIngredients.FirstOrDefault((Craft_Structure.BuildIngredients i) => i._itemID == this.$this._logItemId);
                int amount = 0;
                List <GameObject> stairsLogs = new List <GameObject>();
                List <GameObject> stiltsLogs = new List <GameObject>();
                Material          stiltMat   = Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial;
                IEnumerator       enumerator = this._stairsRoot.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        object      obj         = enumerator.Current;
                        Transform   transform2  = (Transform)obj;
                        IEnumerator enumerator2 = transform2.GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                object    obj2       = enumerator2.Current;
                                Transform transform3 = (Transform)obj2;
                                amount++;
                                IEnumerator enumerator3 = transform3.GetEnumerator();
                                try
                                {
                                    while (enumerator3.MoveNext())
                                    {
                                        object    obj3                = enumerator3.Current;
                                        Transform transform4          = (Transform)obj3;
                                        Renderer  componentInChildren = transform4.GetComponentInChildren <Renderer>();
                                        if (componentInChildren.sharedMaterial == stiltMat)
                                        {
                                            stiltsLogs.Add(componentInChildren.gameObject);
                                        }
                                        else
                                        {
                                            stairsLogs.Add(componentInChildren.gameObject);
                                        }
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable;
                                    if ((disposable = (enumerator3 as IDisposable)) != null)
                                    {
                                        disposable.Dispose();
                                    }
                                }
                            }
                        }
                        finally
                        {
                            IDisposable disposable2;
                            if ((disposable2 = (enumerator2 as IDisposable)) != null)
                            {
                                disposable2.Dispose();
                            }
                        }
                    }
                }
                finally
                {
                    IDisposable disposable3;
                    if ((disposable3 = (enumerator as IDisposable)) != null)
                    {
                        disposable3.Dispose();
                    }
                }
                ri.AddRuntimeObjects(stiltsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ri.AddRuntimeObjects(stairsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStairsBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ri._amount += amount;
                ghostRoot.transform.parent        = null;
                this._stairsRoot.transform.parent = base.transform;
                ghostRoot.transform.parent        = base.transform;
                BoxCollider bc;
                if (this._craftStructure.GetComponent <Collider>() is BoxCollider)
                {
                    bc = (BoxCollider)this._craftStructure.GetComponent <Collider>();
                }
                else
                {
                    bc           = this._craftStructure.gameObject.AddComponent <BoxCollider>();
                    bc.isTrigger = true;
                }
                Bounds b = default(Bounds);
                foreach (Vector3 position in this._multiPointsPositions)
                {
                    b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(base.transform.TransformPoint(position)));
                }
                b.Encapsulate(this._craftStructure.transform.InverseTransformPoint(this.GetPointFloorPosition(this._craftStructure.transform.position)));
                Vector3 localSize = b.size;
                localSize.x = Mathf.Max(localSize.x, 6f);
                localSize.y = Mathf.Max(localSize.y, 3f);
                localSize.z = Mathf.Max(localSize.z, 3f);
                bc.size     = localSize;
                bc.center   = b.center;
                bc.enabled  = true;
                yield return(null);

                this._craftStructure.manualLoading = true;
                while (LevelSerializer.IsDeserializing && !this._craftStructure.WasLoaded)
                {
                    yield return(null);
                }
                this._craftStructure.Initialize();
                this._craftStructure.gameObject.SetActive(true);
                yield return(null);

                bc.enabled = false;
                bc.enabled = true;
                if (!this._craftStructure.gameObject.GetComponent <getStructureStrength>())
                {
                    getStructureStrength getStructureStrength = this._craftStructure.gameObject.AddComponent <getStructureStrength>();
                    getStructureStrength._strength = getStructureStrength.strength.normal;
                    getStructureStrength._type     = getStructureStrength.structureType.floor;
                }
            }
            yield break;
        }
示例#2
0
        private IEnumerator OnPlaced()
        {
            this._wasPlaced = true;
            base.enabled    = false;
            this._craftStructure.GetComponent <Collider>().enabled = false;
            Scene.HudGui.RoofConstructionIcons.Shutdown();
            yield return(null);

            if (this._craftStructure)
            {
                UnityEngine.Object.Destroy(base.GetComponent <Rigidbody>());
                UnityEngine.Object.Destroy(base.GetComponent <Collider>());
                Transform newDock = this.SpawnStructure();
                if (this._dockRoot)
                {
                    UnityEngine.Object.Destroy(this._dockRoot.gameObject);
                }
                this._dockRoot = newDock;
                Transform ghostRoot = this._dockRoot;
                Transform transform = ghostRoot;
                transform.name += "Ghost";
                this._logPool   = null;
                this._newPool   = null;
                Craft_Structure.BuildIngredients ri = this._craftStructure._requiredIngredients.FirstOrDefault((Craft_Structure.BuildIngredients i) => i._itemID == this.$this._logItemId);
                List <GameObject> stairsLogs        = new List <GameObject>();
                List <GameObject> stiltsLogs        = new List <GameObject>();
                Material          stiltMat          = Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial;
                IEnumerator       enumerator        = this._dockRoot.GetEnumerator();
                try
                {
                    while (enumerator.MoveNext())
                    {
                        object      obj         = enumerator.Current;
                        Transform   transform2  = (Transform)obj;
                        IEnumerator enumerator2 = transform2.GetEnumerator();
                        try
                        {
                            while (enumerator2.MoveNext())
                            {
                                object      obj2        = enumerator2.Current;
                                Transform   transform3  = (Transform)obj2;
                                IEnumerator enumerator3 = transform3.GetEnumerator();
                                try
                                {
                                    while (enumerator3.MoveNext())
                                    {
                                        object    obj3                = enumerator3.Current;
                                        Transform transform4          = (Transform)obj3;
                                        Renderer  componentInChildren = transform4.GetComponentInChildren <Renderer>();
                                        if (componentInChildren.sharedMaterial == stiltMat)
                                        {
                                            stiltsLogs.Add(componentInChildren.gameObject);
                                        }
                                        else
                                        {
                                            stairsLogs.Add(componentInChildren.gameObject);
                                        }
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable;
                                    if ((disposable = (enumerator3 as IDisposable)) != null)
                                    {
                                        disposable.Dispose();
                                    }
                                }
                            }
                        }
                        finally
                        {
                            IDisposable disposable2;
                            if ((disposable2 = (enumerator2 as IDisposable)) != null)
                            {
                                disposable2.Dispose();
                            }
                        }
                    }
                }
                finally
                {
                    IDisposable disposable3;
                    if ((disposable3 = (enumerator as IDisposable)) != null)
                    {
                        disposable3.Dispose();
                    }
                }
                ri._amount = stiltsLogs.Count <GameObject>() + stairsLogs.Count <GameObject>() / 2;
                ri.AddRuntimeObjects(stairsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStairsBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ri.AddRuntimeObjects(stiltsLogs.AsEnumerable <GameObject>().Reverse <GameObject>(), Prefabs.Instance.LogStiltStairsGhostBuiltPrefab.GetComponentInChildren <Renderer>().sharedMaterial);
                ghostRoot.transform.parent = null;
                base.transform.position    = this._multiPointsPositions.First <Vector3>();
                base.transform.LookAt(this._multiPointsPositions.Last <Vector3>());
                this._dockRoot.transform.parent = base.transform;
                ghostRoot.transform.parent      = base.transform;
                BoxCollider bc;
                if (this._craftStructure.GetComponent <Collider>() is BoxCollider)
                {
                    bc = (BoxCollider)this._craftStructure.GetComponent <Collider>();
                }
                else
                {
                    bc           = this._craftStructure.gameObject.AddComponent <BoxCollider>();
                    bc.isTrigger = true;
                }
                Bounds b = default(Bounds);
                for (int j = 1; j < this._multiPointsPositions.Count; j++)
                {
                    Vector3 a          = this._multiPointsPositions[j];
                    Vector3 normalized = (a - this._multiPointsPositions[j - 1]).normalized;
                    Vector3 b2         = Vector3.Cross(Vector3.up, normalized) * 3.5f;
                    b.Encapsulate(base.transform.InverseTransformPoint(a + b2));
                    b.Encapsulate(base.transform.InverseTransformPoint(a - b2));
                }
                bc.size    = new Vector3(b.size.x, 6f, b.size.z);
                bc.center  = b.center;
                bc.enabled = true;
                yield return(null);

                this._craftStructure.manualLoading = true;
                while (LevelSerializer.IsDeserializing && !this._craftStructure.WasLoaded)
                {
                    yield return(null);
                }
                this._craftStructure.Initialize();
                this._craftStructure.gameObject.SetActive(true);
                yield return(null);

                bc.enabled = false;
                bc.enabled = true;
            }
            yield break;
        }