public static bool IsVehicleEnterable(this PlayerEntity playerEntity, VehicleEntity vehicle)
        {
            if (vehicle.vehicleBrokenFlag.IsBodyBroken())
            {
                Logger.Debug("body broken");
                return(false);
            }

            if (vehicle.IsCar())
            {
                if (vehicle.IsInWater())
                {
                    Logger.Debug("car in water");
                    return(false);
                }
                if (!playerEntity.playerMove.IsGround)
                {
                    Logger.Debug("do not on ground");
                    return(false);
                }
            }
            else if (vehicle.IsShip())
            {
                if (!SingletonManager.Get <MapConfigManager>().InWater(playerEntity.position.Value) && !playerEntity.playerMove.IsGround)
                {
                    Logger.Debug("do not on ground and do not in water and vehicle is ship");
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        public void SetEnableIk()
        {
            var cmd = GetAvailableCommand();

            cmd.SetPlayerIk(SetEnableIkImpl);
            Logger.Debug("SetEnableIk");
        }
Ejemplo n.º 3
0
 protected override void Run()
 {
     Thread.CurrentThread.Name     = Name;
     Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;
     while (Running)
     {
         try
         {
             Job task = _queue.Dequeue(1);
             if (task == null)
             {
                 continue;
             }
             _logger.Debug("start");
             try
             {
                 SingletonManager.Get <DurationHelp>().ProfileStart(_profile);
                 _action(task);
                 SingletonManager.Get <DurationHelp>().ProfileStart(_profile2);
                 Interlocked.Decrement(ref _count);
             }
             finally
             {
                 SingletonManager.Get <DurationHelp>().ProfileEnd(_profile);
                 SingletonManager.Get <DurationHelp>().ProfileEnd(_profile2);
             }
             _logger.Debug("end");
         }
         catch (Exception e)
         {
             _logger.ErrorFormat("Run Error:{0}", e);
         }
     }
 }
Ejemplo n.º 4
0
        private void DoCastAction()
        {
            if (Time.time - _lastCastTime < SingletonManager.Get <RaycastActionConfigManager>().Interval)
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("action in cd ");
                }
                return;
            }
            _lastCastTime = Time.time;
            if (null == _castData)
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("caset Data is null");
                }
                return;
            }
            if (null != _currentCastLogic)
            {
                _currentCastLogic.Action();
            }
            else
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("current cast logic is null");
                }
            }

            _castData         = null;
            _currentCastLogic = null;
        }
Ejemplo n.º 5
0
 public void CloseSocket(Socket socket)
 {
     if (socket == null || !socket.Connected)
     {
         return;
     }
     try
     {
         if (this.RealTimeSocket != null)
         {
             this.RealTimeSocket.Shutdown(SocketShutdown.Both);
         }
     }
     catch (Exception ex)
     {
         Logger.Debug("Close1:" + ex.Message);
     }
     try
     {
         socket.Close();
     }
     catch (Exception ex2)
     {
         Logger.Debug("Close2:" + ex2.Message);
     }
 }
Ejemplo n.º 6
0
 protected override void Run()
 {
     Thread.CurrentThread.Name     = Name;
     Thread.CurrentThread.Priority = ThreadPriority.AboveNormal;
     while (Running)
     {
         try
         {
             Job task = _queue.Dequeue(1);
             if (task == null)
             {
                 continue;
             }
             try
             {
                 _profile.BeginProfileOnlyEnableProfile();
                 _action(task);
                 // _profile2.BeginProfileOnlyEnableProfile();
             }
             finally
             {
                 _queue.DelRef();
                 _profile.EndProfileOnlyEnableProfile();
                 // _profile2.EndProfileOnlyEnableProfile();
             }
             _logger.Debug("end");
         }
         catch (Exception e)
         {
             _logger.ErrorFormat("Run Error:{0}", e);
         }
     }
 }
