游戏基本元素释放逻辑优化

This commit is contained in:
kercylan98 2023-04-27 15:23:57 +08:00
parent 3274810144
commit a361dd85b2
3 changed files with 22 additions and 3 deletions

View File

@ -18,6 +18,7 @@ type Gameplay struct {
gameplayStartEventHandles []game.GameplayStartEventHandle gameplayStartEventHandles []game.GameplayStartEventHandle
gameplayTimeChangeEventHandles []game.GameplayTimeChangeEventHandle gameplayTimeChangeEventHandles []game.GameplayTimeChangeEventHandle
gameplayReleaseEventHandles []game.GameplayReleaseEventHandle
} }
func (slf *Gameplay) GameStart(handle func() error) error { func (slf *Gameplay) GameStart(handle func() error) error {
@ -42,6 +43,13 @@ func (slf *Gameplay) SetTimeOffset(offset time.Duration) {
slf.OnGameplayTimeChangeEvent() slf.OnGameplayTimeChangeEvent()
} }
func (slf *Gameplay) Release() {
slf.OnGameplayReleaseEvent()
slf.gameplayStartEventHandles = nil
slf.gameplayTimeChangeEventHandles = nil
slf.gameplayReleaseEventHandles = nil
}
func (slf *Gameplay) RegGameplayStartEvent(handle game.GameplayStartEventHandle) { func (slf *Gameplay) RegGameplayStartEvent(handle game.GameplayStartEventHandle) {
slf.gameplayStartEventHandles = append(slf.gameplayStartEventHandles, handle) slf.gameplayStartEventHandles = append(slf.gameplayStartEventHandles, handle)
} }
@ -66,7 +74,12 @@ func (slf *Gameplay) OnGameplayTimeChangeEvent() {
} }
} }
func (slf *Gameplay) Release() { func (slf *Gameplay) RegGameplayReleaseEvent(handle game.GameplayReleaseEventHandle) {
slf.gameplayStartEventHandles = nil slf.gameplayReleaseEventHandles = append(slf.gameplayReleaseEventHandles, handle)
slf.gameplayTimeChangeEventHandles = nil }
func (slf *Gameplay) OnGameplayReleaseEvent() {
for _, handle := range slf.gameplayReleaseEventHandles {
handle()
}
} }

View File

@ -197,6 +197,8 @@ func (slf *World[PlayerID, Player]) Release() {
slf.actorGeneratedEventHandles = nil slf.actorGeneratedEventHandles = nil
slf.actorAnnihilationEventHandles = nil slf.actorAnnihilationEventHandles = nil
slf.actorOwnerChangeEventHandles = nil slf.actorOwnerChangeEventHandles = nil
slf.worldResetEventHandles = nil
slf.worldReleasedEventHandles = nil
} }
} }

View File

@ -24,9 +24,13 @@ type Gameplay interface {
// RegGameplayTimeChangeEvent 游戏玩法的时间被改变(非自然流逝)时将立刻执行被注册的事件处理函数 // RegGameplayTimeChangeEvent 游戏玩法的时间被改变(非自然流逝)时将立刻执行被注册的事件处理函数
RegGameplayTimeChangeEvent(handle GameplayTimeChangeEventHandle) RegGameplayTimeChangeEvent(handle GameplayTimeChangeEventHandle)
OnGameplayTimeChangeEvent() OnGameplayTimeChangeEvent()
// RegGameplayReleaseEvent 游戏玩法资源被释放前将立即执行被注册的事件处理函数
RegGameplayReleaseEvent(handle GameplayReleaseEventHandle)
OnGameplayReleaseEvent()
} }
type ( type (
GameplayStartEventHandle func(startTime time.Time) GameplayStartEventHandle func(startTime time.Time)
GameplayTimeChangeEventHandle func(current time.Time) GameplayTimeChangeEventHandle func(current time.Time)
GameplayReleaseEventHandle func()
) )