package coreobjects type SceneManager struct { OverlayScene Scene SelectedScene Scene } type Scene interface { Create(SceneManager) Destroy() Update() Draw() } func InitSceneManager() SceneManager { return SceneManager{ OverlayScene: &OveralyScene{}, SelectedScene: nil, } } func (base *SceneManager) ChangeScene(newScene Scene) { if base.SelectedScene != nil { base.SelectedScene.Destroy() } base.SelectedScene = newScene base.SelectedScene.Create(*base) } func (base *SceneManager) Update() { if (base.SelectedScene != nil) { base.SelectedScene.Update() } if (base.OverlayScene != nil) { base.OverlayScene.Update() } } func (base *SceneManager) Draw() { if (base.SelectedScene != nil) { base.SelectedScene.Draw() } if (base.OverlayScene != nil) { base.OverlayScene.Draw() } }