package collision type World struct { Entities []Collidable } func (w *World) AddEntity(e Collidable) { w.Entities = append(w.Entities, e) } func (w *World) RemoveEntity(e Collidable) { for i, entity := range w.Entities { if entity == e { w.Entities = append(w.Entities[:i], w.Entities[i+1:]...) } } } func (w *World) NotifyAboutCollisions() { for i, entity := range w.Entities { for j, other := range w.Entities { if i == j { continue } if entity.CollisionShape().Overlaps(other.CollisionShape()) { entity.HandleCollisionEvent(other) other.HandleCollisionEvent(entity) } } } } func NewWorld() *World { return &World{} }