func run() int { var window *sdl.Window var renderer *sdl.Renderer var points []sdl.Point var rect sdl.Rect var rects []sdl.Rect window, err := sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_SHOWN) if err != nil { fmt.Fprintf(os.Stderr, "Failed to create window: %s\n", err) return 1 } defer window.Destroy() renderer, err = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) if err != nil { fmt.Fprintf(os.Stderr, "Failed to create renderer: %s\n", err) return 2 } defer renderer.Destroy() renderer.Clear() renderer.SetDrawColor(255, 255, 255, 255) renderer.DrawPoint(150, 300) renderer.SetDrawColor(0, 0, 255, 255) renderer.DrawLine(0, 0, 200, 200) points = []sdl.Point{{0, 0}, {100, 300}, {100, 300}, {200, 0}} renderer.SetDrawColor(255, 255, 0, 255) renderer.DrawLines(points) rect = sdl.Rect{300, 0, 200, 200} renderer.SetDrawColor(255, 0, 0, 255) renderer.DrawRect(&rect) rects = []sdl.Rect{{400, 400, 100, 100}, {550, 350, 200, 200}} renderer.SetDrawColor(0, 255, 255, 255) renderer.DrawRects(rects) rect = sdl.Rect{250, 250, 200, 200} renderer.SetDrawColor(0, 255, 0, 255) renderer.FillRect(&rect) rects = []sdl.Rect{{500, 300, 100, 100}, {200, 300, 200, 200}} renderer.SetDrawColor(255, 0, 255, 255) renderer.FillRects(rects) renderer.Present() sdl.Delay(2000) return 0 }
func main() { var window *sdl.Window var renderer *sdl.Renderer var points []sdl.Point var rect sdl.Rect var rects []sdl.Rect window = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_SHOWN) if window == nil { fmt.Fprintf(os.Stderr, "Failed to create window: %s\n", sdl.GetError()) os.Exit(1) } renderer = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) if renderer == nil { fmt.Fprintf(os.Stderr, "Failed to create renderer: %s\n", sdl.GetError()) os.Exit(2) } renderer.SetDrawColor(255, 255, 255, 255) renderer.DrawPoint(150, 300) renderer.SetDrawColor(0, 0, 255, 255) renderer.DrawLine(0, 0, 200, 200) points = []sdl.Point{{0, 0}, {100, 300}, {100, 300}, {200, 0}} renderer.SetDrawColor(255, 255, 0, 255) renderer.DrawLines(points) rect = sdl.Rect{300, 0, 200, 200} renderer.SetDrawColor(255, 0, 0, 255) renderer.DrawRect(&rect) rects = []sdl.Rect{{400, 400, 100, 100}, {550, 350, 200, 200}} renderer.SetDrawColor(0, 255, 255, 255) renderer.DrawRects(rects) rect = sdl.Rect{250, 250, 200, 200} renderer.SetDrawColor(0, 255, 0, 255) renderer.FillRect(&rect) rects = []sdl.Rect{{500, 300, 100, 100}, {200, 300, 200, 200}} renderer.SetDrawColor(255, 0, 255, 255) renderer.FillRects(rects) renderer.Present() sdl.Delay(2000) renderer.Destroy() window.Destroy() }
func run(serverStr, name string) int { var window *sdl.Window var renderer *sdl.Renderer var running bool var event sdl.Event var inputState InputState url := "ws://" + serverStr origin := "http://" + serverStr ws, err := websocket.Dial(url, "", origin) if err != nil { fmt.Printf("%v\n", err) os.Exit(1) } window, err = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_SHOWN) if err != nil { fmt.Fprintf(os.Stderr, "Failed to create window: %s\n", err) return 1 } defer window.Destroy() renderer, err = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) if err != nil { fmt.Fprintf(os.Stderr, "Failed to create renderer: %s\n", err) return 2 } defer renderer.Destroy() renderer.Clear() websocket.Message.Send(ws, joinMessage(name)) running = true var data map[string]map[string][]map[string]interface{} decoder := msgpack.NewDecoder(ws) renderer.SetDrawColor(1, 1, 1, 255) renderer.Clear() for running { renderer.SetDrawColor(1, 1, 1, 255) renderer.Clear() newInputState := inputState for event = sdl.PollEvent(); event != nil; event = sdl.PollEvent() { switch event.(type) { case *sdl.QuitEvent: running = false case *sdl.KeyDownEvent: switch event.(*sdl.KeyDownEvent).Keysym.Sym { case sdl.K_ESCAPE: running = false case sdl.K_LEFT: newInputState.Left = true case sdl.K_RIGHT: newInputState.Right = true case sdl.K_UP: newInputState.Thrust = true } case *sdl.KeyUpEvent: switch event.(*sdl.KeyUpEvent).Keysym.Sym { case sdl.K_LEFT: newInputState.Left = false case sdl.K_RIGHT: newInputState.Right = false case sdl.K_UP: newInputState.Thrust = false } } } if !newInputState.IsSameAs(inputState) { websocket.Message.Send(ws, newInputState.Message()) inputState = newInputState } decoder.Decode(&data) for _, ship := range data["state"]["ships"] { colourhex, _ := hex.DecodeString(ship["colour"].(string)[1:7]) rot, _ := ship["rotation"].(float64) s := Ship{ Position: V2{float64(ship["x"].(int64)), float64(ship["y"].(int64))}, Size: 30, Rotation: rot, Doge: ship["doge"].(bool), } renderer.SetDrawColor(uint8(colourhex[0]), uint8(colourhex[1]), uint8(colourhex[2]), 255) renderer.DrawLines(s.Points()) } renderer.Present() } return 0 }
func run() int { var window *sdl.Window var renderer *sdl.Renderer var points []sdl.Point var rect sdl.Rect var rects []sdl.Rect var err error sdl.Do(func() { window, err = sdl.CreateWindow(WindowTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, WindowWidth, WindowHeight, sdl.WINDOW_SHOWN) }) if err != nil { fmt.Fprintf(os.Stderr, "Failed to create window: %s\n", err) return 1 } defer func() { sdl.Do(func() { window.Destroy() }) }() sdl.Do(func() { renderer, err = sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED) }) if err != nil { fmt.Fprint(os.Stderr, "Failed to create renderer: %s\n", err) return 2 } sdl.Do(func() { renderer.Clear() }) defer func() { sdl.Do(func() { renderer.Destroy() }) }() go func() { println("goroutine: A") }() sdl.Do(func() { renderer.SetDrawColor(255, 255, 255, 255) renderer.DrawPoint(150, 300) println("queue: A") }) go func() { println("goroutine: B") }() sdl.Do(func() { renderer.SetDrawColor(0, 0, 255, 255) renderer.DrawLine(0, 0, 200, 200) println("queue: B") }) go func() { println("goroutine: C") }() sdl.Do(func() { points = []sdl.Point{{0, 0}, {100, 300}, {100, 300}, {200, 0}} renderer.SetDrawColor(255, 255, 0, 255) renderer.DrawLines(points) println("queue: C") }) go func() { println("goroutine: D") }() sdl.Do(func() { rect = sdl.Rect{300, 0, 200, 200} renderer.SetDrawColor(255, 0, 0, 255) renderer.DrawRect(&rect) println("queue: D") }) go func() { println("goroutine: E") }() sdl.Do(func() { rects = []sdl.Rect{{400, 400, 100, 100}, {550, 350, 200, 200}} renderer.SetDrawColor(0, 255, 255, 255) renderer.DrawRects(rects) println("queue: E") }) go func() { println("goroutine: F") }() sdl.Do(func() { rect = sdl.Rect{250, 250, 200, 200} renderer.SetDrawColor(0, 255, 0, 255) renderer.FillRect(&rect) println("queue: F") }) go func() { println("goroutine: G") }() sdl.Do(func() { rects = []sdl.Rect{{500, 300, 100, 100}, {200, 300, 200, 200}} renderer.SetDrawColor(255, 0, 255, 255) renderer.FillRects(rects) println("queue: G") }) go func() { println("goroutine: H") }() sdl.Do(func() { renderer.Present() println("queue: H") }) sdl.Do(func() { sdl.Delay(2000) }) return 0 }