Ejemplo n.º 7
0
        private void RideOnVehicle(PlayerEntity playerEntity, VehicleEntity vehicle, int preferedSeat)
        {
            if (!playerEntity.IsVehicleEnterable(vehicle))
            {
                return;
            }

            if (!vehicle.IsRidable())
            {
                vehicle.ResetPose(!SharedConfig.IsOffline && !SharedConfig.IsServer);
                return;
            }

            if (!vehicle.AddPassager(playerEntity, ref preferedSeat))
            {
                Logger.Debug("add passager failed");
                return;
            }

            var rigidBody = vehicle.gameObject.UnityObject.AsGameObject.GetComponent <Rigidbody>();

            playerEntity.controlledVehicle.RideOn(preferedSeat, vehicle.entityKey.Value, rigidBody, _currentTime.CurrentTime);
            playerEntity.AudioController().StopSwimAudio();
            CheckAndAddOwnerId(vehicle, playerEntity);
            SetPositionInterpolateMode(playerEntity);
            playerEntity.SetCharacterStateWithVehicle(_contexts, _vehicleContext);
        }
Ejemplo n.º 8
0
        private HashSet <EPlayerInput> GetPlayerInputs(StateTransitionConfigItem item)
        {
            var set      = new HashSet <EPlayerInput>();
            var itemType = item.GetType();

            for (var e = EPlayerInput.None + 1; e < EPlayerInput.Length; e++)
            {
                try
                {
                    Transition field = (Transition)Enum.Parse(typeof(Transition), e.ToString());
                    /*var field = itemType.GetField(e.ToString());*/
                    if (null != field)
                    {
                        /*var val = field.GetValue(item);*/
                        var val = item.vsTransition[(int)field];
                        if ((bool)val)
                        {
                            set.Add(e);
                        }
                    }
                }
                catch (Exception excep)
                {
                    Logger.Debug("error : " + excep.ToString() + " e : " + e.ToString());
                }
            }
            return(set);
        }
Ejemplo n.º 9
0
 public IActionResult Index()
 {
     LoggerAdapter.Debug("Logs Debug");
     LoggerAdapter.Information("Logs Information");
     LoggerAdapter.Warning("Logs Warning");
     LoggerAdapter.Error("Logs Error");
     LoggerAdapter.Fatal("Logs Fatal");
     return(View());
 }
Ejemplo n.º 10
0
        // comes from DynamicScenesController.cs
        public void SceneLoaded(Scene scene, LoadSceneMode mode)
        {
            foreach (var go in scene.GetRootGameObjects())
            {
                var terrain = go.GetComponent <Terrain>();
                if (terrain != null)
                {
                    Type t = Type.GetType("ArtPlugins.TerrainProxy, Assembly-CSharp");
                    if (t != null)
                    {
                        terrain.drawTreesAndFoliage  = true;
                        terrain.heightmapPixelError  = 20;
                        terrain.collectDetailPatches = true;
                        terrain.detailObjectDistance = 120;
                        terrain.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;

                        terrain.gameObject.AddComponent(t);

                        _logger.Debug("ArtPlugins.TerrainProxy, Assembly-CSharp Founded");
                    }
                    else
                    {
                        _logger.Error("ArtPlugins.TerrainProxy, Assembly-CSharp Not Founded");
                    }

                    terrain.treeDistance = 800;
                }

                var mapConfig = SingletonManager.Get <MapConfigManager>().SceneParameters;

                foreach (var v in go.GetComponentsInChildren <Camera>())
                {
                    if (v != Camera.main)
                    {
                        continue;                  //非主相机不需要GQS_Bind_Camera
                    }
                    Type t = Type.GetType("ArtPlugins.GQS_Bind_Camera, Assembly-CSharp");
                    if (t != null)
                    {
                        v.gameObject.AddComponent(t);
                    }
                    else
                    {
                        _logger.Error("ArtPlugins.GQS_Bind_Camera is null ??? !!!");
                    }

                    v.useOcclusionCulling = mapConfig.OcEnable;
//                    if (v.GetComponent<AudioListener>() == null)
//                    {
//                        v.gameObject.AddComponent<AudioListener>();
//                    }
                }

                InitCameraPostProcessEffect();
            }
        }
