-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjoystick.go
53 lines (43 loc) · 1.42 KB
/
joystick.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package insta
import (
"log"
"github.com/simulatedsimian/joystick"
)
type Joystick struct {
sticks []joystick.Joystick
}
func NewJoystick(ids []int) *Joystick {
js := &Joystick{}
for _, id := range ids {
j, err := joystick.Open(id)
if err != nil {
log.Fatalf("unable to open joystick %d: %s", id, err)
}
js.sticks = append(js.sticks, j)
}
return js
}
func (js *Joystick) Pads() []Pad {
pads := make([]Pad, 4)
for i, j := range js.sticks {
s, _ := j.Read()
p := JoystickState{s}
pads[i] = &p
}
return pads
}
type JoystickState struct {
joystick.State
}
func (js *JoystickState) Up() bool { return js.AxisData[1] < -1000 }
func (js *JoystickState) Right() bool { return js.AxisData[0] > 1000 }
func (js *JoystickState) Down() bool { return js.AxisData[1] > 1000 }
func (js *JoystickState) Left() bool { return js.AxisData[0] < -1000 }
func (js *JoystickState) Select() bool { return (js.Buttons & 256) != 0 }
func (js *JoystickState) Start() bool { return (js.Buttons & 512) != 0 }
func (js *JoystickState) North() bool { return (js.Buttons & 1) != 0 }
func (js *JoystickState) East() bool { return (js.Buttons & 2) != 0 }
func (js *JoystickState) South() bool { return (js.Buttons & 4) != 0 }
func (js *JoystickState) West() bool { return (js.Buttons & 8) != 0 }
func (js *JoystickState) LPad() bool { return (js.Buttons & 16) != 0 }
func (js *JoystickState) RPad() bool { return (js.Buttons & 32) != 0 }