package doodle import ( "git.kirsle.net/SketchyMaze/doodle/pkg/gamepad" "git.kirsle.net/SketchyMaze/doodle/pkg/log" "git.kirsle.net/SketchyMaze/doodle/pkg/native" "git.kirsle.net/SketchyMaze/doodle/pkg/scripting/exceptions" "git.kirsle.net/go/render/event" ) // Scene is an abstraction for a game mode in Doodle. The app points to one // scene at a time and that scene has control over the main loop, and its own // state information. type Scene interface { Name() string Setup(*Doodle) error Destroy() error // Loop should update the scene's state but not draw anything. Loop(*Doodle, *event.State) error // Draw should use the scene's state to figure out what pixels need // to draw to the screen. Draw(*Doodle) error } // Goto a scene. First it unloads the current scene. func (d *Doodle) Goto(scene Scene) error { // Inform the gamepad controller what scene. gamepad.SceneName = scene.Name() // Clear any debug labels. customDebugLabels = []debugLabel{} // Teardown existing scene. if d.Scene != nil { d.Scene.Destroy() } // Teardown exceptions modal (singleton windows so it can clean up). exceptions.Teardown() // Flush all SDL2 textures between scenes. native.FreeTextures(d.Engine) log.Info("Goto Scene: %s", scene.Name()) d.Scene = scene return d.Scene.Setup(d) }