36 lines
668 B
Go
36 lines
668 B
Go
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{}
|
|
}
|