39 lines
642 B
Go
39 lines
642 B
Go
|
package game
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type GameContext struct {
|
||
|
ctx context.Context
|
||
|
cancel context.CancelFunc
|
||
|
wg sync.WaitGroup
|
||
|
assetsLock sync.RWMutex
|
||
|
}
|
||
|
|
||
|
func NewGameContext() *GameContext {
|
||
|
ctx, cancel := context.WithCancel(context.Background())
|
||
|
return &GameContext{
|
||
|
ctx: ctx,
|
||
|
cancel: cancel,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (gc *GameContext) Shutdown() {
|
||
|
gc.cancel()
|
||
|
gc.wg.Wait()
|
||
|
}
|
||
|
|
||
|
func (gc *GameContext) LoadAssets(fn func() error) error {
|
||
|
gc.assetsLock.Lock()
|
||
|
defer gc.assetsLock.Unlock()
|
||
|
return fn()
|
||
|
}
|
||
|
|
||
|
func (gc *GameContext) UnloadAssets(fn func()) {
|
||
|
gc.assetsLock.Lock()
|
||
|
defer gc.assetsLock.Unlock()
|
||
|
fn()
|
||
|
}
|