コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        internal void OnLeavedMapSpaceNode(BaseCharacter character, MapSpaceNode mapSpaceNode)
        {
            EventHandler <CharacterLeaveSpaceNodeEventArgs> tempEventArgs = m_EventCharacterLeavedSpaceNode;

            if (tempEventArgs != null)
            {
                CharacterLeaveSpaceNodeEventArgs eventArgs = new CharacterLeaveSpaceNodeEventArgs(character, mapSpaceNode);
                tempEventArgs(this, eventArgs);
            }
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        internal void OnLeavingMapSpaceNode(WorldEntity worldEntity, MapSpaceNode mapSpaceNode)
        {
            EventHandler <WorldEntityLeaveSpaceNodeEventArgs> tempEventArgs = m_EventWorldEntityLeavingSpaceNode;

            if (tempEventArgs != null)
            {
                WorldEntityLeaveSpaceNodeEventArgs eventArgs = new WorldEntityLeaveSpaceNodeEventArgs(worldEntity, mapSpaceNode);
                tempEventArgs(this, eventArgs);
            }
        }
コード例 #3
0
        /// <summary>
        ///
        /// </summary>
        internal void OnLeavedMapSpaceNode(BaseItem item, MapSpaceNode mapSpaceNode)
        {
            EventHandler <ItemLeaveSpaceNodeEventArgs> tempEventArgs = m_EventItemLeavedSpaceNode;

            if (tempEventArgs != null)
            {
                ItemLeaveSpaceNodeEventArgs eventArgs = new ItemLeaveSpaceNodeEventArgs(item, mapSpaceNode);
                tempEventArgs(this, eventArgs);
            }
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        internal void OnLeavedMapSpaceNode(BaseCreature creature, MapSpaceNode mapSpaceNode)
        {
            EventHandler <CreatureLeaveSpaceNodeEventArgs> tempEventArgs = m_EventCreatureLeavedSpaceNode;

            if (tempEventArgs != null)
            {
                CreatureLeaveSpaceNodeEventArgs eventArgs = new CreatureLeaveSpaceNodeEventArgs(creature, mapSpaceNode);
                tempEventArgs(this, eventArgs);
            }
        }
コード例 #5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        public void CheckToDeadSpaceNode( MapSpaceNode mapSpaceNode )
        {
            Debug.Assert( mapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - mapSpaceNode == null error!" );

            MapSpaceNode parentMapSpaceNode = mapSpaceNode.Parent;

            Debug.Assert( parentMapSpaceNode != null, "PartitionSpaceStrategy.DeactivateSpaceNode(...) - parentMapSpaceNode == null error!" );

            ReaderWriterLockSlimEx.EnterWriteLock( m_LockAllSpaceNodes );
            {
                do
                {
                    MapSpaceNode outValue = null;
                    if ( m_DeactivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == false )
                        break;

                    int iGridCellPointX = parentMapSpaceNode.RankIndex.Rank0Index * MAX_NUMBER_OF_CELLS;
                    int iGridCellPointY = parentMapSpaceNode.RankIndex.Rank1Index * MAX_NUMBER_OF_CELLS;

                    MapSpaceNode subSpaceNode1 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode1 != null && this.IsDeadOrDeactivate( subSpaceNode1 ) == false )
                        break;

                    MapSpaceNode subSpaceNode2 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode2 != null && this.IsDeadOrDeactivate( subSpaceNode2 ) == false )
                        break;

                    MapSpaceNode subSpaceNode3 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index - 1, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode3 != null && this.IsDeadOrDeactivate( subSpaceNode3 ) == false )
                        break;

                    MapSpaceNode subSpaceNode4 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode4 != null && this.IsDeadOrDeactivate( subSpaceNode4 ) == false )
                        break;

                    // DeactivateSpaceNode5 == SelfSpaceNode

                    MapSpaceNode subSpaceNode6 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode6 != null && this.IsDeadOrDeactivate( subSpaceNode6 ) == false )
                        break;

                    MapSpaceNode subSpaceNode7 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index - 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner );
                    if ( subSpaceNode7 != null && this.IsDeadOrDeactivate( subSpaceNode7 ) == false )
                        break;

                    MapSpaceNode subSpaceNode8 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode8 != null && this.IsDeadOrDeactivate( subSpaceNode8 ) == false )
                        break;

                    MapSpaceNode subSpaceNode9 = this.GetSubSpaceNode( iGridCellPointX + mapSpaceNode.RankIndex.Rank0Index + 1, iGridCellPointY + mapSpaceNode.RankIndex.Rank1Index + 1, mapSpaceNode.Owner );
                    ;
                    if ( subSpaceNode9 != null && this.IsDeadOrDeactivate( subSpaceNode9 ) == false )
                        break;

                    // All DeadOrDeactivate
                    this.DeadSelfSpaceNode( mapSpaceNode );

                } while ( false );
            }
            ReaderWriterLockSlimEx.ExitWriteLock( m_LockAllSpaceNodes );
        }
