world.go
func (w *World) AddSystemInterface(sys SystemAddByInterfacer, in interface{}, ex interface{}) {
	w.AddSystem(sys)

	if w.sysIn == nil {
		w.sysIn = make(map[reflect.Type]reflect.Type)
	}

	w.sysIn[reflect.TypeOf(sys)] = reflect.TypeOf(in).Elem()

	if ex == nil {
		return
	}

	if w.sysEx == nil {
		w.sysEx = make(map[reflect.Type]reflect.Type)
	}

	w.sysEx[reflect.TypeOf(sys)] = reflect.TypeOf(ex).Elem()
}
func (w *World) AddSystemInterface(sys SystemAddByInterfacer, in interface{}, ex interface{}) {
	w.AddSystem(sys)

	if w.sysIn == nil {
		w.sysIn = make(map[reflect.Type]reflect.Type)
	}

	w.sysIn[reflect.TypeOf(sys)] = reflect.TypeOf(in).Elem()

	if ex == nil {
		return
	}

	if w.sysEx == nil {
		w.sysEx = make(map[reflect.Type]reflect.Type)
	}

	w.sysEx[reflect.TypeOf(sys)] = reflect.TypeOf(ex).Elem()
}
// AddSystemInterface adds a system to the world, but also adds a filter that allows
// automatic adding of entities that match the provided in interface, and excludes any
// that match the provided ex interface, even if they also match in. in and ex must be
// pointers to the interface or else this panics.