/* * Copyright (c) 2007 Dave Dribin * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #import "JoystickPaneController.h" #import "DDHidJoystick.h" #import "ButtonState.h" @interface JoystickPaneController (Private) - (void) setJoysticks: (NSArray *) theJoysticks; @end @implementation JoystickPaneController - (void) awakeFromNib; { NSArray * joysticks = [DDHidJoystick allJoysticks]; mJoystickButtons = [[NSMutableArray alloc] init]; [joysticks makeObjectsPerformSelector: @selector(setDelegate:) withObject: self]; [self setJoysticks: joysticks]; if ([mJoysticks count] > 0) [self setJoystickIndex: 0]; else [self setJoystickIndex: NSNotFound]; } //=========================================================== // joysticks //=========================================================== - (NSArray *) joysticks { return mJoysticks; } - (NSArray *) joystickButtons; { return mJoystickButtons; } //=========================================================== // joystickIndex //=========================================================== - (NSUInteger) joystickIndex { return mJoystickIndex; } - (void) setJoystickIndex: (NSUInteger) theJoystickIndex { if (mCurrentJoystick != nil) { [mCurrentJoystick stopListening]; mCurrentJoystick = nil; } mJoystickIndex = theJoystickIndex; [mJoysticksController setSelectionIndex: mJoystickIndex]; if (mJoystickIndex != NSNotFound) { mCurrentJoystick = [mJoysticks objectAtIndex: mJoystickIndex]; [mCurrentJoystick startListening]; [self willChangeValueForKey: @"joystickButtons"]; [mJoystickButtons removeAllObjects]; NSArray * buttons = [mCurrentJoystick buttonElements]; NSEnumerator * e = [buttons objectEnumerator]; DDHidElement * element; while (element = [e nextObject]) { ButtonState * state = [[ButtonState alloc] initWithName: [[element usage] usageName]]; [state autorelease]; [mJoystickButtons addObject: state]; } [self didChangeValueForKey: @"joystickButtons"]; } } - (int) xAxis; { return mXAxis; } - (int) yAxis; { return mYAxis; } - (void) ddhidJoystick: (DDHidJoystick *) joystick stick: (unsigned) stick xChanged: (int) value; { [self willChangeValueForKey: @"xAxis"]; mXAxis = value; [self didChangeValueForKey: @"xAxis"]; } - (void) ddhidJoystick: (DDHidJoystick *) joystick stick: (unsigned) stick yChanged: (int) value; { [self willChangeValueForKey: @"yAxis"]; mYAxis = value; [self didChangeValueForKey: @"yAxis"]; } - (void) ddhidJoystick: (DDHidJoystick *) joystick stick: (unsigned) stick otherAxis: (unsigned) otherAxis valueChanged: (int) value; { // Somehow display values here NSLog(@"Stick: %d, other axis: %d, changed: %d", stick, otherAxis, value); } - (void) ddhidJoystick: (DDHidJoystick *) joystick stick: (unsigned) stick povNumber: (unsigned) povNumber valueChanged: (int) value; { // Somehow display values here NSLog(@"Stick: %d, POV number: %d, changed: %d", stick, povNumber, value); } - (void) ddhidJoystick: (DDHidJoystick *) joystick buttonDown: (unsigned) buttonNumber; { ButtonState * state = [mJoystickButtons objectAtIndex: buttonNumber]; [state setPressed: YES]; } - (void) ddhidJoystick: (DDHidJoystick *) joystick buttonUp: (unsigned) buttonNumber; { ButtonState * state = [mJoystickButtons objectAtIndex: buttonNumber]; [state setPressed: NO]; } @end @implementation JoystickPaneController (Private) - (void) setJoysticks: (NSArray *) theJoysticks { if (mJoysticks != theJoysticks) { [mJoysticks release]; mJoysticks = [theJoysticks retain]; } } @end