Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="batch"></param>
        /// <param name="field"></param>
        /// <param name="position"></param>
        /// <param name="direction"></param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            // Foreach wall side
            foreach (TileDrawing td in DisplayCoordinates.GetWalls(position))
            {
                // Not the good side
                if (Compass.GetDirectionFromView(direction, td.Side) != Side)
                {
                    continue;
                }

                DecorationSet decoset = field.Maze.Decoration;
                if (decoset == null)
                {
                    return;
                }

                Decoration deco = decoset.GetDecoration(IsActivated ? ActivatedDecoration : DeactivatedDecoration);
                if (deco == null)
                {
                    return;
                }

                deco.DrawDecoration(batch, decoset, position, Compass.IsSideFacing(direction, Side));
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="batch"></param>
        /// <param name="field"></param>
        /// <param name="position"></param>
        /// <param name="direction"></param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            if (Decoration == null || IsHidden)
            {
                return;
            }

            TileDrawing td = DisplayCoordinates.GetPit(position);

            if (td == null)
            {
                return;
            }



            if (IsActivated)
            {
                //batch.FillRectangle(new Rectangle(td.Location, new Size(50, 50)), Color.Red);
                Decoration.Draw(batch, field.Maze.FloorPitDeco, position);
            }
            //TODO
            //if (td != null && !IsHidden)
            //    batch.DrawTile(TileSet, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
        }
Пример #3
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="batch"></param>
		/// <param name="field"></param>
		/// <param name="position"></param>
		/// <param name="direction"></param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			if (Decoration == null || IsHidden)
				return;

			TileDrawing td = DisplayCoordinates.GetFloorPlate(position);
			if (td == null)
				return;

			Decoration.Draw(batch, DecorationPrimary, position);
		}
Пример #4
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="batch"></param>
		/// <param name="field"></param>
		/// <param name="position"></param>
		/// <param name="direction"></param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			if (TileSet == null)
				return;

			// Upstair or downstair ?
			int delta = Type == StairType.Up ? 0 : 13;

			foreach (TileDrawing tmp in DisplayCoordinates.GetStairs(position))
				batch.DrawTile(TileSet, tmp.ID + delta, tmp.Location, Color.White, 0.0f, tmp.Effect, 0.0f);
		
		}
Пример #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="batch"></param>
        /// <param name="field"></param>
        /// <param name="position"></param>
        /// <param name="direction"></param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            if (TileSet == null)
            {
                return;
            }

            // Upstair or downstair ?
            int delta = Type == StairType.Up ? 0 : 13;

            foreach (TileDrawing tmp in DisplayCoordinates.GetStairs(position))
            {
                batch.DrawTile(TileSet, tmp.ID + delta, tmp.Location, Color.White, 0.0f, tmp.Effect, 0.0f);
            }
        }
Пример #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="batch"></param>
        /// <param name="field"></param>
        /// <param name="position"></param>
        /// <param name="direction"></param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            if (Decoration == null || IsHidden)
            {
                return;
            }

            TileDrawing td = DisplayCoordinates.GetFloorPlate(position);

            if (td == null)
            {
                return;
            }

            Decoration.Draw(batch, DecorationPrimary, position);
        }
Пример #7
0
        /// <summary>
        /// Draws all alcoves according to the view point
        /// </summary>
        /// <param name="batch">Spritebatch handle</param>
        /// <param name="field">Field of view handle</param>
        /// <param name="position">Position in the field of view</param>
        /// <param name="direction">Looking direction</param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            if (field.Maze.Decoration == null)
            {
                return;
            }

            // For each wall side, draws the decoration
            foreach (CardinalPoint side in DisplayCoordinates.DrawingWallSides[(int)position])
            {
                Alcove alcove = GetAlcove(Compass.GetDirectionFromView(direction, side));

                // Get the decoration
                Decoration deco = field.Maze.Decoration.GetDecoration(alcove.Decoration);
                if (deco == null)
                {
                    continue;
                }

                // Draw the decoration
                deco.DrawDecoration(batch, field.Maze.Decoration, position, side == CardinalPoint.South);


                // Hide items
                if (alcove.HideItems || side != CardinalPoint.South)
                {
                    continue;
                }



                // Offset the item locations according to the distance
                Vector2 vect = DisplayCoordinates.GetMonsterScaleFactor(position);
                Point   loc  = deco.PrepareLocation(position);
                loc.Offset((int)(deco.ItemLocation.X * vect.X), (int)(deco.ItemLocation.Y * vect.Y));


                // Draw items in the alcove in front of the team
                foreach (Item item in Square.GetItemsFromSide(direction, side))
                {
                    batch.DrawTile(Square.Maze.Dungeon.ItemTileSet, item.GroundTileID, loc,
                                   DisplayCoordinates.GetDistantColor(position), 0.0f,
                                   DisplayCoordinates.GetItemScaleFactor(position), SpriteEffects.None, 0.0f);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Draw the door
        /// </summary>
        /// <param name="batch">Spritebatch to use</param>
        /// <param name="field">View field</param>
        /// <param name="position">Position in the view filed</param>
        /// <param name="view">Looking direction of the team</param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
        {
            if (!IsVisible)
            {
                return;
            }

            TileDrawing td = DisplayCoordinates.GetTeleporter(position);

            if (td == null)
            {
                return;
            }

            Anim.Draw(batch, td.Location, 0.0f, SpriteEffects.None,
                      DisplayCoordinates.GetDistantColor(position),
                      DisplayCoordinates.GetMonsterScaleFactor(position));
        }
Пример #9
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="batch"></param>
		/// <param name="field"></param>
		/// <param name="position"></param>
		/// <param name="direction"></param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			if (Decoration == null || IsHidden)
				return;

			TileDrawing td = DisplayCoordinates.GetPit(position);
			if (td == null)
				return;



			if (IsActivated)
				//batch.FillRectangle(new Rectangle(td.Location, new Size(50, 50)), Color.Red);
				Decoration.Draw(batch, field.Maze.FloorPitDeco, position);
			//TODO
			//if (td != null && !IsHidden)
			//    batch.DrawTile(TileSet, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
		}
Пример #10
0
		/// <summary>
		/// Draws all alcoves according to the view point
		/// </summary>
		/// <param name="batch">Spritebatch handle</param>
		/// <param name="field">Field of view handle</param>
		/// <param name="position">Position in the field of view</param>
		/// <param name="direction">Looking direction</param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			if (field.Maze.Decoration == null)
				return;

			// For each wall side, draws the decoration
			foreach (CardinalPoint side in DisplayCoordinates.DrawingWallSides[(int) position])
			{
				Alcove alcove = GetAlcove(Compass.GetDirectionFromView(direction, side));

				// Get the decoration
				Decoration deco = field.Maze.Decoration.GetDecoration(alcove.Decoration);
				if (deco == null)
					continue;

				// Draw the decoration
				deco.DrawDecoration(batch, field.Maze.Decoration, position, side == CardinalPoint.South);


				// Hide items
				if (alcove.HideItems || side != CardinalPoint.South)
					continue;

				

				// Offset the item locations according to the distance
				Vector2 vect = DisplayCoordinates.GetMonsterScaleFactor(position);
				Point loc = deco.PrepareLocation(position);
				loc.Offset((int) (deco.ItemLocation.X * vect.X), (int) (deco.ItemLocation.Y * vect.Y));
				

				// Draw items in the alcove in front of the team
				foreach (Item item in Square.GetItemsFromSide(direction, side))
				{
					batch.DrawTile(Square.Maze.Dungeon.ItemTileSet, item.GroundTileID, loc,
						DisplayCoordinates.GetDistantColor(position), 0.0f,
						DisplayCoordinates.GetItemScaleFactor(position), SpriteEffects.None, 0.0f);
				}
			}

		}
Пример #11
0
 /// <summary>
 /// Draw the actor
 /// </summary>
 /// <param name="batch">Spritebatch to use</param>
 /// <param name="field">View field</param>
 /// <param name="position">Position in the view field</param>
 /// <param name="view">Looking direction of the team</param>
 public virtual void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
 {
 }
