factor out renderLoop
This commit is contained in:
parent
f29c115db6
commit
60694107c3
|
@ -28,12 +28,12 @@ type context struct {
|
||||||
w *pixelgl.Window
|
w *pixelgl.Window
|
||||||
}
|
}
|
||||||
|
|
||||||
type spriteBank struct {
|
type SpriteBank struct {
|
||||||
racer pixel.Picture
|
racer pixel.Picture
|
||||||
obstacle pixel.Picture
|
obstacle pixel.Picture
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSpriteBank() (*spriteBank, error) {
|
func NewSpriteBank() (*SpriteBank, error) {
|
||||||
racer, err := loadPicture("shuttle.png")
|
racer, err := loadPicture("shuttle.png")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("load picture: %w", err)
|
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 nil, fmt.Errorf("load picture: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &spriteBank{
|
return &SpriteBank{
|
||||||
racer: racer,
|
racer: racer,
|
||||||
obstacle: ob,
|
obstacle: ob,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -63,7 +63,7 @@ func loadPicture(path string) (pixel.Picture, error) {
|
||||||
return pixel.PictureDataFromImage(img), nil
|
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)
|
bgBatch := pixel.NewBatch(new(pixel.TrianglesData), nil)
|
||||||
renderBackground(w, bgBatch)
|
renderBackground(w, bgBatch)
|
||||||
|
|
||||||
|
|
60
main.go
60
main.go
|
@ -44,35 +44,7 @@ func run() error {
|
||||||
stateCA := make(chan game.State)
|
stateCA := make(chan game.State)
|
||||||
stateCB := make(chan game.State)
|
stateCB := make(chan game.State)
|
||||||
|
|
||||||
go func(s game.State, sOld game.State, stateC <-chan game.State) {
|
go renderLoop(w, rs, s, sOld, stateCA, sb)
|
||||||
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)
|
|
||||||
|
|
||||||
for !w.Closed() {
|
for !w.Closed() {
|
||||||
switch {
|
switch {
|
||||||
|
@ -109,3 +81,33 @@ func pixelRun() {
|
||||||
func main() {
|
func main() {
|
||||||
pixelgl.Run(pixelRun)
|
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:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue