Initial commit
This commit is contained in:
commit
f26c478727
18 changed files with 621 additions and 0 deletions
97
main.go
Normal file
97
main.go
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
stdmath "math"
|
||||
"time"
|
||||
|
||||
"github.com/pnx/go-raytracer/graphics"
|
||||
"github.com/pnx/go-raytracer/math"
|
||||
"github.com/pnx/go-raytracer/render"
|
||||
"github.com/pnx/go-raytracer/world"
|
||||
"github.com/veandco/go-sdl2/sdl"
|
||||
)
|
||||
|
||||
var (
|
||||
gfxContext *graphics.Context
|
||||
player Player
|
||||
level *world.Level
|
||||
startOfFrame time.Time
|
||||
)
|
||||
|
||||
func loadLevel(newLevel *world.Level) {
|
||||
level = newLevel
|
||||
|
||||
// Set player start position
|
||||
start := level.PlayerStart()
|
||||
|
||||
player.Position = math.Position{
|
||||
X: (float64(start.X) + 0.5) * tileSize,
|
||||
Y: (float64(start.Y) + 0.5) * tileSize,
|
||||
}
|
||||
}
|
||||
|
||||
func update() bool {
|
||||
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
|
||||
switch ev := event.(type) {
|
||||
case *sdl.QuitEvent:
|
||||
return true
|
||||
case *sdl.KeyboardEvent:
|
||||
if ev.Type == sdl.KEYDOWN {
|
||||
switch ev.Keysym.Sym {
|
||||
case sdl.K_ESCAPE:
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
keys := sdl.GetKeyboardState()
|
||||
|
||||
if keys[sdl.SCANCODE_UP] != 0 {
|
||||
player.MoveForward(level)
|
||||
}
|
||||
if keys[sdl.SCANCODE_DOWN] != 0 {
|
||||
player.MoveBackward(level)
|
||||
}
|
||||
if keys[sdl.SCANCODE_LEFT] != 0 {
|
||||
player.RotateLeft()
|
||||
}
|
||||
if keys[sdl.SCANCODE_RIGHT] != 0 {
|
||||
player.RotateRight()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func main() {
|
||||
var err error
|
||||
|
||||
gfxContext, err = graphics.Init("Go Raycaster", 1024, 768)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
player = Player{
|
||||
MoveSpd: 2,
|
||||
RotSpd: 0.05,
|
||||
}
|
||||
|
||||
loadLevel(&world.Level1)
|
||||
|
||||
for {
|
||||
startOfFrame := time.Now()
|
||||
if update() {
|
||||
break
|
||||
}
|
||||
|
||||
render.DrawScene(gfxContext, player.Transform, level, colorMap)
|
||||
render.DrawMiniMap(gfxContext, player.Transform, level)
|
||||
gfxContext.Sync()
|
||||
|
||||
elapsed := time.Since(startOfFrame)
|
||||
sdl.Delay(uint32(stdmath.Max(16-float64(elapsed.Milliseconds()), 1)))
|
||||
}
|
||||
|
||||
gfxContext.Exit()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue