Forked Enjoy, mouse movement
[enjoyable.git] / JSActionAnalog.m
diff --git a/JSActionAnalog.m b/JSActionAnalog.m
new file mode 100644 (file)
index 0000000..a1c57e8
--- /dev/null
@@ -0,0 +1,56 @@
+//
+//  JSActionAnalog.m
+//  Enjoy
+//
+//  Created by Sam McCall on 5/05/09.
+//
+
+@implementation JSActionAnalog
+
+- (id) initWithIndex: (int)newIndex {
+       if(self = [super init]) {
+       subActions = [NSArray arrayWithObjects:
+               [[SubAction alloc] initWithIndex: 0 name: @"Low" base: self],
+               [[SubAction alloc] initWithIndex: 1 name: @"High" base: self],
+        [[SubAction alloc] initWithIndex: 2 name: @"Analog" base: self],
+               nil
+       ];
+               [subActions retain];
+       index = newIndex;
+       name = [[NSString alloc] initWithFormat: @"Axis %d", (index+1)];
+   }
+       return self;
+}
+
+-(id) findSubActionForValue: (IOHIDValueRef) value {
+    if ([[subActions objectAtIndex: 2] active]) {
+        return [subActions objectAtIndex: 2]; // TODO?
+    }
+    
+    //Target* target = [[base->configsController currentConfig] getTargetForAction: [subActions objectAtIndex: 0]];
+    
+       int raw = IOHIDValueGetIntegerValue(value);
+       double parsed = offset + scale * raw;
+       
+       if(parsed < -0.3) // fixed?!
+               return [subActions objectAtIndex: 0];
+       else if(parsed > 0.3)
+               return [subActions objectAtIndex: 1];
+       return NULL;
+}
+
+-(void) notifyEvent: (IOHIDValueRef) value {
+    // Analog action is always active
+    [[subActions objectAtIndex: 2] setActive: true];
+    
+       int raw = IOHIDValueGetIntegerValue(value);
+       double parsed = offset + scale * raw;
+       
+       [[subActions objectAtIndex: 0] setActive: (parsed < -0.3)];
+       [[subActions objectAtIndex: 1] setActive: (parsed > 0.3)];
+}
+
+@synthesize offset, scale;
+
+
+@end