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

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

View File

@ -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
}
}

View File

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