private void FixedUpdate() { if (this._targetObject) { if (LocalPlayer.Inventory.HasInSlot(Item.EquipmentSlot.RightHand, this._itemId)) { if (Physics.Raycast(LocalPlayer.MainCamTr.position + Vector3.up, LocalPlayer.MainCamTr.forward, out this._hit, 10f, this._layerMask.value)) { DynamicBuilding componentInParent = this._hit.collider.GetComponentInParent <DynamicBuilding>(); if (!componentInParent || componentInParent._allowParenting) { if (!this._placeIconSheen.activeSelf) { this._placeIconSheen.transform.parent = null; this._placeIconSheen.SetActive(true); } this._placeIconSheen.transform.position = this._hit.point + Vector3.down * 0.5f; if (TheForest.Utils.Input.GetButtonDown("Craft") && LocalPlayer.Inventory.ShuffleRemoveRightHandItem()) { int num = this._diiv.PopLast(); Vector3 normal = this._hit.normal; Vector3 point = this._hit.point; if (!BoltNetwork.isRunning) { Transform transform = UnityEngine.Object.Instantiate <Transform>(Prefabs.Instance.TimmyDrawingsPrefab[num], point, Quaternion.LookRotation(normal)); transform.parent = this._targetObjectRoot; } else { PlaceConstruction placeConstruction = PlaceConstruction.Create(GlobalTargets.OnlyServer); placeConstruction.Parent = this._targetObjectRoot.GetComponent <BoltEntity>(); placeConstruction.PrefabId = Prefabs.Instance.TimmyDrawingsPrefab[num].GetComponent <BoltEntity>().prefabId; placeConstruction.Position = point; placeConstruction.Rotation = Quaternion.LookRotation(normal); placeConstruction.Send(); } this._placeIconSheen.SetActive(false); this._placeIconSheen.transform.parent = base.transform; this.Deactivate(); LocalPlayer.Grabber.RefreshCollider(); } } } } else if (this._placeIconSheen.activeSelf) { this._placeIconSheen.transform.parent = base.transform; this._placeIconSheen.SetActive(false); } } else { this.Deactivate(); } }
private IEnumerator DelayedAttached() { yield return(null); if (BoltNetwork.isServer) { if (base.transform.parent) { BoltEntity parentEntity = base.transform.parent.GetComponentInParent <BoltEntity>(); while (parentEntity && !base.state.ParentHack) { yield return(null); if (parentEntity.isAttached) { base.state.ParentHack = parentEntity; } } } } else { for (int i = 0; i < 10; i++) { if (base.state.ParentHack && base.state.ParentHack.transform) { DynamicBuilding component = base.state.ParentHack.transform.GetComponent <DynamicBuilding>(); if (component && component._parentOverride) { base.transform.parent = component._parentOverride; } else { base.transform.parent = base.state.ParentHack.transform; } break; } yield return(null); } } this._ready = true; yield break; }
public void RespawnBuilding() { if (BoltNetwork.isServer) { base.state.repairTrigger = false; } else if (BoltNetwork.isClient) { this.HpActual = this._maxHP; LocalPlayer.Create.Grabber.Reset(); } DynamicBuilding dynamicBuilding = (!base.transform.parent) ? null : base.transform.parent.GetComponentInParent <DynamicBuilding>(); if (dynamicBuilding == null) { dynamicBuilding = base.transform.GetComponent <DynamicBuilding>(); } if (dynamicBuilding) { dynamicBuilding.LockPhysics(); } GameObject gameObject2; if (this._type != BuildingTypes.None) { GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(Prefabs.Instance.Constructions._blueprints.Find((BuildingBlueprint bp) => bp._type == this._type)._builtPrefab); gameObject.transform.position = base.transform.position; gameObject.transform.rotation = base.transform.rotation; if (dynamicBuilding && this._repairMode == BuildingHealth.RepairModes.RenderersOnly) { Collider[] componentsInChildren = gameObject.GetComponentsInChildren <Collider>(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].enabled = false; } } if (this._repairMode == BuildingHealth.RepairModes.RenderersOnly) { base.SendMessage("RespawningRenderersFrom", gameObject, SendMessageOptions.DontRequireReceiver); Transform transform = (!this._renderersRoot) ? base.transform : this._renderersRoot.transform; LOD_GroupToggle lod_GroupToggle = (!transform.parent) ? null : transform.parent.GetComponent <LOD_GroupToggle>(); for (int j = transform.childCount - 1; j >= 0; j--) { Transform child = transform.GetChild(j); if ((!child.GetComponent <StoreInformation>() || child.GetComponent <ForceRepairRespawn>()) && !child.GetComponent <SkipRepairRespawn>() && !child.name.Contains("Anchor")) { UnityEngine.Object.Destroy(child.gameObject); } } Transform transform2 = (!this._renderersRoot) ? gameObject.transform : gameObject.GetComponent <BuildingHealth>()._renderersRoot.transform; for (int k = transform2.childCount - 1; k >= 0; k--) { Transform child2 = transform2.GetChild(k); if ((!child2.GetComponent <StoreInformation>() || child2.GetComponent <ForceRepairRespawn>()) && !child2.GetComponent <SkipRepairRespawn>() && !child2.name.Contains("Anchor")) { child2.parent = transform; if (lod_GroupToggle) { lod_GroupToggle._levels[0].Renderers[k] = child2.GetComponentInChildren <Renderer>(); } } } if (lod_GroupToggle) { lod_GroupToggle.RefreshVisibility(true); } UnityEngine.Object.Destroy(gameObject); gameObject2 = base.gameObject; } else { TreeStructure component = base.GetComponent <TreeStructure>(); if (component) { TreeStructure component2 = gameObject.GetComponent <TreeStructure>(); component2.TreeId = component.TreeId; } UnityEngine.Object.Destroy(base.gameObject); gameObject2 = gameObject; if (BoltNetwork.isServer) { BoltNetwork.Attach(gameObject); } } if (this._type == BuildingTypes.Shelter) { EventRegistry.Achievements.Publish(TfEvent.Achievements.RepairedShelter, null); } } else { gameObject2 = base.gameObject; } gameObject2.SendMessage("ResetHP", SendMessageOptions.DontRequireReceiver); gameObject2.SendMessage("CreateStructure", true, SendMessageOptions.DontRequireReceiver); trapTrigger componentInChildren = base.GetComponentInChildren <trapTrigger>(); if (componentInChildren && componentInChildren.GetComponentInParent <PrefabIdentifier>().gameObject == base.gameObject) { componentInChildren.CopyTrapStatusTo(gameObject2.GetComponentInChildren <trapTrigger>()); } if (dynamicBuilding) { raftOnLand component3 = base.transform.GetComponent <raftOnLand>(); if (component3) { dynamicBuilding.UnlockPhysics(); component3.StartCoroutine(component3.fixBounceOnSpawn()); } else { dynamicBuilding.Invoke("UnlockPhysics", 0.1f); } } if (LocalPlayer.Sfx) { LocalPlayer.Sfx.PlayTwinkle(); } }