mirror of
https://github.com/Kugelschieber/go-game.git
synced 2026-01-18 06:40:28 +00:00
Set GL version to 3.1 (lowest possible version), fixed cleanup bug when calling Stop(), added input handling.
This commit is contained in:
98
input.go
Normal file
98
input.go
Normal file
@@ -0,0 +1,98 @@
|
||||
package goga
|
||||
|
||||
import (
|
||||
"github.com/go-gl/glfw/v3.2/glfw"
|
||||
)
|
||||
|
||||
var (
|
||||
keyboardListener []KeyboardListener
|
||||
mouseListener []MouseListener
|
||||
)
|
||||
|
||||
// Interface for keyboard input events.
|
||||
// Implement and register to receive keyboard input.
|
||||
type KeyboardListener interface {
|
||||
OnKeyEvent(glfw.Key, int, glfw.Action, glfw.ModifierKey)
|
||||
}
|
||||
|
||||
// Interface for mouse input events.
|
||||
// Implement and register to receive mouse input.
|
||||
type MouseListener interface {
|
||||
OnMouseButton(glfw.MouseButton, glfw.Action, glfw.ModifierKey)
|
||||
OnMouseMove(float64, float64)
|
||||
OnMouseScroll(float64, float64)
|
||||
}
|
||||
|
||||
func initInput(wnd *glfw.Window) {
|
||||
wnd.SetKeyCallback(keyboardCallback)
|
||||
wnd.SetMouseButtonCallback(mouseButtonCallback)
|
||||
wnd.SetCursorPosCallback(mouseMoveCallback)
|
||||
wnd.SetScrollCallback(mouseScrollCallback)
|
||||
|
||||
keyboardListener = make([]KeyboardListener, 0)
|
||||
mouseListener = make([]MouseListener, 0)
|
||||
}
|
||||
|
||||
func keyboardCallback(wnd *glfw.Window, key glfw.Key, code int, action glfw.Action, mod glfw.ModifierKey) {
|
||||
for _, listener := range keyboardListener {
|
||||
listener.OnKeyEvent(key, code, action, mod)
|
||||
}
|
||||
}
|
||||
|
||||
func mouseButtonCallback(wnd *glfw.Window, button glfw.MouseButton, action glfw.Action, mod glfw.ModifierKey) {
|
||||
for _, listener := range mouseListener {
|
||||
listener.OnMouseButton(button, action, mod)
|
||||
}
|
||||
}
|
||||
|
||||
func mouseMoveCallback(wnd *glfw.Window, x float64, y float64) {
|
||||
for _, listener := range mouseListener {
|
||||
listener.OnMouseMove(x, float64(viewportHeight)-y)
|
||||
}
|
||||
}
|
||||
|
||||
func mouseScrollCallback(wnd *glfw.Window, x float64, y float64) {
|
||||
for _, listener := range mouseListener {
|
||||
listener.OnMouseScroll(x, y)
|
||||
}
|
||||
}
|
||||
|
||||
// Adds a new keyboard listener.
|
||||
func AddKeyboardListener(listener KeyboardListener) {
|
||||
keyboardListener = append(keyboardListener, listener)
|
||||
}
|
||||
|
||||
// Removes given keyboard listener if found.
|
||||
func RemoveKeyboardListener(listener KeyboardListener) {
|
||||
for i, l := range keyboardListener {
|
||||
if l == listener {
|
||||
keyboardListener = append(keyboardListener[:i], keyboardListener[i+1:]...)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Removes all registered keyboard listeners.
|
||||
func RemoveAllKeyboardListener() {
|
||||
keyboardListener = make([]KeyboardListener, 0)
|
||||
}
|
||||
|
||||
// Adds a new mouse listener.
|
||||
func AddMouseListener(listener MouseListener) {
|
||||
mouseListener = append(mouseListener, listener)
|
||||
}
|
||||
|
||||
// Removes given mouse listener if found.
|
||||
func RemoveMouseListener(listener MouseListener) {
|
||||
for i, l := range mouseListener {
|
||||
if l == listener {
|
||||
mouseListener = append(mouseListener[:i], mouseListener[i+1:]...)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Removes all registered mouse listeners.
|
||||
func RemoveAllMouseListener() {
|
||||
mouseListener = make([]MouseListener, 0)
|
||||
}
|
||||
Reference in New Issue
Block a user