X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Target.m;h=42d004c6cd94e2ca67f26eff49896e71d4e0f2db;hp=9666c8a80f27280f02d1d3219e45dd3180ccfd5b;hb=f864d363128de19fc6591b77ae9226b34166d715;hpb=51d43664909060e85c943c4d63cc3cff307ceb1d diff --git a/Target.m b/Target.m index 9666c8a..42d004c 100644 --- a/Target.m +++ b/Target.m @@ -5,37 +5,56 @@ // Created by Sam McCall on 5/05/09. // +#import "Target.h" + +#import "TargetKeyboard.h" +#import "TargetConfig.h" +#import "TargetMouseMove.h" +#import "TargetMouseBtn.h" +#import "TargetMouseScroll.h" +#import "TargetToggleMouseScope.h" + @implementation Target { BOOL running; } -@synthesize magnitude; - -// TODO: Should just be NSCoding? Or like a dictionary? -+(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; ++ (NSString *)serializationCode { + [self doesNotRecognizeSelector:_cmd]; + return nil; } -- (NSString *)stringify { +- (NSDictionary *)serialize { [self doesNotRecognizeSelector:_cmd]; - return NULL; + return nil; +} + +- (BOOL)isEqual:(id)object { + return [object isKindOfClass:Target.class] + && [[self serialize] isEqual:[object serialize]]; +} + +- (NSUInteger)hash { + return [[self serialize] hash]; +} + ++ (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 { @@ -44,7 +63,7 @@ - (void)untrigger { } -- (BOOL)update:(JoystickController *)jc { +- (BOOL)update:(NJInputController *)jc { return NO; }