5 // Created by Sam McCall on 5/05/09.
8 // TODO: Dead zone should be configurable per-device.
11 #import "JSActionAnalog.h"
13 @implementation JSActionAnalog
15 @synthesize offset, scale;
17 - (id)initWithIndex:(int)newIndex offset:(float)offset_ scale:(float)scale_ {
18 if ((self = [super init])) {
19 self.children = @[[[SubAction alloc] initWithIndex:0 name:@"Low" base:self],
20 [[SubAction alloc] initWithIndex:1 name:@"High" base:self]];
21 self.index = newIndex;
22 self.offset = offset_;
24 self.name = [[NSString alloc] initWithFormat: @"Axis %d", self.index + 1];
29 - (id)findSubActionForValue:(IOHIDValueRef)value {
30 int raw = IOHIDValueGetIntegerValue(value);
31 float parsed = [self getRealValue:raw];
33 if (parsed < -DEAD_ZONE)
34 return self.children[0];
35 else if (parsed > DEAD_ZONE)
36 return self.children[1];
41 - (void)notifyEvent:(IOHIDValueRef)value {
42 int raw = IOHIDValueGetIntegerValue(value);
43 float parsed = [self getRealValue:raw];
44 [self.children[0] setActive:parsed < -DEAD_ZONE];
45 [self.children[1] setActive:parsed > DEAD_ZONE];
48 - (float)getRealValue:(int)value {
49 return offset + scale * value;