96 lines
2.2 KiB
Markdown
96 lines
2.2 KiB
Markdown
|
---
|
||
|
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.
|