vRp.CD2g_test/utils/aoi/2d_events.go

38 lines
1.7 KiB
Go

package aoi
import "github.com/kercylan98/minotaur/utils/generic"
type (
EntityJoinVisionEventHandle[EID generic.Basic, PosType generic.SignedNumber, E TwoDimensionalEntity[EID, PosType]] func(entity, target E)
EntityLeaveVisionEventHandle[EID generic.Basic, PosType generic.SignedNumber, E TwoDimensionalEntity[EID, PosType]] func(entity, target E)
)
type event[EID generic.Basic, PosType generic.SignedNumber, E TwoDimensionalEntity[EID, PosType]] struct {
entityJoinVisionEventHandles []EntityJoinVisionEventHandle[EID, PosType, E]
entityLeaveVisionEventHandles []EntityLeaveVisionEventHandle[EID, PosType, E]
}
// RegEntityJoinVisionEvent 在新对象进入视野时将会立刻执行被注册的事件处理函数
func (slf *event[EID, PosType, E]) RegEntityJoinVisionEvent(handle EntityJoinVisionEventHandle[EID, PosType, E]) {
slf.entityJoinVisionEventHandles = append(slf.entityJoinVisionEventHandles, handle)
}
// OnEntityJoinVisionEvent 在新对象进入视野时将会立刻执行被注册的事件处理函数
func (slf *event[EID, PosType, E]) OnEntityJoinVisionEvent(entity, target E) {
for _, handle := range slf.entityJoinVisionEventHandles {
handle(entity, target)
}
}
// RegEntityLeaveVisionEvent 在新对象离开视野时将会立刻执行被注册的事件处理函数
func (slf *event[EID, PosType, E]) RegEntityLeaveVisionEvent(handle EntityLeaveVisionEventHandle[EID, PosType, E]) {
slf.entityLeaveVisionEventHandles = append(slf.entityLeaveVisionEventHandles, handle)
}
// OnEntityLeaveVisionEvent 在新对象离开视野时将会立刻执行被注册的事件处理函数
func (slf *event[EID, PosType, E]) OnEntityLeaveVisionEvent(entity, target E) {
for _, handle := range slf.entityLeaveVisionEventHandles {
handle(entity, target)
}
}