游戏世界事件完善

This commit is contained in:
kercylan98 2023-04-25 17:28:37 +08:00
parent 8d1ae98671
commit 0d744f69fa
2 changed files with 2 additions and 15 deletions

View File

@ -34,7 +34,6 @@ type World[PlayerID comparable] struct {
actorGeneratedEventHandles []game.ActorGeneratedEventHandle actorGeneratedEventHandles []game.ActorGeneratedEventHandle
actorAnnihilationEventHandles []game.ActorAnnihilationEventHandle actorAnnihilationEventHandles []game.ActorAnnihilationEventHandle
actorOwnerChangeEventHandles []game.ActorOwnerChangeEventHandle[PlayerID] actorOwnerChangeEventHandles []game.ActorOwnerChangeEventHandle[PlayerID]
worldGeneratedEventHandles []game.WorldGeneratedEventHandle[PlayerID]
worldResetEventHandles []game.WorldResetEventHandle[PlayerID] worldResetEventHandles []game.WorldResetEventHandle[PlayerID]
worldReleasedEventHandles []game.WorldReleaseEventHandle[PlayerID] worldReleasedEventHandles []game.WorldReleaseEventHandle[PlayerID]
@ -171,10 +170,12 @@ func (slf *World[PlayerID]) Reset() {
slf.owners.Clear() slf.owners.Clear()
slf.actors.Clear() slf.actors.Clear()
slf.actorGuid.Store(0) slf.actorGuid.Store(0)
slf.OnWorldResetEvent()
} }
func (slf *World[PlayerID]) Release() { func (slf *World[PlayerID]) Release() {
if !slf.released.Swap(true) { if !slf.released.Swap(true) {
slf.OnWorldReleaseEvent()
slf.Reset() slf.Reset()
slf.players = nil slf.players = nil
slf.playerActors = nil slf.playerActors = nil
@ -189,16 +190,6 @@ func (slf *World[PlayerID]) Release() {
} }
} }
func (slf *World[PlayerID]) RegWorldGeneratedEvent(handle game.WorldGeneratedEventHandle[PlayerID]) {
slf.worldGeneratedEventHandles = append(slf.worldGeneratedEventHandles, handle)
}
func (slf *World[PlayerID]) OnWorldGeneratedEvent() {
for _, handle := range slf.worldGeneratedEventHandles {
handle(slf)
}
}
func (slf *World[PlayerID]) RegWorldResetEvent(handle game.WorldResetEventHandle[PlayerID]) { func (slf *World[PlayerID]) RegWorldResetEvent(handle game.WorldResetEventHandle[PlayerID]) {
slf.worldResetEventHandles = append(slf.worldResetEventHandles, handle) slf.worldResetEventHandles = append(slf.worldResetEventHandles, handle)
} }

View File

@ -44,9 +44,6 @@ type World[PlayerID comparable] interface {
// Release 释放世界资源,释放后世界将不可用 // Release 释放世界资源,释放后世界将不可用
Release() Release()
// RegWorldGeneratedEvent 世界创建完成时将立即执行被注册的事件处理函数
RegWorldGeneratedEvent(handle WorldGeneratedEventHandle[PlayerID])
OnWorldGeneratedEvent()
// RegWorldResetEvent 世界被重置后将立即执行被注册的事件处理函数 // RegWorldResetEvent 世界被重置后将立即执行被注册的事件处理函数
RegWorldResetEvent(handle WorldResetEventHandle[PlayerID]) RegWorldResetEvent(handle WorldResetEventHandle[PlayerID])
OnWorldResetEvent() OnWorldResetEvent()
@ -71,7 +68,6 @@ type World[PlayerID comparable] interface {
} }
type ( type (
WorldGeneratedEventHandle[ID comparable] func(world World[ID])
WorldResetEventHandle[ID comparable] func(world World[ID]) WorldResetEventHandle[ID comparable] func(world World[ID])
WorldReleaseEventHandle[ID comparable] func(world World[ID]) WorldReleaseEventHandle[ID comparable] func(world World[ID])
PlayerJoinWorldEventHandle[ID comparable] func(player Player[ID]) PlayerJoinWorldEventHandle[ID comparable] func(player Player[ID])