X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Target.m;h=35af1844ba195cb9a86f195589b0e8a03966a2e1;hp=e7ea673885798d5461d4c1acffc4ae13e15678d2;hb=44fe6f649589488b367eee7ffff240cecf8669ad;hpb=724979785b445dcba8a9861c2531ae0308bdf40a diff --git a/Target.m b/Target.m index e7ea673..35af184 100644 --- a/Target.m +++ b/Target.m @@ -5,50 +5,78 @@ // 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[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]; - if([typeTag isEqualToString:@"mscroll"]) - return [TargetMouseScroll unstringifyImpl:components]; - if([typeTag isEqualToString:@"mtoggle"]) - return [TargetToggleMouseScope 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; +} + +@synthesize magnitude; + ++ (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: (JoystickController *)jc { - [self doesNotRecognizeSelector:_cmd]; +- (void)trigger { } --(void) untrigger: (JoystickController *)jc { - // no-op by default +- (void)untrigger { } - (BOOL)update:(JoystickController *)jc { return NO; } --(BOOL) isContinuous { - return false; +- (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, running; @end