---
title: "Boundaries"
date: 2019-05-29T11:05:16-07:00
weight: 900
---

Now that we have bouncing capabilities, we can add them easily to other entities. Let's make boundary boxes that make the ball bounce off the sides of the game area.

**PongFE/Messages/BoundarySpawnMessage.cs**:

```cs
using Encompass;
using MoonTools.Structs;

namespace PongFE.Messages
{
    public struct BoundarySpawnMessage : IMessage
    {
        public Position2D Position { get; }
        public int Width { get; }
        public int Height { get; }

        public BoundarySpawnMessage(Position2D position, int width, int height)
        {
            Position = position;
            Width = width;
            Height = height;
        }
    }
}
```

**PongFE/Engines/BoundarySpawner.cs**:

```cs
using Encompass;
using PongFE.Components;
using PongFE.Messages;

namespace PongFE.Spawners
{
    public class BoundarySpawner : Spawner<BoundarySpawnMessage>
    {
        protected override void Spawn(BoundarySpawnMessage message)
        {
            var entity = CreateEntity();

            AddComponent(entity, new PositionComponent(message.Position));
            AddComponent(entity, new CollisionComponent(new MoonTools.Bonk.Rectangle(0, 0, message.Width, message.Height)));
            AddComponent(entity, new CanCauseBounceComponent());
        }
    }
}
```

Now we can create the boundary entities by sending messages with WorldBuilder.

**PongFEGame.cs**

```cs
    ...

    WorldBuilder.AddEngine(new BoundarySpawner());

    ...

    // top boundary
    WorldBuilder.SendMessage(
        new BoundarySpawnMessage(
            new MoonTools.Structs.Position2D(0, -6),
            1280,
            6
        )
    );

    // right boundary
    WorldBuilder.SendMessage(
        new BoundarySpawnMessage(
            new MoonTools.Structs.Position2D(1280, 0),
            6,
            720
        )
    );

    // bottom boundary
    WorldBuilder.SendMessage(
        new BoundarySpawnMessage(
            new MoonTools.Structs.Position2D(0, 720),
            1280,
            6
        )
    );
```

Notice that we didn't have to write any new game logic to add boundaries to our game. This is the power of modular composition using ECS.