Пример #12
0
		/// <summary>
		/// Draws a square
		/// </summary>
		/// <param name="batch">Spritebatch handle</param>
		/// <param name="field">View field</param>
		/// <param name="position">Position of the square in the view field</param>
		/// <param name="view">Looking direction of the team</param>
		void DrawSquare(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint view)
		{
			if (field == null)
				return;

			Square square = field.Blocks[(int)position];
			Point point;
			Decoration deco = null;
			List<Item>[] list = square.GetItems(view);


			#region ceiling pit
			if (square.IsPitTarget)
			{
				//TODO
				TileDrawing td = DisplayCoordinates.GetCeilingPit(position);
				//if (td != null)
				//	batch.DrawTile(OverlayTileset, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
				//***batch.DrawTile(ItemsTileset, td.ID, td.Location, td.SwapX, td.SwapY);
			}

			#endregion


			#region Items on ground before a door
			// If there is a deco that hide ground items, skip
			deco = GetDecoration(square.Location, Compass.GetOppositeDirection(view));
			if (deco == null || (deco != null && !deco.HideItems))
			{
				if (!square.IsWall || (deco != null && !deco.HideItems))
				{
					for (int i = 0; i < 2; i++)
					{
						if (list[i].Count == 0)
							continue;

						foreach (Item item in list[i])
						{
							point = DisplayCoordinates.GetGroundPosition(position, (SquarePosition)i);
							if (!point.IsEmpty)
							{
								batch.DrawTile(Dungeon.ItemTileSet, item.GroundTileID, point,
									DisplayCoordinates.GetDistantColor(position), 0.0f,
									DisplayCoordinates.GetItemScaleFactor(position), SpriteEffects.None, 0.0f);
							}
						}
					}
				}
			}
			#endregion


			#region Walls
			if (square.IsWall)
			{
				// Walls
				foreach (TileDrawing tmp in DisplayCoordinates.GetWalls(position))
				{
					Color color = Color.White;
					int tileid = tmp.ID;

					//if (swap)
					//{
					//    color = Color.Red;
					//    tileid += 9;
					//}

					batch.DrawTile(WallTileset, tileid, tmp.Location, color, 0.0f, tmp.Effect, 0.0f);
				}
			}

			#endregion


			#region Decoration
			if (square.HasDecorations)
			{
				// Is there a forced decoration
				for (int i = 0; i < 4; i++)
				{
					deco = Decoration.GetDecoration(square.GetDecorationId((CardinalPoint)i));
					if (deco != null && deco.ForceDisplay)
						deco.DrawDecoration(batch, Decoration, position, true);
				}


				// For each directions, draws the decoration
				foreach (CardinalPoint side in DisplayCoordinates.DrawingWallSides[(int)position])
				{
					// Decoration informations
					deco = Decoration.GetDecoration(square.GetDecorationId(view, side));
					if (deco == null)
						continue;

					deco.DrawDecoration(batch, Decoration, position, side == CardinalPoint.South);
				}
			}

			#endregion


			#region Actor
			if (square.Actor != null)
				square.Actor.Draw(batch, field, position, view);
			#endregion


			#region Items on ground after a door
			if (!square.IsWall)
			{
				// If there is a deco that hide ground items, skip
				deco = GetDecoration(square.Location, Compass.GetOppositeDirection(view));
				if (deco == null || (deco != null && !deco.HideItems))
				{
					// Both ground positions
					for (int i = 2; i < 4; i++)
					{
						// No items
						if (list[i].Count == 0)
							continue;

						// Foreach item on the ground
						foreach (Item item in list[i])
						{
							// Get screen coordinate
							point = DisplayCoordinates.GetGroundPosition(position, (SquarePosition)i);
							if (!point.IsEmpty)
							{
								batch.DrawTile(Dungeon.ItemTileSet, item.GroundTileID, point,
									DisplayCoordinates.GetDistantColor(position), 0.0f,
									DisplayCoordinates.GetItemScaleFactor(position), SpriteEffects.None, 0.0f);
							}
						}
					}
				}
			}
			#endregion


			#region Monsters
			if (square.MonsterCount > 0)
			{
				// Drawing order for monsters
				int[][] order = new int[][]
				{
					new int[] {0, 1, 2, 3},	// North
					new int[] {3, 2, 1, 0},	// South
					new int[] {2, 0, 3, 1},	// West
					new int[] {1, 3, 0, 2},	// East
				};

				for (int i = 0; i < 4; i++)
				{
					Monster monster = square.Monsters[order[(int)view][i]];
					if (monster != null)
						monster.Draw(batch, view, position);
				}
			}
			#endregion


			#region Flying items

			List<ThrownItem>[] flyings = GetFlyingItems(square.Location, view);
			foreach (SquarePosition pos in Enum.GetValues(typeof(SquarePosition)))
			{
				point = DisplayCoordinates.GetFlyingItem(position, pos);
				//	if (point == Point.Empty)
				//		continue;

				// Swap the tile if throwing on the right side
				SpriteEffects fx = SpriteEffects.None;
				if (pos == SquarePosition.NorthEast || pos == SquarePosition.SouthEast)
					fx = SpriteEffects.FlipHorizontally;

				foreach (ThrownItem fi in flyings[(int)pos])
					batch.DrawTile(Dungeon.ItemTileSet, fi.Item.ThrowTileID, point,
						DisplayCoordinates.GetDistantColor(position), 0.0f,
						DisplayCoordinates.GetItemScaleFactor(position), fx, 0.0f);

			}
			#endregion

		}
