/// <summary>
        /// 
        /// </summary>
        public virtual void BroadcastValueUpdate()
        {
            if ( m_isInWorld == false )
                return;

            // 广播周围的数据
            if ( m_KnownCharacters.Count > 0 )
            {
                foreach ( WowCharacter character in m_KnownCharacters )
                {
                    if ( character.KnowsOf( this ) == true )
                    {
                        MemoryPacket updatePacket = new MemoryPacket();
                        WriteObjectValueUpdate( updatePacket, false );
                        character.AddUpdateData( updatePacket, 1 );
                    }
                }
            }

            // 添加自己的数据
            MemoryPacket selfPacket = new MemoryPacket();
            WriteObjectValueUpdate( selfPacket, true );
            AddUpdateData( selfPacket, 1 );

            ResetUpdateInfo();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dt"></param>
        public virtual void OnUpdate( object sender, ProcessSliceEventArgs eventArgs )
        {
            if ( m_isInWorld == false )
                return;

            uint uiUpdateCount = 0;
            MemoryPacket memoryPacket = new MemoryPacket();

            // 把自己改变得值广播到附近
            this.BroadcastValueUpdate();

            // 开始更新道具

            // 开始更新 新的游戏道具
            if ( m_NewItems.Count > 0 )
            {
                WowItem[] newItemArray = m_NewItems.ToArrayAndClear();
                foreach ( var newItem in newItemArray )
                {
                    //item.OnInsert();
                    newItem.ObjectCreationUpdate( memoryPacket, true );
                    //obj.m_isInWorld = true;
                }

                uiUpdateCount += (uint)newItemArray.Length;
            }
            // 结束更新 新的游戏道具


            // 开始跟新 存在的游戏道具
            WowItem[] ownedItemArray = m_OwnedItemsRequiringUpdates.ToArrayAndClear();
            foreach ( var ownedItem in ownedItemArray )
                ownedItem.BroadcastValueUpdate();
            // 结束跟新 存在的游戏道具

            // 检测
            if ( ( eventArgs.UpdateTime - m_PreUpdateTime ) < ProcessServer.WowZoneCluster.World.UpdateWorldSpeed && uiUpdateCount > 0 )
            {
                // 仅仅更新道具,就发送数据 然后退出
                // 完成更新
                this.AddUpdateData( memoryPacket, uiUpdateCount );
                this.SendUpdates();

                return;
            }


            // 如果还需要更新人物等。。。
            HashSet<WorldEntity> newWorldEntity = new HashSet<WorldEntity>();

            // 获取附近的对象
            IEnumerable<WorldEntity> nearbyWorldEntity = this.GetAllEntitysInRange( WowCharacter.BROAD_CAST_RANGE );

            // 排除已存在的对象
            newWorldEntity.AddRange( nearbyWorldEntity );
            newWorldEntity.ExceptWith( m_KnownEntity );
            newWorldEntity.Remove( this );


            // 开始更新 新的游戏物体
            foreach ( WorldEntity entity in newWorldEntity )
            {
                WowCharacter wowCharacter = entity as WowCharacter;
                if ( wowCharacter != null )
                    m_KnownCharacters.Add( wowCharacter );

                IWowUpdate wowUpdate = entity.GetComponent<IWowUpdate>( WowUpdate.WOW_UPDATE_COMPONENT_ID );
                if ( wowUpdate != null )
                    wowUpdate.ObjectCreationUpdate( memoryPacket, false );
                //OnEncountered( obj );
            }

            uiUpdateCount += (uint)newWorldEntity.Count;
            // 结束更新 新的游戏物体


            // 获取已不再附近的对象
            HashSet<WorldEntity> outOfRangeWorldEntity = new HashSet<WorldEntity>();

            // 排除已不存在的对象
            outOfRangeWorldEntity.AddRange( m_KnownEntity );
            outOfRangeWorldEntity.ExceptWith( nearbyWorldEntity );

            foreach ( WorldEntity entity in outOfRangeWorldEntity )
            {
                WowCharacter wowCharacter = entity as WowCharacter;
                if ( wowCharacter != null )
                    m_KnownCharacters.Remove( wowCharacter );

                // m_outOfRange.Add(obj.EntityId);

                //OnOutOfRange( obj );
            }

            // 添加现在已存在附近的游戏物体
            m_KnownEntity.Clear();
            m_KnownEntity.AddRange( nearbyWorldEntity );

            // 完成更新
            if ( uiUpdateCount > 0 )
            {
                this.AddUpdateData( memoryPacket, uiUpdateCount );
                this.SendUpdates();
            }

            foreach ( var entity in outOfRangeWorldEntity )
            {
                // send the destroy packet
                IWowUpdate wowUpdate = entity.GetComponent<IWowUpdate>( WowUpdate.WOW_UPDATE_COMPONENT_ID );
                if ( wowUpdate != null )
                    wowUpdate.SendDestroyToPlayer( this );
            }

            m_PreUpdateTime = eventArgs.UpdateTime;
        }