X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=NJInputAnalog.m;fp=NJInputAnalog.m;h=98ed0187c68d55eb4ac344c8f1a0fefe3cc142ca;hp=0000000000000000000000000000000000000000;hb=f864d363128de19fc6591b77ae9226b34166d715;hpb=f563321aec9e13b8479ab3b890a9179f095a8b17 diff --git a/NJInputAnalog.m b/NJInputAnalog.m new file mode 100644 index 0000000..98ed018 --- /dev/null +++ b/NJInputAnalog.m @@ -0,0 +1,53 @@ +// +// NJInputAnalog.m +// Enjoy +// +// Created by Sam McCall on 5/05/09. +// + +#define DEAD_ZONE 0.3 + +#import "NJInputAnalog.h" + +static float normalize(long p, long min, long max) { + return 2 * (p - min) / (float)(max - min) - 1; +} + +@implementation NJInputAnalog { + float magnitude; + long rawMin; + long rawMax; +} + +- (id)initWithIndex:(int)index rawMin:(long)rawMin_ rawMax:(long)rawMax_ { + if ((self = [super init])) { + self.name = [[NSString alloc] initWithFormat: @"Axis %d", index]; + self.children = @[[[NJInput alloc] initWithName:@"Low" base:self], + [[NJInput alloc] initWithName:@"High" base:self]]; + rawMax = rawMax_; + rawMin = rawMin_; + } + return self; +} + +- (id)findSubInputForValue:(IOHIDValueRef)value { + float mag = normalize(IOHIDValueGetIntegerValue(value), rawMin, rawMax); + if (mag < -DEAD_ZONE) + return self.children[0]; + else if (mag > DEAD_ZONE) + return self.children[1]; + else + return nil; +} + +- (void)notifyEvent:(IOHIDValueRef)value { + magnitude = normalize(IOHIDValueGetIntegerValue(value), rawMin, rawMax); + [self.children[0] setActive:magnitude < -DEAD_ZONE]; + [self.children[1] setActive:magnitude > DEAD_ZONE]; +} + +- (float)magnitude { + return magnitude; +} + +@end