further clear screen debugging

This commit is contained in:
2024-05-31 21:20:13 +02:00
parent 320c666af9
commit 8e821cbdc5
4 changed files with 45 additions and 20 deletions

14
TODO.md
View File

@@ -1,5 +1,11 @@
- add all other options like size etc - add all other options like size etc
- clear screen disabled leads to zoom artifacts when zooming out and
canvas is smaller than screen workaround: using screen copy in - Clear screen problem:
game.Screen. Play copies screen to it and Menu draws it to screen - it works when hitting the K key, immediately
before drawing the menus - its being turned off correctly when entering menu and on when leaving it
- but regardless of the setting, after turning it off, the engine
seems to run a couple of ticks with the old setting before switching
scenes
- looks like a race condition
- obviously with K there are more loops before actually switching
scenes, which doesn't happen with ESC

View File

@@ -31,6 +31,7 @@ func NewGame(config *Config, startscene SceneName) *Game {
ebiten.SetWindowSize(game.ScreenWidth, game.ScreenHeight) ebiten.SetWindowSize(game.ScreenWidth, game.ScreenHeight)
ebiten.SetWindowTitle("golsky - conway's game of life") ebiten.SetWindowTitle("golsky - conway's game of life")
ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled) ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
ebiten.SetScreenClearedEveryFrame(true)
game.Screen = ebiten.NewImage(game.ScreenWidth, game.ScreenHeight) game.Screen = ebiten.NewImage(game.ScreenWidth, game.ScreenHeight)
return game return game
@@ -50,6 +51,7 @@ func (game *Game) Update() error {
scene := game.GetCurrentScene() scene := game.GetCurrentScene()
scene.Update() scene.Update()
// FIXME: should work, but doesn't
//ebiten.SetScreenClearedEveryFrame(scene.Clearscreen()) //ebiten.SetScreenClearedEveryFrame(scene.Clearscreen())
next := scene.GetNext() next := scene.GetNext()
@@ -62,11 +64,12 @@ func (game *Game) Update() error {
game.CurrentScene = next game.CurrentScene = next
} }
//fmt.Printf("Clear Screen: %t\n", ebiten.IsScreenClearedEveryFrame())
return nil return nil
} }
func (game *Game) Draw(screen *ebiten.Image) { func (game *Game) Draw(screen *ebiten.Image) {
scene := game.GetCurrentScene() scene := game.GetCurrentScene()
ebiten.SetScreenClearedEveryFrame(scene.Clearscreen())
scene.Draw(screen) scene.Draw(screen)
} }

View File

