From 8d1ae9867176dd763e34ed29862bcad160ea097e Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Tue, 25 Apr 2023 17:24:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E4=B8=96=E7=95=8C=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/builtin/world.go | 33 +++++++++++++++++++++++++++++++++ game/world.go | 12 ++++++++++++ 2 files changed, 45 insertions(+) diff --git a/game/builtin/world.go b/game/builtin/world.go index 5a66543..e8cc3df 100644 --- a/game/builtin/world.go +++ b/game/builtin/world.go @@ -34,6 +34,9 @@ type World[PlayerID comparable] struct { actorGeneratedEventHandles []game.ActorGeneratedEventHandle actorAnnihilationEventHandles []game.ActorAnnihilationEventHandle actorOwnerChangeEventHandles []game.ActorOwnerChangeEventHandle[PlayerID] + worldGeneratedEventHandles []game.WorldGeneratedEventHandle[PlayerID] + worldResetEventHandles []game.WorldResetEventHandle[PlayerID] + worldReleasedEventHandles []game.WorldReleaseEventHandle[PlayerID] released atomic.Bool } @@ -186,6 +189,36 @@ 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]) { + slf.worldResetEventHandles = append(slf.worldResetEventHandles, handle) +} + +func (slf *World[PlayerID]) OnWorldResetEvent() { + for _, handle := range slf.worldResetEventHandles { + handle(slf) + } +} + +func (slf *World[PlayerID]) RegWorldReleaseEvent(handle game.WorldReleaseEventHandle[PlayerID]) { + slf.worldReleasedEventHandles = append(slf.worldReleasedEventHandles, handle) +} + +func (slf *World[PlayerID]) OnWorldReleaseEvent() { + for _, handle := range slf.worldReleasedEventHandles { + handle(slf) + } +} + func (slf *World[PlayerID]) RegPlayerJoinWorldEvent(handle game.PlayerJoinWorldEventHandle[PlayerID]) { slf.playerJoinWorldEventHandles = append(slf.playerJoinWorldEventHandles, handle) } diff --git a/game/world.go b/game/world.go index 280fadf..7489ff9 100644 --- a/game/world.go +++ b/game/world.go @@ -44,6 +44,15 @@ type World[PlayerID comparable] interface { // Release 释放世界资源,释放后世界将不可用 Release() + // RegWorldGeneratedEvent 世界创建完成时将立即执行被注册的事件处理函数 + RegWorldGeneratedEvent(handle WorldGeneratedEventHandle[PlayerID]) + OnWorldGeneratedEvent() + // RegWorldResetEvent 世界被重置后将立即执行被注册的事件处理函数 + RegWorldResetEvent(handle WorldResetEventHandle[PlayerID]) + OnWorldResetEvent() + // RegWorldReleaseEvent 直接被释放前将立即执行被注册的事件处理函数,此刻世界仍然可用 + RegWorldReleaseEvent(handle WorldReleaseEventHandle[PlayerID]) + OnWorldReleaseEvent() // RegPlayerJoinWorldEvent 玩家进入世界时将立即执行被注册的事件处理函数 RegPlayerJoinWorldEvent(handle PlayerJoinWorldEventHandle[PlayerID]) OnPlayerJoinWorldEvent(player Player[PlayerID]) @@ -62,6 +71,9 @@ type World[PlayerID comparable] interface { } type ( + WorldGeneratedEventHandle[ID comparable] func(world World[ID]) + WorldResetEventHandle[ID comparable] func(world World[ID]) + WorldReleaseEventHandle[ID comparable] func(world World[ID]) PlayerJoinWorldEventHandle[ID comparable] func(player Player[ID]) PlayerLeaveWorldEventHandle[ID comparable] func(player Player[ID]) ActorGeneratedEventHandle func(actor Actor)