inpututil: Bug fix: delete gamepad data that doesn't exist

This commit is contained in:
Hajime Hoshi 2018-02-05 23:45:43 +09:00
parent 8aa72d9576
commit 37b27d3a2d

View File

@ -50,6 +50,7 @@ func (i *inputState) update() {
i.m.Lock() i.m.Lock()
defer i.m.Unlock() defer i.m.Unlock()
// Keyboard
for k := ebiten.Key(0); k <= ebiten.KeyMax; k++ { for k := ebiten.Key(0); k <= ebiten.KeyMax; k++ {
if ebiten.IsKeyPressed(k) { if ebiten.IsKeyPressed(k) {
i.keyStates[k]++ i.keyStates[k]++
@ -58,6 +59,7 @@ func (i *inputState) update() {
} }
} }
// Mouse
for _, b := range []ebiten.MouseButton{ for _, b := range []ebiten.MouseButton{
ebiten.MouseButtonLeft, ebiten.MouseButtonLeft,
ebiten.MouseButtonRight, ebiten.MouseButtonRight,
@ -70,7 +72,10 @@ func (i *inputState) update() {
} }
} }
// Gamepads
ids := map[int]struct{}{}
for _, id := range ebiten.GamepadIDs() { for _, id := range ebiten.GamepadIDs() {
ids[id] = struct{}{}
if _, ok := i.gamepadButtonStates[id]; !ok { if _, ok := i.gamepadButtonStates[id]; !ok {
i.gamepadButtonStates[id] = map[ebiten.GamepadButton]int{} i.gamepadButtonStates[id] = map[ebiten.GamepadButton]int{}
} }
@ -83,13 +88,23 @@ func (i *inputState) update() {
} }
} }
} }
idsToDelete := []int{}
for id := range i.gamepadButtonStates {
if _, ok := ids[id]; !ok {
idsToDelete = append(idsToDelete, id)
}
}
for _, id := range idsToDelete {
delete(i.gamepadButtonStates, id)
}
ids := map[int]struct{}{} // Touches
ids = map[int]struct{}{}
for _, t := range ebiten.Touches() { for _, t := range ebiten.Touches() {
ids[t.ID()] = struct{}{} ids[t.ID()] = struct{}{}
i.touchStates[t.ID()]++ i.touchStates[t.ID()]++
} }
idsToDelete := []int{} idsToDelete = []int{}
for id := range i.touchStates { for id := range i.touchStates {
if _, ok := ids[id]; !ok { if _, ok := ids[id]; !ok {
idsToDelete = append(idsToDelete, id) idsToDelete = append(idsToDelete, id)