Skip to content
Snippets Groups Projects
Select Git revision
  • 2023ws
  • 2024ws default
  • 2022ws
  • 2021ws
  • 2020ws
  • 2018ws
  • 2019ws
  • 2017ws
  • 2016ws
9 results

hanoi-6.c

Blame
  • steering_wheel.py 2.34 KiB
    """ Steering wheel """
    
    import pygame
    
    DIRECTION=0
    THROTTLE=1
    BRAKES=2
    INPUTS=3
    
    OFFSET = 2.0
    
    class ManualSteeringWheel:
        """ Steering wheel """
        axis_count = 0.0
        joystick = None
        direction = 0.0
        throttle = 0.0
        brakes = 0.0
        reverse = False
    
        def __init__(self):
            self.joystick = pygame.joystick.Joystick(0)
            self.joystick.init()
            self.axis_count = self.joystick.get_numaxes()
    
        def get_direction(self, update=True):
            """ Update and return direction. """
            if update:
                pygame.event.get()
            self.direction = self.joystick.get_axis(DIRECTION)
            return self.direction
        
        def get_throttle(self, update=True):
            """ Update and return throttle."""
            if update:
                pygame.event.get()
            self.throttle = (OFFSET - (self.joystick.get_axis(THROTTLE) + 1.0)) / OFFSET
            return self.throttle
    
        def get_brakes(self, update=True):
            """ Update and return brakes. """
            if update:
                pygame.event.get()
            self.brakes = (OFFSET - (self.joystick.get_axis(BRAKES) + 1.0)) / OFFSET
            if self.brakes < 0.01:
                self.brakes = 0.0
            return self.brakes
    
        def update_controls(self):
            """ Poll for pygame events. """
            self.get_direction(update=False)
            self.get_throttle(update=False)
            self.get_brakes(update=False)
    
        def get_action(self):
            return [self.throttle, self.brakes, self.direction, self.reverse]
    
    
    class Controller(ManualSteeringWheel):
        running = True
    
        def is_running(self):
            return self.running
    
        def on_update(self):
            for event in pygame.event.get():
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_r:
                        self.reverse = True
                    elif event.key == pygame.K_d:
                        self.reverse = False
                    elif event.key == pygame.K_q:
                        self.running = False
                        
            self.update_controls()
    
    if __name__ == '__main__':
        pygame.init()
        clock = pygame.time.Clock()
        sw = ManualSteeringWheel()
    
        while True:
            # Receive all occured events
            print("")
            print("Direction: " + str(sw.get_direction()))
            print("Speed:     " + str(sw.get_throttle()))
            print("Brakes:    " + str(sw.get_brakes()))
            clock.tick(2)