コード例 #1
0
 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();
     }
 }
コード例 #2
0
    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;
    }
コード例 #3
0
ファイル: BuildingHealth.cs プロジェクト: DevZhav/The-Forest
        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();
            }
        }