Ejemplo n.º 11
0
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            IGameUnit unit = GetPlayer(args);

            if (unit != null)
            {
                PlayerEntity p = ((FreeData)unit).Player;


                int itemId = FreeUtil.ReplaceInt(weaponId, args);

                int index = FreeUtil.ReplaceInt(weaponKey, args);

                EWeaponSlotType st = FreeWeaponUtil.GetSlotType(index);

                Debug.LogFormat("add weapon: " + itemId + "," + index);
                Logger.Debug("add weapon to team " + p.playerInfo.Camp + " player " + p.playerInfo.PlayerName);

                SimpleProto message = new SimpleProto();
                if (index == 0)
                {
                    p.WeaponController().PickUpWeapon(WeaponUtil.CreateScan(itemId));
                    //p.bag.Bag.SetWeaponBullet(30);
                    //p.bag.Bag.SetReservedCount(100);
                }
                else
                {
                    p.WeaponController().ReplaceWeaponToSlot(st, WeaponUtil.CreateScan(itemId));

                    if (p.stateInterface.State.CanDraw() && p.WeaponController().HeldSlotType == EWeaponSlotType.None)
                    {
                        p.WeaponController().TryArmWeapon(st);
                    }

                    //SwitchWeaponAction.WeaponToHand(p, st);
                }

                message.Ins.Add(itemId);
                if (index > 0)
                {
                    message.Ins.Add((int)st);
                }
                else
                {
                    message.Ins.Add(-1);
                }

                message.Ks.Add(2);
                message.Key = FreeMessageConstant.ChangeAvatar;
                FreeMessageSender.SendMessage(p, message);
                //p.network.NetworkChannel.SendReliable((int)EServer2ClientMessage.FreeData, message);
            }
        }
 public virtual void AfterFireCmd(IPlayerWeaponState playerWeapon, IWeaponCmd cmd, int bulletCount)
 {
     if (bulletCount > 0)
     {
         var needActionDeal = CheckNeedActionDeal(playerWeapon.CurrentWeapon, ActionDealEnum.Fire);
         OnAfterFire(playerWeapon, needActionDeal);
     }
     else
     {
         Logger.Debug("bullet count is zero !!");
     }
 }
Ejemplo n.º 13
0
        private bool OutOfRange(PlayerEntity player, Vector3 hitPoint)
        {
            var xzHitPoint = new Vector3(hitPoint.x, player.position.Value.y, hitPoint.z);
            var dis        = Vector3.Distance(xzHitPoint, player.position.Value);
            var outOfrange = dis > _maxDistance;

            if (outOfrange)
            {
                Logger.Debug("OutOfRange");
            }
            return(outOfrange);
        }
Ejemplo n.º 14
0
        private bool HasObstacle(Vector3 colPosition, Vector3 bombPosition, Func <Transform, bool> exclude = null)
        {
            RaycastHit hitInfo;

            if (null == exclude)
            {
                Debug.DrawLine(bombPosition, colPosition, Color.red, 10f);
                if (Physics.Linecast(bombPosition, colPosition, out hitInfo, UnityLayerManager.GetLayerMask(EUnityLayerName.Default)))
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.DebugFormat("has obstacle {0}", hitInfo.transform.name);
                    }
                    return(true);
                }
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug("no obstacle");
                }
                return(false);
            }
            var dir       = colPosition - bombPosition;
            var obstacles = Physics.RaycastAll(bombPosition, dir, dir.magnitude, UnityLayerManager.GetLayerMask(EUnityLayerName.Default));

            foreach (var obstacle in obstacles)
            {
                if (!exclude(obstacle.transform))
                {
                    return(true);
                }
            }
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug("has exculde fun and no obstacle ");
            }
            return(false);
        }
Ejemplo n.º 15
0
        public bool IsApproximatelyEqual(object right)
        {
            bool ret       = true;
            var  rightComp = right as FpAnimStatusComponent;

            if (rightComp != null)
            {
//                for (int i = 0; i < AnimatorLayers.Count; i++)
//                {
//                    var equal = AnimatorLayers[i].IsSimilar(rightComp.AnimatorLayers[i]);
//                    if (!equal)
//                    {
//                        _logger.Debug(AnimatorLayers[i].ToString());
//                        _logger.Debug(rightComp.AnimatorLayers[i].ToString());
//                    }
//
//                    ret = ret && equal;
//                }

                for (int i = 0; i < AnimatorParameters.Count; i++)
                {
                    var equal = AnimatorParameters[i].IsSimilar(rightComp.AnimatorParameters[i]);
                    if (!equal)
                    {
                        _logger.Debug(AnimatorParameters[i].ToString());
                        _logger.Debug(rightComp.AnimatorParameters[i].ToString());
                    }

                    ret = ret && equal;
                }

                ret = ret && CompareUtility.IsApproximatelyEqual(BaseClientTime, rightComp.BaseClientTime);
            }

            return(ret);
        }
