// ShowCursor causes the cursor to be shown or hidden. func ShowCursor(show bool) { if show { sdl.ShowCursor(1) } else { sdl.ShowCursor(0) } }
// SetMouseVisible will hide the mouse if passed false, and show the mouse cursor // if passed true func SetMouseVisible(visible bool) { getCurrent() // must call getCurrent to ensure there is a window if visible { sdl.ShowCursor(sdl.ENABLE) } else { sdl.ShowCursor(sdl.DISABLE) } }
func toggleFullscreen(window *sdl.Window) { isFullscreen := (window.GetFlags() & sdl.WINDOW_FULLSCREEN) != 0 if isFullscreen { window.SetFullscreen(0) sdl.ShowCursor(1) } else { window.SetFullscreen(sdl.WINDOW_FULLSCREEN_DESKTOP) sdl.ShowCursor(0) } }
// SetVisible sets the current visibility of the cursor. func SetVisible(isvisible bool) { state := sdl.ENABLE if isvisible == false { state = sdl.DISABLE } sdl.ShowCursor(state) }
// GetMouseVisible will return true if the mouse is not hidden and will return // false otherwise func GetMouseVisible() bool { getCurrent() // must call getCurrent to ensure there is a window return sdl.ShowCursor(sdl.QUERY) == sdl.ENABLE }
// IsVisible checks if the cursor is visible. func IsVisible() bool { return sdl.ShowCursor(sdl.QUERY) == sdl.ENABLE }
func main() { sdl.SetHint(sdl.HINT_RENDER_VSYNC, "1") check(sdl.Init(sdl.INIT_EVERYTHING)) defer sdl.Quit() check(mix.Init(mix.INIT_OGG)) defer mix.Quit() check(mix.OpenAudio(44100, mix.DEFAULT_FORMAT, 1, 512)) defer mix.CloseAudio() if img.Init(img.INIT_PNG)&img.INIT_PNG == 0 { panic("error init png") } defer img.Quit() window, renderer, err := sdl.CreateWindowAndRenderer( 640, 480, sdl.WINDOW_RESIZABLE, ) check(err) defer renderer.Destroy() defer window.Destroy() window.SetTitle("Gophette's Adventures") window.SetSize(800, 600) sdl.ShowCursor(0) window.SetFullscreen(sdl.WINDOW_FULLSCREEN_DESKTOP) fullscreen := true camera := newWindowCamera(window.GetSize()) assetLoader := newSDLAssetLoader(camera, renderer) defer assetLoader.close() // charIndex selects which character is being controlled by the user, for // the final game this must be 0 but for creating the "AI" for Barney, set // this to 1 and delete the recorded inputs so they are not applied // additionally to the user controls var charIndex int const recordingAI = false // NOTE switch for development mode if !recordingAI { charIndex = 0 } else { charIndex = 1 recordedInputs = recordedInputs[:0] recordingInput = true } game := NewGame( assetLoader, &sdlGraphics{renderer, camera}, camera, charIndex, ) frameTime := time.Second / 65 lastUpdate := time.Now().Add(-frameTime) music, err := mix.LoadMUS("./rsc/background_music.ogg") if err != nil { fmt.Println("error loading music:", err) } else { defer music.Free() music.FadeIn(-1, 500) } for game.Running() { for e := sdl.PollEvent(); e != nil; e = sdl.PollEvent() { switch event := e.(type) { case *sdl.KeyDownEvent: if event.Repeat == 0 { switch event.Keysym.Sym { case sdl.K_LEFT: game.HandleInput(InputEvent{GoLeft, true, charIndex}) case sdl.K_RIGHT: game.HandleInput(InputEvent{GoRight, true, charIndex}) case sdl.K_UP: game.HandleInput(InputEvent{Jump, true, charIndex}) case sdl.K_ESCAPE: game.HandleInput(InputEvent{QuitGame, true, charIndex}) } } case *sdl.KeyUpEvent: switch event.Keysym.Sym { case sdl.K_LEFT: game.HandleInput(InputEvent{GoLeft, false, charIndex}) case sdl.K_RIGHT: game.HandleInput(InputEvent{GoRight, false, charIndex}) case sdl.K_UP: game.HandleInput(InputEvent{Jump, false, charIndex}) case sdl.K_F11: if fullscreen { window.SetFullscreen(0) } else { window.SetFullscreen(sdl.WINDOW_FULLSCREEN_DESKTOP) } fullscreen = !fullscreen case sdl.K_ESCAPE: game.HandleInput(InputEvent{QuitGame, false, charIndex}) } case *sdl.WindowEvent: if event.Event == sdl.WINDOWEVENT_SIZE_CHANGED { width, height := int(event.Data1), int(event.Data2) camera.setWindowSize(width, height) } case *sdl.QuitEvent: game.HandleInput(InputEvent{QuitGame, true, charIndex}) } } now := time.Now() dt := now.Sub(lastUpdate) if dt > frameTime { game.Update() lastUpdate = now } check(renderer.SetDrawColor(0, 95, 83, 255)) check(renderer.Clear()) game.Render() renderer.Present() } }