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() )