Index: src/hid/OHEvdevGamepad.m ================================================================== --- src/hid/OHEvdevGamepad.m +++ src/hid/OHEvdevGamepad.m @@ -40,15 +40,12 @@ if (self.northButton == nil || self.southButton == nil || self.westButton == nil || self.eastButton == nil || self.leftShoulderButton == nil || self.rightShoulderButton == nil || self.leftTriggerButton == nil || - self.rightTriggerButton == nil || - self.leftThumbstickButton == nil || - self.rightThumbstickButton == nil || - self.menuButton == nil || self.optionsButton == nil || - self.homeButton == nil || self.leftThumbstick == nil || + self.rightTriggerButton == nil || self.menuButton == nil || + self.optionsButton == nil || self.leftThumbstick == nil || self.rightThumbstick == nil || self.dPad == nil) @throw [OFInvalidArgumentException exception]; objc_autoreleasePoolPop(pool); } @catch (id e) { @@ -66,29 +63,46 @@ [super dealloc]; } - (OFDictionary OF_GENERIC(OFString *, OHGameControllerButton *) *)buttons { - return [OFDictionary dictionaryWithKeysAndObjects: - @"North", self.northButton, - @"South", self.southButton, - @"West", self.westButton, - @"East", self.eastButton, - @"Left Shoulder", self.leftShoulderButton, - @"Right Shoulder", self.rightShoulderButton, - @"Left Trigger", self.leftTriggerButton, - @"Right Trigger", self.rightTriggerButton, - @"Left Thumbstick", self.leftThumbstickButton, - @"Right Thumbstick", self.rightThumbstickButton, - @"Menu", self.menuButton, - @"Options", self.optionsButton, - @"Home", self.homeButton, nil]; + OFMutableDictionary *buttons = + [[_rawProfile.buttons mutableCopy] autorelease]; + + [buttons removeObjectForKey: @"D-Pad Up"]; + [buttons removeObjectForKey: @"D-Pad Down"]; + [buttons removeObjectForKey: @"D-Pad Left"]; + [buttons removeObjectForKey: @"D-Pad Right"]; + + if ([_rawProfile.axes objectForKey: @"Z"] != nil) + [buttons setObject: self.leftTriggerButton forKey: @"TL2"]; + + if ([_rawProfile.axes objectForKey: @"RZ"] != nil) + [buttons setObject: self.rightTriggerButton forKey: @"TR2"]; + + [buttons makeImmutable]; + + return buttons; } - (OFDictionary OF_GENERIC(OFString *, OHGameControllerAxis *) *)axes { - return [OFDictionary dictionary]; + OFMutableDictionary *axes = + [[_rawProfile.axes mutableCopy] autorelease]; + + [axes removeObjectForKey: @"X"]; + [axes removeObjectForKey: @"Y"]; + [axes removeObjectForKey: @"RX"]; + [axes removeObjectForKey: @"RY"]; + [axes removeObjectForKey: @"Z"]; + [axes removeObjectForKey: @"RZ"]; + [axes removeObjectForKey: @"HAT0X"]; + [axes removeObjectForKey: @"HAT0Y"]; + + [axes makeImmutable]; + + return axes; } - (OFDictionary OF_GENERIC(OFString *, OHGameControllerDirectionalPad *) *) directionalPads { Index: src/hid/OHXInputGamepad.m ================================================================== --- src/hid/OHXInputGamepad.m +++ src/hid/OHXInputGamepad.m @@ -53,16 +53,11 @@ OHXInputVersion == 910) continue; button = [[OHGameControllerButton alloc] initWithName: buttonNames[i]]; - @try { - [buttons setObject: button - forKey: buttonNames[i]]; - } @finally { - [button release]; - } + [buttons setObject: button forKey: buttonNames[i]]; } [buttons makeImmutable]; _buttons = [buttons retain]; _axes = [[OFDictionary alloc] init];