Replace hacky target stringification with structured serialization.
[enjoyable.git] / Target.m
1 //
2 // Target.m
3 // Enjoy
4 //
5 // Created by Sam McCall on 5/05/09.
6 //
7
8 #import "Target.h"
9
10 #import "TargetKeyboard.h"
11 #import "TargetConfig.h"
12 #import "TargetMouseMove.h"
13 #import "TargetMouseBtn.h"
14 #import "TargetMouseScroll.h"
15 #import "TargetToggleMouseScope.h"
16
17 @implementation Target {
18 BOOL running;
19 }
20
21 @synthesize magnitude;
22
23 + (NSString *)serializationCode {
24 [self doesNotRecognizeSelector:_cmd];
25 return nil;
26 }
27
28 - (NSDictionary *)serialize {
29 [self doesNotRecognizeSelector:_cmd];
30 return nil;
31 }
32
33 + (Target *)targetDeserialize:(NSDictionary *)serialization
34 withConfigs:(NSArray *)configs {
35 // Don't crash loading old configs (but don't load them either).
36 if (![serialization isKindOfClass:[NSDictionary class]])
37 return nil;
38 NSString *type = serialization[@"type"];
39 for (Class cls in @[[TargetKeyboard class],
40 [TargetConfig class],
41 [TargetMouseMove class],
42 [TargetMouseBtn class],
43 [TargetMouseScroll class],
44 [TargetToggleMouseScope class]
45 ]) {
46 if ([type isEqualToString:[cls serializationCode]])
47 return [cls targetDeserialize:serialization withConfigs:configs];
48 }
49
50 return nil;
51 }
52
53 - (void)trigger {
54 }
55
56 - (void)untrigger {
57 }
58
59 - (BOOL)update:(JoystickController *)jc {
60 return NO;
61 }
62
63 - (BOOL)isContinuous {
64 return NO;
65 }
66
67 - (BOOL)running {
68 return running;
69 }
70
71 - (void)setRunning:(BOOL)newRunning {
72 if (running != newRunning) {
73 running = newRunning;
74 if (running)
75 [self trigger];
76 else
77 [self untrigger];
78 }
79 }
80
81
82 @end