factor out renderLoop

This commit is contained in:
Luke Meyers 2020-02-08 22:42:32 -08:00
parent f29c115db6
commit 60694107c3
2 changed files with 35 additions and 33 deletions

View File

@ -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)

60
main.go
View File

@ -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:
}
}
}