From 60694107c3b6c2e45c5759e727cb2d61d2891dd5 Mon Sep 17 00:00:00 2001 From: Luke Meyers Date: Sat, 8 Feb 2020 22:42:32 -0800 Subject: [PATCH] factor out renderLoop --- gfx/gfx.go | 8 ++++---- main.go | 60 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/gfx/gfx.go b/gfx/gfx.go index f618898..051cc22 100644 --- a/gfx/gfx.go +++ b/gfx/gfx.go @@ -28,12 +28,12 @@ type context struct { w *pixelgl.Window } -type spriteBank struct { +type SpriteBank struct { racer pixel.Picture obstacle pixel.Picture } -func NewSpriteBank() (*spriteBank, error) { +func NewSpriteBank() (*SpriteBank, error) { racer, err := loadPicture("shuttle.png") if err != nil { return nil, fmt.Errorf("load picture: %w", err) @@ -44,7 +44,7 @@ func NewSpriteBank() (*spriteBank, error) { return nil, fmt.Errorf("load picture: %w", err) } - return &spriteBank{ + return &SpriteBank{ racer: racer, obstacle: ob, }, nil @@ -63,7 +63,7 @@ func loadPicture(path string) (pixel.Picture, error) { return pixel.PictureDataFromImage(img), nil } -func Render(rs RenderState, sOld, sNew game.State, w *pixelgl.Window, sb spriteBank) RenderState { +func Render(rs RenderState, sOld, sNew game.State, w *pixelgl.Window, sb SpriteBank) RenderState { bgBatch := pixel.NewBatch(new(pixel.TrianglesData), nil) renderBackground(w, bgBatch) diff --git a/main.go b/main.go index 1320a36..3b6a54d 100644 --- a/main.go +++ b/main.go @@ -44,35 +44,7 @@ func run() error { stateCA := make(chan game.State) stateCB := make(chan game.State) - go func(s game.State, sOld game.State, stateC <-chan game.State) { - var ( - frames = 0 - second = time.Tick(time.Second) - ) - - for !w.Closed() { - if rs.Frame == rs.Frames { - select { - case ss := <-stateCA: - sOld = s - s = ss - rs.Frame = 0 - default: - } - } - - rs = gfx.Render(rs, sOld, s, w, *sb) - w.Update() - frames++ - - select { - case <-second: - w.SetTitle(fmt.Sprintf("%s | FPS: %d", cfg.Title, frames)) - frames = 0 - default: - } - } - }(s, sOld, stateCA) + go renderLoop(w, rs, s, sOld, stateCA, sb) for !w.Closed() { switch { @@ -109,3 +81,33 @@ func pixelRun() { func main() { pixelgl.Run(pixelRun) } + +func renderLoop(w *pixelgl.Window, rs gfx.RenderState, s game.State, sOld game.State, stateC <-chan game.State, sb *gfx.SpriteBank) { + var ( + frames = 0 + second = time.Tick(time.Second) + ) + + for !w.Closed() { + if rs.Frame == rs.Frames { + select { + case ss := <-stateC: + sOld = s + s = ss + rs.Frame = 0 + default: + } + } + + rs = gfx.Render(rs, sOld, s, w, *sb) + w.Update() + frames++ + + select { + case <-second: + w.SetTitle(fmt.Sprintf("%s | FPS: %d", "Relay", frames)) + frames = 0 + default: + } + } +}