X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=TargetMouseMove.m;fp=TargetMouseMove.m;h=8cf09d2c508a3fb418f3705911b3eac31859dd12;hp=2bcbce378a194557116cdb6e9618a81fb4fe9f50;hb=61f8cdec21ab083b29c22aa11fda54d6005666ca;hpb=ac4ed3987b6aaefc836294f89ff1f569fad6ac6b diff --git a/TargetMouseMove.m b/TargetMouseMove.m index 2bcbce3..8cf09d2 100644 --- a/TargetMouseMove.m +++ b/TargetMouseMove.m @@ -10,20 +10,8 @@ @implementation TargetMouseMove --(void) setInputValue: (int) newIV { - NSRect screenRect = [[NSScreen mainScreen] frame]; - NSInteger height = screenRect.size.height; - NSPoint mouseLoc = [NSEvent mouseLocation]; - if (dir == 0) - mouseLoc.x += newIV; - else - mouseLoc.y += newIV; - - CGEventRef move = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, - CGPointMake(mouseLoc.x, height - mouseLoc.y), - kCGMouseButtonLeft); - CGEventPost(kCGHIDEventTap, move); - CFRelease(move); +-(BOOL) isContinuous { + return true; } @synthesize dir; @@ -39,12 +27,52 @@ return target; } --(void) trigger { +-(void) trigger: (JoystickController *)jc { return; } --(void) untrigger { +-(void) untrigger: (JoystickController *)jc { return; } +-(void) update: (JoystickController *)jc { + //printf("Dir %d inputValue %f\n", [self dir], [self inputValue]); + if (fabs([self inputValue]) < 0.01) + return; // dead zone + + NSRect screenRect = [[NSScreen mainScreen] frame]; + NSInteger height = screenRect.size.height; + + // TODO + double speed = 4.0; + if ([jc frontWindowOnly]) + speed = 12.0; + double dx = 0.0, dy = 0.0; + if ([self dir] == 0) + dx = [self inputValue] * speed; + else + dy = [self inputValue] * speed; + NSPoint *mouseLoc = &jc->mouseLoc; + mouseLoc->x += dx; + mouseLoc->y -= dy; + + 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); +} + @end