drpanwe icon

Exit Game in Ebiten

drpanwe | PRO | 04/09/22 10:23:41 PM UTC (Edited) | 0 ⭐ | 601 👁️ | Never ⏰ | []
Go |

1.21 KB

|

None

|

0 👍

/

0 👎

package main
 
import (
    "errors"
    "github.com/hajimehoshi/ebiten/v2"
    "github.com/hajimehoshi/ebiten/v2/ebitenutil"
    "log"
)
 
var errRegularTermination = errors.New("regular termination")
 
type Game struct {
    exit bool
}
 
func (g *Game) Layout(width, height int) (int, int) {
    return width, height
}
 
func (g *Game) Update() error {
    if ok, exitGame := g.verifyExit(); ok {
        return exitGame
    }
 
    return nil
}
 
func (g *Game) Draw(screen *ebiten.Image) {
    g.checkExitstatus(screen)
}
 
func (g *Game) verifyExit() (bool, error) {
    if ebiten.IsKeyPressed(ebiten.KeyEscape) || ebiten.IsWindowBeingClosed() {
        g.exit = true
    }
 
    if g.exit {
        if ebiten.IsKeyPressed(ebiten.KeyY) {
            return true, errRegularTermination
        }
 
        if ebiten.IsKeyPressed(ebiten.KeyN) {
            g.exit = false
        }
    }
 
    return false, nil
}
 
func (g *Game) checkExitstatus(screen *ebiten.Image) {
    if g.exit {
        ebitenutil.DebugPrint(screen, "Do you really want to close this window? [y/n]")
 
        return
    }
}
 
 
func main() {
    ebiten.SetWindowClosingHandled(true)
    // nolint: exhaustivestruct
    if err := ebiten.RunGame(&Game{}); err != nil && !errors.Is(err, errRegularTermination) {
        log.Fatal(err)
    }
}
 

Comments