X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Target.m;h=097562e52f3237a5b4788d19132a33476e6c6aef;hp=35ebfc2dfef16c8bb0189c518987657c6a045c15;hb=e2a4d830dd9817f6a515a3b1b6aa152d3bb98c2b;hpb=530009447c5bbd360ac5023979cffc6d32a28df3 diff --git a/Target.m b/Target.m index 35ebfc2..097562e 100644 --- a/Target.m +++ b/Target.m @@ -5,51 +5,85 @@ // 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; +} + +- (BOOL)isEqual:(id)object { + return [object isKindOfClass:Target.class] + && [[self serialize] isEqual:[object serialize]]; } --(NSString*) stringify { - [self doesNotRecognizeSelector:_cmd]; - return NULL; +- (NSUInteger)hash { + return [[self serialize] hash]; } --(void) trigger { - [self doesNotRecognizeSelector:_cmd]; ++ (Target *)targetDeserialize:(NSDictionary *)serialization + withMappings:(NSArray *)mappings { + // Don't crash loading old/bad mappings (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 withMappings:mappings]; + } + + return nil; } --(void) untrigger { - // no-op by default +- (void)trigger { } --(BOOL) running { - return running; +- (void)untrigger { } --(void) setRunning: (BOOL) newRunning { - if(newRunning == running) - return; - if(newRunning) - [self trigger]; - else - [self untrigger]; - running = newRunning; + +- (BOOL)update:(NJInputController *)jc { + return NO; +} + +- (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