package main import ( "git.solsynth.dev/highland/codingland/pkg/internal/common" "git.solsynth.dev/highland/codingland/pkg/internal/entities" "log" "runtime" "github.com/veandco/go-sdl2/sdl" ) const ( windowWidth = 640 windowHeight = 480 playerSize = 50 ) 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() player := &entities.Player{ Position: common.Vector2D{X: windowWidth / 2, Y: windowHeight / 2}, Size: common.Vector2D{X: playerSize, Y: playerSize}, } running := true for running { for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: running = false } } keys := sdl.GetKeyboardState() if keys[sdl.SCANCODE_UP] == 1 || keys[sdl.SCANCODE_W] == 1 { player.Move(0, -1) } if keys[sdl.SCANCODE_DOWN] == 1 || keys[sdl.SCANCODE_S] == 1 { player.Move(0, 1) } if keys[sdl.SCANCODE_LEFT] == 1 || keys[sdl.SCANCODE_A] == 1 { player.Move(-1, 0) } if keys[sdl.SCANCODE_RIGHT] == 1 || keys[sdl.SCANCODE_D] == 1 { player.Move(1, 0) } player.Move(0, 0) renderer.SetDrawColor(0, 0, 0, 255) renderer.Clear() player.Draw(renderer) renderer.Present() } }