X-Git-Url: https://git.yukkurigames.com/?a=blobdiff_plain;f=TargetMouseMove.m;h=aa503069441645295ebe4bf9551a485eaa646735;hb=250a974e2d9d2d2dd8dfb8a99b07a77c7e2f637a;hp=dd726e526bfa80aeb0a434dd3894b081809dc8b3;hpb=530009447c5bbd360ac5023979cffc6d32a28df3;p=enjoyable.git diff --git a/TargetMouseMove.m b/TargetMouseMove.m index dd726e5..aa50306 100644 --- a/TargetMouseMove.m +++ b/TargetMouseMove.m @@ -10,16 +10,8 @@ @implementation TargetMouseMove --(void) setInputValue: (int) newIV { - NSPoint mouseLoc = [NSEvent mouseLocation]; - if (dir == 0) - mouseLoc.x += newIV; - else - mouseLoc.y += newIV; - - CGEventRef move = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CGPointMake(mouseLoc.x, mouseLoc.y), kCGMouseButtonLeft); - CGEventPost(kCGHIDEventTap, move); - CFRelease(move); +-(BOOL) isContinuous { + return true; } @synthesize dir; @@ -31,16 +23,50 @@ +(TargetMouseMove*) unstringifyImpl: (NSArray*) comps { NSParameterAssert([comps count] == 2); TargetMouseMove* target = [[TargetMouseMove alloc] init]; - [target setDir: [[comps objectAtIndex:1] integerValue]]; + [target setDir: [comps[1] integerValue]]; return target; } --(void) trigger { - return; -} - --(void) untrigger { - return; +- (BOOL)update:(JoystickController *)jc { + //printf("Dir %d inputValue %f\n", [self dir], [self inputValue]); + if (fabs(self.magnitude) < 0.01) + return NO; // dead zone + + NSRect screenRect = [[NSScreen mainScreen] frame]; + NSInteger height = screenRect.size.height; + + // TODO + float speed = 4.0; + if ([jc frontWindowOnly]) + speed = 12.0; + float dx = 0.0, dy = 0.0; + if ([self dir] == 0) + dx = self.magnitude * speed; + else + dy = self.magnitude * speed; + NSPoint mouseLoc = jc.mouseLoc; + mouseLoc.x += dx; + mouseLoc.y -= dy; + jc.mouseLoc = mouseLoc; + + CGEventRef move = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, + CGPointMake(mouseLoc.x, height - mouseLoc.y), + 0); + CGEventSetType(move, kCGEventMouseMoved); + CGEventSetIntegerValueField(move, kCGMouseEventDeltaX, dx); + CGEventSetIntegerValueField(move, kCGMouseEventDeltaY, dy); + + if ([jc frontWindowOnly]) { + ProcessSerialNumber psn; + GetFrontProcess(&psn); + CGEventPostToPSN(&psn, move); + } + else { + CGEventPost(kCGHIDEventTap, move); + } + + CFRelease(move); + return dx || dy; } @end