drpanwe

Exit Game in Ebiten

Apr 9th, 2022 (edited)
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.21 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "errors"
  5.     "github.com/hajimehoshi/ebiten/v2"
  6.     "github.com/hajimehoshi/ebiten/v2/ebitenutil"
  7.     "log"
  8. )
  9.  
  10. var errRegularTermination = errors.New("regular termination")
  11.  
  12. type Game struct {
  13.     exit bool
  14. }
  15.  
  16. func (g *Game) Layout(width, height int) (int, int) {
  17.     return width, height
  18. }
  19.  
  20. func (g *Game) Update() error {
  21.     if ok, exitGame := g.verifyExit(); ok {
  22.         return exitGame
  23.     }
  24.  
  25.     return nil
  26. }
  27.  
  28. func (g *Game) Draw(screen *ebiten.Image) {
  29.     g.checkExitstatus(screen)
  30. }
  31.  
  32. func (g *Game) verifyExit() (bool, error) {
  33.     if ebiten.IsKeyPressed(ebiten.KeyEscape) || ebiten.IsWindowBeingClosed() {
  34.         g.exit = true
  35.     }
  36.  
  37.     if g.exit {
  38.         if ebiten.IsKeyPressed(ebiten.KeyY) {
  39.             return true, errRegularTermination
  40.         }
  41.  
  42.         if ebiten.IsKeyPressed(ebiten.KeyN) {
  43.             g.exit = false
  44.         }
  45.     }
  46.  
  47.     return false, nil
  48. }
  49.  
  50. func (g *Game) checkExitstatus(screen *ebiten.Image) {
  51.     if g.exit {
  52.         ebitenutil.DebugPrint(screen, "Do you really want to close this window? [y/n]")
  53.  
  54.         return
  55.     }
  56. }
  57.  
  58.  
  59. func main() {
  60.     ebiten.SetWindowClosingHandled(true)
  61.     // nolint: exhaustivestruct
  62.     if err := ebiten.RunGame(&Game{}); err != nil && !errors.Is(err, errRegularTermination) {
  63.         log.Fatal(err)
  64.     }
  65. }
  66.  
Add Comment
Please, Sign In to add comment