Game controllers on Windows (without PyGame)

Necrotreading of the worst kind, sorry.

I’ve taken the code posted here and wrapped it into a class that throws events just like the keyboard/mouse buttons.
gist.github.com/wezu/9cd50bf57b … b6a3499a60

You can use it like this:

from __future__ import print_function
from panda3d.core import *
from direct.showbase import ShowBase
from direct.showbase.DirectObject import DirectObject

from controller import Controller

class Demo(DirectObject):
    def __init__(self):
        base = ShowBase.ShowBase()

        self.joy_pad=Controller('joystick')
        #get all buttons
        self.accept('joystick', self.print_key)
        #get all axis
        self.accept('joystick-analog', self.print_axis)
        #get just one specific
        self.accept('button_0', self.jump)
        #good-ol'-keymap

        #key mapping
        self.keyMap = {'key_up': False,
                       'key_down': False,
                       'key_left': False,
                       'key_right': False}
        self.accept('pad_up', self.keyMap.__setitem__, ["key_up", True])
        self.accept('pad_up-up', self.keyMap.__setitem__, ["key_up", False])
        self.accept('pad_down', self.keyMap.__setitem__, ["key_down", True])
        self.accept('pad_down-up', self.keyMap.__setitem__, ["key_down", False])
        self.accept('pad_left', self.keyMap.__setitem__, ["key_left", True])
        self.accept('pad_left-up', self.keyMap.__setitem__, ["key_left", False])
        self.accept('pad_right', self.keyMap.__setitem__, ["key_right", True])
        self.accept('pad_right-up', self.keyMap.__setitem__, ["key_right", False])

    def jump(self):
        print('jump!')

    def print_axis(self, axis, pos):
        print(axis, pos)

    def print_key(self, key):
        print(key)

d=Demo()
base.run()
1 Like