// Created by Sam McCall on 5/05/09.
//
-@implementation Target
+#import "Target.h"
-+(Target*) unstringify: (NSString*) str withConfigList: (NSArray*) configs {
- NSArray* components = [str componentsSeparatedByString:@"~"];
- NSParameterAssert([components count]);
- NSString* typeTag = [components objectAtIndex:0];
- if([typeTag isEqualToString:@"key"])
- return [TargetKeyboard unstringifyImpl:components];
- if([typeTag isEqualToString:@"cfg"])
- return [TargetConfig unstringifyImpl:components withConfigList:configs];
- if([typeTag isEqualToString:@"mmove"])
- return [TargetMouseMove unstringifyImpl:components];
- if([typeTag isEqualToString:@"mbtn"])
- return [TargetMouseBtn unstringifyImpl:components];
-
- NSParameterAssert(NO);
- return NULL;
+#import "TargetKeyboard.h"
+#import "TargetConfig.h"
+#import "TargetMouseMove.h"
+#import "TargetMouseBtn.h"
+#import "TargetMouseScroll.h"
+#import "TargetToggleMouseScope.h"
+
+@implementation Target {
+ BOOL running;
+}
+
++ (NSString *)serializationCode {
+ [self doesNotRecognizeSelector:_cmd];
+ return nil;
+}
+
+- (NSDictionary *)serialize {
+ [self doesNotRecognizeSelector:_cmd];
+ return nil;
}
--(NSString*) stringify {
- [self doesNotRecognizeSelector:_cmd];
- return NULL;
++ (Target *)targetDeserialize:(NSDictionary *)serialization
+ withConfigs:(NSArray *)configs {
+ // Don't crash loading old configs (but don't load them either).
+ if (![serialization isKindOfClass:[NSDictionary class]])
+ return nil;
+ NSString *type = serialization[@"type"];
+ for (Class cls in @[[TargetKeyboard class],
+ [TargetConfig class],
+ [TargetMouseMove class],
+ [TargetMouseBtn class],
+ [TargetMouseScroll class],
+ [TargetToggleMouseScope class]
+ ]) {
+ if ([type isEqualToString:[cls serializationCode]])
+ return [cls targetDeserialize:serialization withConfigs:configs];
+ }
+
+ return nil;
}
--(void) trigger {
- [self doesNotRecognizeSelector:_cmd];
+- (void)trigger {
}
--(void) untrigger {
- // no-op by default
+- (void)untrigger {
}
--(BOOL) running {
- return running;
+- (BOOL)update:(JoystickController *)jc {
+ return NO;
}
--(void) setRunning: (BOOL) newRunning {
- if(newRunning == running)
- return;
- if(newRunning)
- [self trigger];
- else
- [self untrigger];
- running = newRunning;
+
+- (BOOL)isContinuous {
+ return NO;
+}
+
+- (BOOL)running {
+ return running;
+}
+
+- (void)setRunning:(BOOL)newRunning {
+ if (running != newRunning) {
+ running = newRunning;
+ if (running)
+ [self trigger];
+ else
+ [self untrigger];
+ }
}
-@synthesize inputValue;
@end