コード例 #6
0
 /// <summary>
 /// 
 /// </summary>
 internal void OnUpdatedMapSpaceNode( MapSpaceNode mapSpaceNode, WorldEntity gameEntity )
 {
     EventHandler<UpdatedMapSpaceNodeEventArgs> tempAfterEventArgs = m_EventUpdatedMapSpaceNode;
     if ( tempAfterEventArgs != null )
     {
         UpdatedMapSpaceNodeEventArgs eventArgs = new UpdatedMapSpaceNodeEventArgs( mapSpaceNode, gameEntity );
         tempAfterEventArgs( this, eventArgs );
     }
 }
コード例 #7
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        private void DeactivateSpaceNodeNow( MapSpaceNode mapSpaceNode )
        {
            BaseCreature[] creatureArray = mapSpaceNode.ToArrayInCreatures();
            foreach ( BaseCreature creature in creatureArray )
                creature.OnSpaceNodeDeactivate();

            BaseItem[] itemArray = mapSpaceNode.ToArrayInItems();
            foreach ( BaseItem item in itemArray )
                item.OnSpaceNodeDeactivate();

            WorldEntity[] entityArray = mapSpaceNode.ToArrayInEntitys();
            foreach ( WorldEntity gameEntity in entityArray )
                gameEntity.OnSpaceNodeDeactivate();
        }
コード例 #8
0
        /// <summary>
        /// 开始静止物体行为
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        private void DeadSelfSpaceNode( MapSpaceNode mapSpaceNode )
        {
            MapSpaceNode outValue = null;

            if ( m_DeactivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                m_DeactivateSpaceNodes.Remove( mapSpaceNode );
                m_DeadSpaceNodes.Add( mapSpaceNode, mapSpaceNode );

                this.DeactivateSpaceNodeNow( mapSpaceNode );
            }
            else if ( m_ActivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                // 如果是在激活状态就跳过不用静止物体
            }
            else if ( m_DeadSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == false )
            {
                m_DeadSpaceNodes.Add( mapSpaceNode, mapSpaceNode );

                this.DeactivateSpaceNodeNow( mapSpaceNode );
            }
        }
コード例 #9
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        /// <returns></returns>
        private bool IsDeadOrDeactivate( MapSpaceNode mapSpaceNode )
        {
            MapSpaceNode outValue = null;

            if ( m_DeactivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
                return true;

            if ( m_DeadSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
                return true;

            return false;
        }
コード例 #10
0
        /// <summary>
        /// 地图节点已不活动,但现在还不是静止物体行为的时候,需要检查邻边的节点
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        private void DeactivateSelfSpaceNode( MapSpaceNode mapSpaceNode )
        {
            MapSpaceNode outValue = null;

            if ( m_ActivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                m_ActivateSpaceNodes.Remove( mapSpaceNode );
                m_DeactivateSpaceNodes.Add( mapSpaceNode, mapSpaceNode );
            }
            else if ( m_DeadSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                // 如果已经在静止的状态就跳过
            }
            else if ( m_DeactivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == false )
                m_DeactivateSpaceNodes.Add( mapSpaceNode, mapSpaceNode );
        }
コード例 #11
0
        /// <summary>
        /// 激活邻边的节点
        /// </summary>
        /// <param name="mapSpaceNode"></param>
        private void ActivateNearSpaceNode( MapSpaceNode mapSpaceNode )
        {
            MapSpaceNode outValue = null;

            if ( m_DeactivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                // 如果已经在不活动的状态就跳过
            }
            else if ( m_DeadSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == true )
            {
                m_DeadSpaceNodes.Remove( mapSpaceNode );
                m_DeactivateSpaceNodes.Add( mapSpaceNode, mapSpaceNode );

                this.ActivateSpaceNodeNow( mapSpaceNode );
            }
            else if ( m_ActivateSpaceNodes.TryGetValue( mapSpaceNode, out outValue ) == false )
            {
                m_DeactivateSpaceNodes.Add( mapSpaceNode, mapSpaceNode );

                this.ActivateSpaceNodeNow( mapSpaceNode );
            }
        }
コード例 #12
0
 /// <summary>
 /// 初始化构造
 /// </summary>
 /// <param name="baseCreature"></param>
 public UpdatedMapSpaceNodeEventArgs( MapSpaceNode mapSpaceNode, WorldEntity gameEntity ) :
     base( gameEntity )
 {
     m_OldMapSpaceNode = mapSpaceNode;
 }
コード例 #13
0
 /// <summary>
 /// 初始化构造
 /// </summary>
 /// <param name="baseCreature"></param>
 public UpdatingMapSpaceNodeEventArgs( MapSpaceNode mapSpaceNode, WorldEntity gameEntity ) :
     base( gameEntity )
 {
     m_NewMapSpaceNode = mapSpaceNode;
 }