Пример #13
0
		/// <summary>
		/// Draw the maze
		/// </summary>
		/// <param name="batch">SpriteBatch to use</param>
		/// <param name="location">Location to display from</param>
		/// <see cref="http://eob.wikispaces.com/eob.vmp"/>
		public void Draw(SpriteBatch batch, DungeonLocation location)
		{
			if (WallTileset == null)
				return;

			// Clear the spritebatch
			batch.End();
			Display.PushScissor(new Rectangle(0, 0, 352, 240));
			batch.Begin();


			//
			// 
			//
			ViewField pov = new ViewField(this, location);


			// TODO Backdrop
			// The background is assumed to be x-flipped when party.x & party.y & party.direction = 1.
			// I.e. all kind of moves and rotations from the current position will result in the background being x-flipped.
			bool flipbackdrop = ((location.Coordinate.X + location.Coordinate.Y + (int)location.Direction) & 1) == 0;
			SpriteEffects effect = flipbackdrop ? SpriteEffects.FlipHorizontally : SpriteEffects.None;
			batch.DrawTile(WallTileset, 0, Point.Empty, Color.White, 0.0f, effect, 0.0f);

			// maze block draw order
			// A E B D C
			// F J G I H
			//   K M L
			//   N ^ O

			#region row -3
			DrawSquare(batch, pov, ViewFieldPosition.A, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.E, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.B, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.D, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.C, location.Direction);
			#endregion

			#region row -2
			DrawSquare(batch, pov, ViewFieldPosition.F, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.J, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.G, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.I, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.H, location.Direction);
			#endregion

			#region row -1
			DrawSquare(batch, pov, ViewFieldPosition.K, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.M, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.L, location.Direction);
			#endregion

			#region row 0
			DrawSquare(batch, pov, ViewFieldPosition.N, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.Team, location.Direction);
			DrawSquare(batch, pov, ViewFieldPosition.O, location.Direction);
			#endregion


			// Clear the spritebatch
			batch.End();
			Display.PopScissor();
			batch.Begin();

		}
Пример #14
0
        /// <summary>
        /// Draw the door
        /// </summary>
        /// <param name="batch">Spritebatch to use</param>
        /// <param name="field">View field</param>
        /// <param name="position">Position in the view filed</param>
        /// <param name="view">Looking direction of the team</param>
        public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint view)
        {
            if (TileSet == null)
            {
                return;
            }

            TileDrawing td   = null;
            TileSet     wall = Square.Maze.WallTileset;


            // TODO: Under the door, draw sides
            if (field.GetBlock(ViewFieldPosition.L).IsWall&& position == ViewFieldPosition.Team)
            {
                //		td = DisplayCoordinates.GetDoor(ViewFieldPosition.Team);
                //		if (td != null)
                //			batch.DrawTile(overlay, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
                if (field.Maze.Decoration != null)
                {
                    field.Maze.Decoration.Draw(batch, field.Maze.DoorDeco, position);
                }
            }

            // Draw the door
            else if (((field.Maze.IsDoorNorthSouth(Square.Location) && (view == CardinalPoint.North || view == CardinalPoint.South)) ||
                      (!field.Maze.IsDoorNorthSouth(Square.Location) && (view == CardinalPoint.East || view == CardinalPoint.West))) &&
                     position != ViewFieldPosition.Team)
            {
                td = DisplayCoordinates.GetDoor(position);
                if (td != null)
                {
                    batch.DrawTile(wall, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
                    //block.Door.Draw(batch, td.Location, position, view);


                    switch (Type)
                    {
                    case DoorType.Grid:
                        DrawSimpleDoor(batch, 1, td.Location, position);
                        break;

                    case DoorType.Forest:
                        DrawSimpleDoor(batch, 6, td.Location, position);
                        break;

                    case DoorType.Iron:
                        DrawSimpleDoor(batch, 0, td.Location, position);
                        break;

                    case DoorType.Monster:
                        DrawUpDownDoor(batch, 2, td.Location, position);
                        break;

                    case DoorType.Azure:
                        DrawSimpleDoor(batch, 8, td.Location, position);
                        break;

                    case DoorType.Crimson:
                        DrawSimpleDoor(batch, 9, td.Location, position);
                        break;

                    case DoorType.Temple:
                        DrawSimpleDoor(batch, 10, td.Location, position);
                        break;

                    case DoorType.Silver:
                        DrawSimpleDoor(batch, 11, td.Location, position);
                        break;

                    case DoorType.Mantis:
                        DrawSimpleDoor(batch, 12, td.Location, position);
                        break;
                    }
                }
            }
        }
Пример #15
0
		/// <summary>
		/// Draw the actor
		/// </summary>
		/// <param name="batch">Spritebatch to use</param>
		/// <param name="field">View field</param>
		/// <param name="position">Position in the view field</param>
		/// <param name="view">Looking direction of the team</param>
		public virtual void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
		}
