diff --git a/dualsense.py b/dualsense.py deleted file mode 100644 index 9aae921..0000000 --- a/dualsense.py +++ /dev/null @@ -1,78 +0,0 @@ -import pygame -from pydualsense import * - -BATTERY_STATE = { - "0": "Discharging", - "1": "Charging", - "2": "Full", - "11": "Not charging", - "15": "Error", - "10": "Temp or voltage out of range" - } - -# Initialize pygame -pygame.init() -screen = pygame.display.set_mode((800, 600)) -pygame.display.set_caption("DualSense Demo with Pygame") -font = pygame.font.SysFont(None, 48) -clock = pygame.time.Clock() - -# Initialize DualSense -ds = pydualsense() -ds.init() - -# Set initial LED color -ds.light.setColorI(0, 100, 255) - -# Configure adaptive trigger -ds.triggerL.setMode(TriggerModes.Rigid) -ds.triggerL.setForce(1, 255) - -running = True -while running: - screen.fill((30, 30, 30)) - - # Read inputs from DualSense - text_lines = [ - f"LX: {ds.state.LX:.2f}, LY: {ds.state.LY:.2f}", - f"RX: {ds.state.RX:.2f}, RY: {ds.state.RY:.2f}", - f"L2: {ds.state.L2:.2f}, R2: {ds.state.R2:.2f}", - f"Accel: {ds.state.accelerometer.X:.2f}, {ds.state.accelerometer.Y:.2f}, {ds.state.accelerometer.Z:.2f}", - f"Gyro: {ds.state.gyro.Roll:.2f}, {ds.state.gyro.Pitch:.2f}, {ds.state.gyro.Yaw:.2f}", - f"Power: {ds.battery.Level:4}%, State: {BATTERY_STATE[str(ds.battery.State)]}" - ] - - for i, line in enumerate(text_lines): - text = font.render(line, True, (255, 255, 255)) - screen.blit(text, (20, 40 + i * 50)) - - # Button-based actions - if ds.state.square: - ds.light.setColorI(255, 0, 0) # Red - elif ds.state.triangle: - ds.light.setColorI(0, 255, 0) # Green - elif ds.state.circle: - ds.light.setColorI(0, 0, 255) # Blue - elif ds.state.cross: - ds.light.setColorI(255, 255, 255) # White - - #ds.setLeftMotor(200) - #ds.setRightMotor(200) # Heavy rumble - - # Handle pygame events - for event in pygame.event.get(): - if event.type == pygame.QUIT: # Exit on window close or PS button - running = False - - if ds.state.ps: - running = False - - pygame.display.flip() - clock.tick(60) - -# Clean up -ds.setLeftMotor(0) -ds.setRightMotor(0) -ds.light.setColorI(0, 0, 255) -ds.close() -pygame.quit() diff --git a/joystick.py b/joystick.py deleted file mode 100644 index 7e31275..0000000 --- a/joystick.py +++ /dev/null @@ -1,151 +0,0 @@ -import pygame - -pygame.init() - - -# This is a simple class that will help us print to the screen. -# It has nothing to do with the joysticks, just outputting the -# information. -class TextPrint: - def __init__(self): - self.reset() - self.font = pygame.font.Font(None, 25) - - def tprint(self, screen, text): - text_bitmap = self.font.render(text, True, (0, 0, 0)) - screen.blit(text_bitmap, (self.x, self.y)) - self.y += self.line_height - - def reset(self): - self.x = 10 - self.y = 10 - self.line_height = 15 - - def indent(self): - self.x += 10 - - def unindent(self): - self.x -= 10 - - -def main(): - # Set the width and height of the screen (width, height), and name the window. - screen = pygame.display.set_mode((500, 700)) - pygame.display.set_caption("Joystick example") - - # Used to manage how fast the screen updates. - clock = pygame.time.Clock() - - # Get ready to print. - text_print = TextPrint() - - # This dict can be left as-is, since pygame will generate a - # pygame.JOYDEVICEADDED event for every joystick connected - # at the start of the program. - joysticks = {} - - done = False - while not done: - # Event processing step. - # Possible joystick events: JOYAXISMOTION, JOYBALLMOTION, JOYBUTTONDOWN, - # JOYBUTTONUP, JOYHATMOTION, JOYDEVICEADDED, JOYDEVICEREMOVED - for event in pygame.event.get(): - if event.type == pygame.QUIT: - done = True # Flag that we are done so we exit this loop. - - if event.type == pygame.JOYBUTTONDOWN: - print("Joystick button pressed.") - if event.button == 0: - joystick = joysticks[event.instance_id] - if joystick.rumble(0.7, 1.0, 1000): - print(f"Rumble effect played on joystick {event.instance_id}") - - if event.type == pygame.JOYBUTTONUP: - print("Joystick button released.") - - # Handle hotplugging - if event.type == pygame.JOYDEVICEADDED: - # This event will be generated when the program starts for every - # joystick, filling up the list without needing to create them manually. - joy = pygame.joystick.Joystick(event.device_index) - joysticks[joy.get_instance_id()] = joy - print(f"Joystick {joy.get_instance_id()} connencted") - - if event.type == pygame.JOYDEVICEREMOVED: - del joysticks[event.instance_id] - print(f"Joystick {event.instance_id} disconnected") - - # Drawing step - # First, clear the screen to white. Don't put other drawing commands - # above this, or they will be erased with this command. - screen.fill((255, 255, 255)) - text_print.reset() - - # Get count of joysticks. - joystick_count = pygame.joystick.get_count() - - text_print.tprint(screen, f"Number of joysticks: {joystick_count}") - text_print.indent() - - # For each joystick: - for joystick in joysticks.values(): - jid = joystick.get_instance_id() - - text_print.tprint(screen, f"Joystick {jid}") - text_print.indent() - - # Get the name from the OS for the controller/joystick. - name = joystick.get_name() - text_print.tprint(screen, f"Joystick name: {name}") - - guid = joystick.get_guid() - text_print.tprint(screen, f"GUID: {guid}") - - power_level = joystick.get_power_level() - text_print.tprint(screen, f"Joystick's power level: {power_level}") - - # Usually axis run in pairs, up/down for one, and left/right for - # the other. Triggers count as axes. - axes = joystick.get_numaxes() - text_print.tprint(screen, f"Number of axes: {axes}") - text_print.indent() - - for i in range(axes): - axis = joystick.get_axis(i) - text_print.tprint(screen, f"Axis {i} value: {axis:>6.3f}") - text_print.unindent() - - buttons = joystick.get_numbuttons() - text_print.tprint(screen, f"Number of buttons: {buttons}") - text_print.indent() - - for i in range(buttons): - button = joystick.get_button(i) - text_print.tprint(screen, f"Button {i:>2} value: {button}") - text_print.unindent() - - hats = joystick.get_numhats() - text_print.tprint(screen, f"Number of hats: {hats}") - text_print.indent() - - # Hat position. All or nothing for direction, not a float like - # get_axis(). Position is a tuple of int values (x, y). - for i in range(hats): - hat = joystick.get_hat(i) - text_print.tprint(screen, f"Hat {i} value: {str(hat)}") - text_print.unindent() - - text_print.unindent() - - # Go ahead and update the screen with what we've drawn. - pygame.display.flip() - - # Limit to 30 frames per second. - clock.tick(30) - - -if __name__ == "__main__": - main() - # If you forget this line, the program will 'hang' - # on exit if running from IDLE. - pygame.quit() \ No newline at end of file diff --git a/pygameController/controller.py b/pygameController/controller.py index 1d2d180..14b75f4 100644 --- a/pygameController/controller.py +++ b/pygameController/controller.py @@ -9,7 +9,7 @@ from .xbox_series_x_controller import XboxSeriesXController from .generic_controller import GenericController from .logitech_dual_action_controller import LogitechDualActionController -__version__ = "0.0.2" +__version__ = "0.0.3" CONTROLLERS = { "DualSense Wireless Controller": DualSenseController,