@@ -54,7 +54,7 @@ func (scene *SceneMenu) Update() error {
scene.Ui.Update() scene.Ui.Update()
if inpututil.IsKeyJustPressed(ebiten.KeyEscape) || inpututil.IsKeyJustPressed(ebiten.KeyQ) { if inpututil.IsKeyJustPressed(ebiten.KeyEscape) || inpututil.IsKeyJustPressed(ebiten.KeyQ) {
scene.SetNext(Play) scene.Leave()
} }
return nil return nil
@@ -62,15 +62,20 @@ func (scene *SceneMenu) Update() error {
} }
func (scene *SceneMenu) Draw(screen *ebiten.Image) { func (scene *SceneMenu) Draw(screen *ebiten.Image) {
op := &ebiten.DrawImageOptions{} //op := &ebiten.DrawImageOptions{}
op.GeoM.Reset() // op.GeoM.Reset()
op.GeoM.Translate(0, 0) // op.GeoM.Translate(0, 0)
screen.DrawImage(scene.Game.Screen, op) // screen.DrawImage(scene.Game.Screen, op)
scene.Ui.Draw(screen) scene.Ui.Draw(screen)
} }
func (scene *SceneMenu) Leave() {
ebiten.SetScreenClearedEveryFrame(true)
scene.SetNext(Play)
}
func (scene *SceneMenu) Init() { func (scene *SceneMenu) Init() {
rowContainer := NewRowContainer("Main Menu") rowContainer := NewRowContainer("Main Menu")
@@ -78,20 +83,20 @@ func (scene *SceneMenu) Init() {
func(args *widget.ButtonClickedEventArgs) { func(args *widget.ButtonClickedEventArgs) {
scene.Config.Empty = true scene.Config.Empty = true
scene.Config.Restart = true scene.Config.Restart = true
scene.SetNext(Play) scene.Leave()
}) })
random := NewMenuButton("Start with random patterns", random := NewMenuButton("Start with random patterns",
func(args *widget.ButtonClickedEventArgs) { func(args *widget.ButtonClickedEventArgs) {
scene.Config.Restart = true scene.Config.Restart = true
scene.SetNext(Play) scene.Leave()
}) })
copy := NewMenuButton("Save Copy as RLE", copy := NewMenuButton("Save Copy as RLE",
func(args *widget.ButtonClickedEventArgs) { func(args *widget.ButtonClickedEventArgs) {
scene.Config.Markmode = true scene.Config.Markmode = true
scene.Config.Paused = true scene.Config.Paused = true
scene.SetNext(Play) scene.Leave()
}) })
options := NewMenuButton("Options", options := NewMenuButton("Options",
@@ -105,7 +110,7 @@ func (scene *SceneMenu) Init() {
cancel := NewMenuButton("Close Window", cancel := NewMenuButton("Close Window",
func(args *widget.ButtonClickedEventArgs) { func(args *widget.ButtonClickedEventArgs) {
scene.SetNext(Play) scene.Leave()
}) })
quit := NewMenuButton("Exit Golsky", quit := NewMenuButton("Exit Golsky",

View File

@@ -24,6 +24,8 @@ type ScenePlay struct {
Next SceneName Next SceneName
Whoami SceneName Whoami SceneName
Clear bool
Grids []*Grid // 2 grids: one current, one next Grids []*Grid // 2 grids: one current, one next
History *Grid // holds state of past dead cells for evolution traces History *Grid // holds state of past dead cells for evolution traces
Index int // points to current grid Index int // points to current grid
@@ -156,16 +158,25 @@ func (scene *ScenePlay) CheckInput() {
os.Exit(0) os.Exit(0)
} }
// FIXME: works from here
if inpututil.IsKeyJustPressed(ebiten.KeyK) {
scene.Clear = !scene.Clear
fmt.Printf("Clear: %t\n", scene.Clear)
ebiten.SetScreenClearedEveryFrame(scene.Clear)
}
// FIXME: and this does have no effect. WHY?!?!?
if inpututil.IsKeyJustPressed(ebiten.KeyEscape) {
ebiten.SetScreenClearedEveryFrame(false)
scene.SetNext(Menu)
}
if inpututil.IsKeyJustPressed(ebiten.KeyC) { if inpututil.IsKeyJustPressed(ebiten.KeyC) {
fmt.Println("mark mode on") fmt.Println("mark mode on")
scene.Config.Markmode = true scene.Config.Markmode = true
scene.Config.Paused = true scene.Config.Paused = true
} }
if inpututil.IsKeyJustPressed(ebiten.KeyEscape) {
scene.SetNext(Menu)
}
if scene.Config.Markmode { if scene.Config.Markmode {
return return
} }
@@ -483,9 +494,9 @@ func (scene *ScenePlay) DrawDebug(screen *ebiten.Image) {
} }
debug := fmt.Sprintf( debug := fmt.Sprintf(
"FPS: %0.2f, TPG: %d, Mem: %0.2fMB, Gen: %d, Scale: %.02f, Z: %d %s", "FPS: %0.2f, TPG: %d, Mem: %0.2fMB, Gen: %d, Scale: %.02f, Z: %d, Clear: %t %s",
ebiten.ActualTPS(), scene.TPG, GetMem(), scene.Generations, ebiten.ActualTPS(), scene.TPG, GetMem(), scene.Generations,
scene.Game.Scale, scene.Camera.ZoomFactor, paused) scene.Game.Scale, scene.Camera.ZoomFactor, ebiten.IsScreenClearedEveryFrame(), paused)
FontRenderer.Renderer.SetSizePx(10 + int(scene.Game.Scale*10)) FontRenderer.Renderer.SetSizePx(10 + int(scene.Game.Scale*10))
FontRenderer.Renderer.SetTarget(screen) FontRenderer.Renderer.SetTarget(screen)