Ejemplo n.º 16
0
        // comes from DynamicScenesController.cs
        public void SceneLoaded(Scene scene, LoadSceneMode mode)
        {
            foreach (var go in scene.GetRootGameObjects())
            {
                var terrain = go.GetComponent <Terrain>();
                if (terrain != null)
                {
                    Type t = Type.GetType("ArtPlugins.TerrainProxy, Assembly-CSharp");
                    if (t != null)
                    {
                        terrain.drawTreesAndFoliage  = true;
                        terrain.heightmapPixelError  = 20;
                        terrain.collectDetailPatches = true;
                        terrain.detailObjectDistance = 120;
                        terrain.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off;

                        terrain.gameObject.AddComponent(t);

                        _logger.Debug("ArtPlugins.TerrainProxy, Assembly-CSharp Founded");
                    }
                    else
                    {
                        _logger.Error("ArtPlugins.TerrainProxy, Assembly-CSharp Not Founded");
                    }

                    terrain.treeDistance = 800;
                }

                foreach (var v in go.GetComponentsInChildren <Camera>())
                {
                    Type t = Type.GetType("ArtPlugins.GQS_Bind_Camera, Assembly-CSharp");
                    if (t != null)
                    {
                        v.gameObject.AddComponent(t);
                    }
                    else
                    {
                        _logger.Error("ArtPlugins.GQS_Bind_Camera is null ??? !!!");
                    }

                    v.useOcclusionCulling = false;
//                    if (v.GetComponent<AudioListener>() == null)
//                    {
//                        v.gameObject.AddComponent<AudioListener>();
//                    }
                }
            }
        }
Ejemplo n.º 17
0
        public override bool IsActive(ICameraMotorInput input, ICameraMotorState state)
        {
            if (input.IsDead)
            {
                return(false);
            }
            if (!input.CanWeaponGunSight)
            {
                return(false);
            }
            if (state.IsFree())
            {
                return(false);
            }
            if (!state.GetMainConfig().CanSwitchView)
            {
                return(false);
            }

            if (state.ViewMode == ECameraViewMode.GunSight &&
                (input.FilteredCameraFocus || input.ForceChangeGunSight || input.ForceInterruptGunSight))
            {
                if (input.ForceInterruptGunSight)
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Debug("ForceInterruptGunSight");
                    }
                }
                return(false);
            }

            //if (state.ViewMode.Equals(ECameraViewMode.ThirdPerson) &&  input.IsCameraFocus)
            if (state.ViewMode == ECameraViewMode.ThirdPerson && !input.ForceInterruptGunSight && (input.FilteredCameraFocus || input.ForceChangeGunSight))
            {
                return(true);
            }

            //if (state.ViewMode.Equals(ECameraViewMode.FirstPerson) && input.IsCameraFocus)
            if (state.ViewMode == ECameraViewMode.FirstPerson && !input.ForceInterruptGunSight && (input.FilteredCameraFocus || input.ForceChangeGunSight))
            {
                return(true);
            }

            return(state.ViewMode == ECameraViewMode.GunSight);
        }
Ejemplo n.º 18
0
        public override bool IsActive(ICameraMotorInput input, ICameraMotorState state)
        {
            if (input.IsDead)
            {
                return(false);
            }
            if (!input.CanWeaponGunSight)
            {
                return(false);
            }
            if (state.IsFree())
            {
                return(false);
            }
            if (!state.GetMainConfig().CanSwitchView)
            {
                return(false);
            }

            if (state.ViewMode == ECameraViewMode.GunSight &&
                (input.FilteredCameraFocus || input.InterruptCameraFocus))
            {
                //   DebugUtil.MyLog(input.FilteredCameraFocus +"_"+ input.InterruptCameraFocus);
                if (input.InterruptCameraFocus)
                {
                    if (Logger.IsDebugEnabled)
                    {
                        Logger.Debug("ForceInterruptGunSight");
                    }
                }
                return(false);
            }
            if (state.ViewMode == ECameraViewMode.ThirdPerson && !input.InterruptCameraFocus && (input.FilteredCameraFocus))
            {
                // DebugUtil.MyLog("Change cmr to gunsight");
                return(true);
            }

            if (state.ViewMode == ECameraViewMode.FirstPerson && !input.InterruptCameraFocus && (input.FilteredCameraFocus))
            {
                return(true);
            }

            return(state.ViewMode == ECameraViewMode.GunSight);
        }
