package main import ( "git.solsynth.dev/highland/codingland/pkg/internal/entities" "git.solsynth.dev/highland/codingland/pkg/internal/land" "git.solsynth.dev/highland/codingland/pkg/internal/tiles" "log" "runtime" "time" "github.com/veandco/go-sdl2/sdl" ) const ( windowWidth = 720 windowHeight = 480 ) func init() { runtime.LockOSThread() } func main() { if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { log.Fatalf("Failed to initialize SDL: %s", err) } defer sdl.Quit() window, err := sdl.CreateWindow("CodingLand", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, windowWidth, windowHeight, sdl.WINDOW_SHOWN) if err != nil { log.Fatalf("Failed to create window: %s", err) } defer window.Destroy() renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED|sdl.RENDERER_PRESENTVSYNC) if err != nil { log.Fatalf("Failed to create renderer: %s", err) } defer renderer.Destroy() root := land.NewRootObject() root.AddChild(&entities.Player{ Position: land.Vector2D{X: windowWidth/2 - 25, Y: windowHeight/2 - 25}, Size: land.Vector2D{X: 50, Y: 50}, }) root.AddChild(&tiles.Tile{ Position: land.Vector2D{X: 25, Y: 25}, Size: land.Vector2D{X: 50, Y: 50}, }) // 10ms delay use be 100tps average go root.RunEventLoop(10 * time.Millisecond) running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: running = false } } root.Draw(renderer) renderer.Present() } }