You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.4 KiB

package main
import (
"github.com/veandco/go-sdl2/sdl"
"log"
"time"
)
func gameLoop(pixels []byte, player1, player2 paddle, ball ball, renderer *sdl.Renderer, tex *sdl.Texture, keyState []uint8) {
var frameStart time.Time
var elapsedTime float32
for {
frameStart = time.Now()
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch event.(type) {
case *sdl.QuitEvent:
return
}
}
if err := renderer.Clear(); err != nil {
log.Fatal(err)
}
if state == play {
if player1.score == 5 || player2.score == 5 {
state = start
}
player1.update(keyState, elapsedTime)
player2.aiUpdate(&ball, elapsedTime)
ball.update(&player1, &player2, elapsedTime)
} else if state == start {
if keyState[sdl.SCANCODE_SPACE] != 0 {
player1.score = 0
player2.score = 0
resetBall(&ball)
state = play
}
} else if state == pause {
if keyState[sdl.SCANCODE_SPACE] != 0 {
resetBall(&ball)
state = play
}
}
clearScreen(pixels)
player1.draw(pixels)
player2.draw(pixels)
ball.draw(pixels)
if err := tex.Update(nil, pixels, winWidth*4); err != nil {
log.Fatal(err)
}
if err := renderer.Copy(tex, nil, nil); err != nil {
log.Fatal(err)
}
renderer.Present()
elapsedTime = float32(time.Since(frameStart).Seconds())
if elapsedTime < 0.005 {
sdl.Delay(5 - uint32(elapsedTime / 1000))
elapsedTime = float32(time.Since(frameStart).Seconds())
}
}
}