Ejemplo n.º 19
0
        public void RecordToLog(int seq)
        {
            if (!IsRecordOn)
            {
                return;
            }
            sb.Length = 0;
            sb.Append("{\"seq\":").Append(seq).Append(",").Append("\"entity\":[");
            var ecs = GetEntityCount();

            for (int i = 0; i < ecs.Length; i++)
            {
                sb.Append(IntToStringCache(ecs[i]));
                if (i < ecs.Length - 1)
                {
                    sb.Append(",");
                }
                else
                {
                    sb.Append("],");
                }
            }

            for (int i = 0; i < _maxId; i++)
            {
                if (_infos[i].Times > 0 && _infos[i].Interval > 0)
                {
                    sb.Append("\"").Append(IntToStringCache(i)).Append("\":[").Append(IntToStringCache(_infos[i].Times)).Append(",")
                    .Append(IntToStringCache(_infos[i].Interval));
                    if (_infos[i].GC > 0)
                    {
                        sb.Append(",").Append(IntToStringCache(_infos[i].GC));
                    }
                    sb.Append("],");

                    _infos[i].Clean();
                }
            }

            sb.Remove(sb.Length - 1, 1);

            sb.Append("}");
            _logger.Debug(sb.ToString());
        }
Ejemplo n.º 20
0
        public int SerializeSnapshot(ISnapshot snap, Stream stream)
        {
            snap.AcquireReference();
            try
            {
                _sentSnapshot.Add(snap.SnapshotSeq, snap);
            }
            catch (Exception e)
            {
                int i = 0;
                i++;
            }
            _snapshotQueue.Enqueue(snap.SnapshotSeq);
            ISnapshot baseSnap = GetBaseSnapshot(AckedSnapshotId);
            int       ret      = 0;

            if (baseSnap == null)
            {
                _emptySnapshot.SnapshotSeq = -1;
                ret = _snapSerializer.Serialize(_emptySnapshot, snap, stream);
                _lastAllSnapShotId   = snap.SnapshotSeq;
                _lastAllSnapShotTime = snap.ServerTime;
                _isSendAll           = true;
                _logger.Debug("send full snapshot!");
                FullCount++;
            }
            else
            {
                ret        = _snapSerializer.Serialize(baseSnap, snap, stream);
                _isSendAll = false;
                DiffCount++;
            }

            ClearOldSnapshot(AckedSnapshotId);
            ClearSnapshotWhenLimitExceeded();
            return(ret);
        }
Ejemplo n.º 21
0
        protected override void DoSetData(PointerData data)
        {
            _doorObjId = DoorCastData.EntityId(data.IdList);

            var doorObj = _triggerObjectManager.Get(ETriggerObjectType.Door, _doorObjId);

            if (doorObj == null)
            {
                Logger.Debug("Door trigger object is null.");
                return;
            }

            _enableAction = false;

            var player = _playerContext.flagSelfEntity;
            var go     = doorObj;

            if (IsUntouchableOffGround(player, data.Position, go))
            {
                Logger.Debug("Door is untouchable to player.");
                return;
            }

            //make sure player-door have a correct relative position
            var direction = player.RootGo().transform.position - go.transform.position;

            direction.y = 0;
            var dot = Vector3.Dot(direction, go.transform.forward);

            if (!dot.Equals(0))
            {
                var mapObj = _doorContext.GetEntityWithEntityKey(new EntityKey(_doorObjId, (int)EEntityType.MapObject));
                if (mapObj == null || !mapObj.hasDoorData)
                {
                    if (DetectObstacle(go, dot < 0))
                    {
                        SetObstacleTip();
                    }
                    else
                    {
                        Tip           = ScriptLocalization.client_actiontip.opendoor;
                        _enableAction = true;
                    }
                }
                else
                {
                    var state = mapObj.doorData.State;
                    if (state == (int)DoorState.Closed)
                    {
                        if (DetectObstacle(go, dot < 0))
                        {
                            SetObstacleTip();
                        }
                        else
                        {
                            Tip           = ScriptLocalization.client_actiontip.opendoor;
                            _enableAction = true;
                        }
                    }
                    else if (state == (int)DoorState.OpenMax || state == (int)DoorState.OpenMin)
                    {
                        if ((state == (int)DoorState.OpenMax && DetectObstacle(go, true)) ||
                            (state == (int)DoorState.OpenMin && DetectObstacle(go, false)))
                        {
                            SetObstacleTip();
                        }
                        else
                        {
                            Tip           = ScriptLocalization.client_actiontip.closedoor;
                            _enableAction = true;
                        }
                    }
                    else
                    {
                        Logger.Debug("Door state is wrong.");
                    }
                }
            }
            else
            {
                Logger.Debug("Door operation angle failed.");
            }
        }
Ejemplo n.º 22
0
 public void ForceFinishGrenadeThrow()
 {
     Logger.Debug("InterruptGrenade :   ForceEnd");
     SetNewCommandFromFunctionCall(FsmInput.ForceFinishGrenade);
 }
Ejemplo n.º 23
0
        private void SceneLoaded(Scene scene, LoadSceneMode modee)
        {
            var match = _scenePositionRegex.Match(scene.name);

            if (match.Success)
            {
                int index1 = Convert.ToInt32(match.Groups[1].Value);
                int index2 = Convert.ToInt32(match.Groups[2].Value);

                _sceneLoadMap[index1, index2].State  = SceneState.Loaded;
                _sceneLoadMap[index1, index2].Scene  = scene;
                _sceneLoadMap[index1, index2].Active = true;


                foreach (var gameObject in _sceneLoadMap[index1, index2].Scene.GetRootGameObjects())
                {
                    var terrain = gameObject.GetComponent <Terrain>();
                    if (terrain != null)
                    {
                        Type t = Type.GetType("ArtPlugins.TerrainProxy, Assembly-CSharp");
                        if (t != null)
                        {
                            terrain.gameObject.AddComponent(t);
                            Logger.Debug("ArtPlugins.TerrainProxy, Assembly-CSharp Founded");
                        }
                        else
                        {
                            Logger.Debug("ArtPlugins.TerrainProxy, Assembly-CSharp Not Founded");
                        }
                    }
                }



                if (onSceneLoaded != null)
                {
                    Logger.DebugFormat("onSceneLoaded Terrain {0} {1}", index1, index2);
                    onSceneLoaded(index1, index2, _sceneLoadMap[index1, index2].Scene);
                }

                _loadingScene--;

                if (SceneLoadedEvent != null)
                {
                    var center = _basePosition + new Vector3(_gridSize * (index1 + 0.5f), 0, _gridSize * (index2 + 0.5f));
                    // 预设:场景高度在0~1000m之间
                    float heightScope = 1000;
                    center.y = heightScope * 0.5f;
                    SceneLoadedEvent(scene, center, _gridSize > heightScope ? _gridSize : heightScope);
                }
            }

            if (_additiveScenes != null && _additiveScenes.Contains(scene.name))
            {
                SceneManager.SetActiveScene(scene);
                Logger.InfoFormat("SET ACTIVE SCENE: {0}", scene.name);
                foreach (var go in scene.GetRootGameObjects())
                {
                    var comp = go.GetComponentInChildren <PositionRelatedEffect>();
                    if (comp != null)
                    {
                        _effectUpdater = new PositionRelatedEffectUpdater(comp);
                    }

                    foreach (var v in go.GetComponentsInChildren <Camera>())
                    {
                        // 禁用相机,保证角色动画不更新
                        if (SharedConfig.IsServer)
                        {
                            v.enabled = false;
                        }
                        else
                        {
                            Type t = Type.GetType("ArtPlugins.GQS_Bind_Camera, Assembly-CSharp");
                            if (t != null)
                            {
                                v.gameObject.AddComponent(t);
                            }
                            else
                            {
                                Logger.Error("ArtPlugins.GQS_Bind_Camera is null ??? !!!");
                            }
                        }

                        v.useOcclusionCulling = SharedConfig.EnableOC;
                    }
                }
                _loadingScene--;
            }

            foreach (var gameObject in scene.GetRootGameObjects())
            {
                var terrain = gameObject.GetComponent <Terrain>();
                if (terrain != null)
                {
                    terrain.treeDistance = 800;
                }
            }

            Logger.InfoFormat("Scene loaded: {0}, remain loading scene: {1}", scene.name, _loadingScene);

            if (_loadingScene == 0 && AllSceneLoaded != null)
            {
                AllSceneLoaded();
            }
        }