From a361dd85b29f999487f4730b1c8aa302ea106217 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Thu, 27 Apr 2023 15:23:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=9F=BA=E6=9C=AC=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E9=87=8A=E6=94=BE=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/builtin/gameplay.go | 19 ++++++++++++++++--- game/builtin/world.go | 2 ++ game/gameplay.go | 4 ++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/game/builtin/gameplay.go b/game/builtin/gameplay.go index 14aabdc..a48eb52 100644 --- a/game/builtin/gameplay.go +++ b/game/builtin/gameplay.go @@ -18,6 +18,7 @@ type Gameplay struct { gameplayStartEventHandles []game.GameplayStartEventHandle gameplayTimeChangeEventHandles []game.GameplayTimeChangeEventHandle + gameplayReleaseEventHandles []game.GameplayReleaseEventHandle } func (slf *Gameplay) GameStart(handle func() error) error { @@ -42,6 +43,13 @@ func (slf *Gameplay) SetTimeOffset(offset time.Duration) { slf.OnGameplayTimeChangeEvent() } +func (slf *Gameplay) Release() { + slf.OnGameplayReleaseEvent() + slf.gameplayStartEventHandles = nil + slf.gameplayTimeChangeEventHandles = nil + slf.gameplayReleaseEventHandles = nil +} + func (slf *Gameplay) RegGameplayStartEvent(handle game.GameplayStartEventHandle) { slf.gameplayStartEventHandles = append(slf.gameplayStartEventHandles, handle) } @@ -66,7 +74,12 @@ func (slf *Gameplay) OnGameplayTimeChangeEvent() { } } -func (slf *Gameplay) Release() { - slf.gameplayStartEventHandles = nil - slf.gameplayTimeChangeEventHandles = nil +func (slf *Gameplay) RegGameplayReleaseEvent(handle game.GameplayReleaseEventHandle) { + slf.gameplayReleaseEventHandles = append(slf.gameplayReleaseEventHandles, handle) +} + +func (slf *Gameplay) OnGameplayReleaseEvent() { + for _, handle := range slf.gameplayReleaseEventHandles { + handle() + } } diff --git a/game/builtin/world.go b/game/builtin/world.go index 2a875b1..36e7b88 100644 --- a/game/builtin/world.go +++ b/game/builtin/world.go @@ -197,6 +197,8 @@ func (slf *World[PlayerID, Player]) Release() { slf.actorGeneratedEventHandles = nil slf.actorAnnihilationEventHandles = nil slf.actorOwnerChangeEventHandles = nil + slf.worldResetEventHandles = nil + slf.worldReleasedEventHandles = nil } } diff --git a/game/gameplay.go b/game/gameplay.go index 8adcdea..2535b8f 100644 --- a/game/gameplay.go +++ b/game/gameplay.go @@ -24,9 +24,13 @@ type Gameplay interface { // RegGameplayTimeChangeEvent 游戏玩法的时间被改变(非自然流逝)时将立刻执行被注册的事件处理函数 RegGameplayTimeChangeEvent(handle GameplayTimeChangeEventHandle) OnGameplayTimeChangeEvent() + // RegGameplayReleaseEvent 游戏玩法资源被释放前将立即执行被注册的事件处理函数 + RegGameplayReleaseEvent(handle GameplayReleaseEventHandle) + OnGameplayReleaseEvent() } type ( GameplayStartEventHandle func(startTime time.Time) GameplayTimeChangeEventHandle func(current time.Time) + GameplayReleaseEventHandle func() )