Server.Multis.BaseBoat.SetFacing C# (CSharp) Méthode

SetFacing() public méthode

public SetFacing ( Direction facing ) : bool
facing Direction
Résultat bool
		public bool SetFacing( Direction facing )
		{
			if ( Parent != null || this.Map == null )
				return false;

			if ( CheckDecay() )
				return false;

			if ( Map != Map.Internal )
			{
				switch ( facing )
				{
					case Direction.North: if ( !CanFit( Location, Map, NorthID ) ) return false; break;
					case Direction.East:  if ( !CanFit( Location, Map,  EastID ) ) return false; break;
					case Direction.South: if ( !CanFit( Location, Map, SouthID ) ) return false; break;
					case Direction.West:  if ( !CanFit( Location, Map,  WestID ) ) return false; break;
				}
			}

			Direction old = m_Facing;

			m_Facing = facing;

			if ( m_TillerMan != null )
				m_TillerMan.SetFacing( facing );

			if ( m_Hold != null )
				m_Hold.SetFacing( facing );

			if ( m_PPlank != null )
				m_PPlank.SetFacing( facing );

			if ( m_SPlank != null )
				m_SPlank.SetFacing( facing );

			List<IEntity> toMove = GetMovingEntities();

			toMove.Add( m_PPlank );
			toMove.Add( m_SPlank );

			int xOffset = 0, yOffset = 0;
			Movement.Movement.Offset( facing, ref xOffset, ref yOffset );

			if ( m_TillerMan != null )
				m_TillerMan.Location = new Point3D( X + (xOffset * TillerManDistance) + (facing == Direction.North ? 1 : 0), Y + (yOffset * TillerManDistance), m_TillerMan.Z );

			if ( m_Hold != null )
				m_Hold.Location = new Point3D( X + (xOffset * HoldDistance), Y + (yOffset * HoldDistance), m_Hold.Z );

			int count = (int)(m_Facing - old) & 0x7;
			count /= 2;

			for ( int i = 0; i < toMove.Count; ++i )
			{
				IEntity e = toMove[i];

				if ( e is Item )
				{
					Item item = (Item)e;

					item.Location = Rotate( item.Location, count );
				}
				else if ( e is Mobile )
				{
					Mobile m = (Mobile)e;

					m.Direction = ( m.Direction - old + facing ) & Direction.Mask;
					m.Location = Rotate( m.Location, count );
				}
			}

			switch ( facing )
			{
				case Direction.North: ItemID = NorthID; break;
				case Direction.East:  ItemID =  EastID; break;
				case Direction.South: ItemID = SouthID; break;
				case Direction.West:  ItemID =  WestID; break;
			}

			return true;
		}