func (c *CollisionSystem) BeginContact(contact box2d.B2ContactInterface) {
	engo.Mailbox.Dispatch(CollisionStartMessage{
		Contact: contact,
	})
}
BeginContact implements the B2ContactListener interface.
when a BeginContact callback is made by box2d, it sends a message containing
the information from the callback.
package engoBox2dSystem
import (
	"github.com/ByteArena/box2d"
	"github.com/EngoEngine/ecs"
	"github.com/EngoEngine/engo"
	"github.com/EngoEngine/engo/common"
)
type CollisionStartMessage struct {
	Contact box2d.B2ContactInterface
}
func (CollisionStartMessage) Type() string { return "CollisionStartMessage" }
type CollisionEndMessage struct {
	Contact box2d.B2ContactInterface
}
func (CollisionEndMessage) Type() string { return "CollisionEndMessage" }
type PreSolveMessage struct {
	Contact     box2d.B2ContactInterface
	OldManifold box2d.B2Manifold
}
func (PreSolveMessage) Type() string { return "PreSolveMessage" }
type PostSolveMessage struct {
	Contact box2d.B2ContactInterface
	Impulse *box2d.B2ContactImpulse
}
func (PostSolveMessage) Type() string { return "PostSolveMessage" }
type collisionEntity struct {
	*ecs.BasicEntity
	*common.SpaceComponent
	*Box2dComponent
}
type CollisionSystem struct {
	entities []collisionEntity
}
func (c *CollisionSystem) New(w *ecs.World) {
	World.SetContactListener(c)
}
func (c *CollisionSystem) Add(basic *ecs.BasicEntity, space *common.SpaceComponent, box *Box2dComponent) {
	box.Body.SetUserData(basic.ID())
	c.entities = append(c.entities, collisionEntity{basic, space, box})
}
func (c *CollisionSystem) AddByInterface(o Collisionable) {
	c.Add(o.GetBasicEntity(), o.GetSpaceComponent(), o.GetBox2dComponent())
}
func (c *CollisionSystem) Remove(basic ecs.BasicEntity) {
	delete := -1
	for index, e := range c.entities {
		if e.BasicEntity.ID() == basic.ID() {
			delete = index
			break
		}
	}
	if delete >= 0 {
		c.entities = append(c.entities[:delete], c.entities[delete+1:]...)
	}
}
func (c *CollisionSystem) Update(dt float32) {}