Fix localization changing mapping logical names.
[enjoyable.git] / Classes / NJInputAnalog.m
1 //
2 // NJInputAnalog.m
3 // Enjoy
4 //
5 // Created by Sam McCall on 5/05/09.
6 //
7
8 #define DEAD_ZONE 0.3
9
10 #import "NJInputAnalog.h"
11
12 static float normalize(long p, long min, long max) {
13 return 2 * (p - min) / (float)(max - min) - 1;
14 }
15
16 @implementation NJInputAnalog {
17 long rawMin;
18 long rawMax;
19 }
20
21 - (id)initWithIndex:(int)index rawMin:(long)rawMin_ rawMax:(long)rawMax_ {
22 NSString *name = [[NSString alloc] initWithFormat:NSLocalizedString(@"axis %d", @"axis name"), index];
23 NSString *did = [[NSString alloc] initWithFormat:@"Axis %d", index];
24 if ((self = [super initWithName:name did:did base:nil])) {
25 self.children = @[[[NJInput alloc] initWithName:NSLocalizedString(@"axis low", @"axis low trigger")
26 did:@"Low"
27 base:self],
28 [[NJInput alloc] initWithName:NSLocalizedString(@"axis high", @"axis high trigger")
29 did:@"High"
30 base:self]];
31 rawMax = rawMax_;
32 rawMin = rawMin_;
33 }
34 return self;
35 }
36
37 - (id)findSubInputForValue:(IOHIDValueRef)value {
38 float mag = normalize(IOHIDValueGetIntegerValue(value), rawMin, rawMax);
39 if (mag < -DEAD_ZONE)
40 return self.children[0];
41 else if (mag > DEAD_ZONE)
42 return self.children[1];
43 else
44 return nil;
45 }
46
47 - (void)notifyEvent:(IOHIDValueRef)value {
48 float magnitude = self.magnitude = normalize(IOHIDValueGetIntegerValue(value), rawMin, rawMax);
49 [self.children[0] setMagnitude:fabsf(MIN(magnitude, 0))];
50 [self.children[1] setMagnitude:fabsf(MAX(magnitude, 0))];
51 [self.children[0] setActive:magnitude < -DEAD_ZONE];
52 [self.children[1] setActive:magnitude > DEAD_ZONE];
53 }
54
55 @end