Пример #16
0
		/// <summary>
		/// Draw the door
		/// </summary>
		/// <param name="batch">Spritebatch to use</param>
		/// <param name="field">View field</param>
		/// <param name="position">Position in the view filed</param>
		/// <param name="view">Looking direction of the team</param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			if (!IsVisible)
				return;

			TileDrawing td = DisplayCoordinates.GetTeleporter(position);
			if (td == null)
				return;

			Anim.Draw(batch, td.Location, 0.0f, SpriteEffects.None,
				DisplayCoordinates.GetDistantColor(position), 
				DisplayCoordinates.GetMonsterScaleFactor(position));

		}
Пример #17
0
		/// <summary>
		/// Draw the door
		/// </summary>
		/// <param name="batch">Spritebatch to use</param>
		/// <param name="field">View field</param>
		/// <param name="position">Position in the view filed</param>
		/// <param name="view">Looking direction of the team</param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint view)
		{
			if (TileSet == null)
				return;

			TileDrawing td = null;
			TileSet wall = Square.Maze.WallTileset;


			// TODO: Under the door, draw sides
			if (field.GetBlock(ViewFieldPosition.L).IsWall && position == ViewFieldPosition.Team)
			{
		//		td = DisplayCoordinates.GetDoor(ViewFieldPosition.Team);
		//		if (td != null)
		//			batch.DrawTile(overlay, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
				if (field.Maze.Decoration != null)
				{
					field.Maze.Decoration.Draw(batch, field.Maze.DoorDeco, position);
				}
			}

			// Draw the door
			else if (((field.Maze.IsDoorNorthSouth(Square.Location) && (view == CardinalPoint.North || view == CardinalPoint.South)) ||
					(!field.Maze.IsDoorNorthSouth(Square.Location) && (view == CardinalPoint.East || view == CardinalPoint.West))) &&
					position != ViewFieldPosition.Team)
			{
				td = DisplayCoordinates.GetDoor(position);
				if (td != null)
				{
					batch.DrawTile(wall, td.ID, td.Location, Color.White, 0.0f, td.Effect, 0.0f);
					//block.Door.Draw(batch, td.Location, position, view);


					switch (Type)
					{
						case DoorType.Grid:
						DrawSimpleDoor(batch, 1, td.Location, position);
						break;
						case DoorType.Forest:
						DrawSimpleDoor(batch, 6, td.Location, position);
						break;
						case DoorType.Iron:
						DrawSimpleDoor(batch, 0, td.Location, position);
						break;
						case DoorType.Monster:
						DrawUpDownDoor(batch, 2, td.Location, position);
						break;
						case DoorType.Azure:
						DrawSimpleDoor(batch, 8, td.Location, position);
						break;
						case DoorType.Crimson:
						DrawSimpleDoor(batch, 9, td.Location, position);
						break;
						case DoorType.Temple:
						DrawSimpleDoor(batch, 10, td.Location, position);
						break;
						case DoorType.Silver:
						DrawSimpleDoor(batch, 11, td.Location, position);
						break;
						case DoorType.Mantis:
						DrawSimpleDoor(batch, 12, td.Location, position);
						break;
					}
				}
			}


		}
Пример #18
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="batch"></param>
		/// <param name="field"></param>
		/// <param name="position"></param>
		/// <param name="direction"></param>
		public override void Draw(SpriteBatch batch, ViewField field, ViewFieldPosition position, CardinalPoint direction)
		{
			// Foreach wall side
			foreach (TileDrawing td in DisplayCoordinates.GetWalls(position))
			{
				// Not the good side
				if (Compass.GetDirectionFromView(direction, td.Side) != Side)
					continue;

				DecorationSet decoset = field.Maze.Decoration;
				if (decoset == null)
					return;

				Decoration deco = decoset.GetDecoration(IsActivated ? ActivatedDecoration : DeactivatedDecoration);
				if (deco == null)
					return;

				deco.DrawDecoration(batch, decoset, position, Compass.IsSideFacing(direction, Side));
			}
		}