Here's a routine that
almost works. I say almost because on OS X, there's a pause every time you reposition the mouse, which makes this routine unusable:
SuperStrict
Const DEPTH:Int = 32
Const WIDTH:Int = 1024
Const HEIGHT:Int = 768
Const SAFEZONE:Int = 200 ' set this high to disable repositioning; set to 0 to always reposition
Global MouseXSpeed:Int,MouseYSpeed:Int, prevMouseX:Int, prevMouseY:Int, movementZone:Int
Global controllerX#, controllerY#, slowControllerX#, slowControllerY#
Function SampleMouse()
Local curMouseX:Int, curMouseY:Int
curMouseX = MouseX()
curMouseY = MouseY()
MouseXSpeed=curMouseX - prevMouseX
MouseYSpeed=curMouseY - prevMouseY
If Abs(centerX - curMouseX) > movementZone Or Abs(centerY - curMouseY) > movementZone Then
MoveMouse centerX, centerY
prevMouseX = centerX - MouseXSpeed
prevMouseY = centerY - MouseYSpeed
Else
prevMouseX = curMouseX
prevMouseY = curMouseY
EndIf
End Function
Graphics WIDTH, HEIGHT, DEPTH
Global centerX:Int, centerY:Int
Function Reset()
centerX = GraphicsWidth() / 2
centerY = GraphicsHeight() / 2
movementZone = SAFEZONE
controllerX# = centerX
controllerY# = centerY
slowControllerX# = centerX
slowControllerY# = centerY
prevMouseX = centerX
prevMouseY = centerY
mouseXSpeed = 0
mouseYSpeed = 0
MoveMouse centerX, centerY
End Function
HideMouse
Reset()
While Not KeyHit(KEY_ESCAPE)
If MouseHit(1) Then
Reset()
EndIf
SampleMouse()
' reposition "controllers"
controllerX# = controllerX# + Float(MouseXSpeed)
controllerY# = controllerY# + Float(MouseYSpeed)
slowControllerX# = slowControllerX# + (Float(MouseXSpeed) / 2)
slowControllerY# = slowControllerY# + (Float(MouseYSpeed) / 2)
Cls
' draw 'movement zone'
SetColor 50,0,0
DrawRect(centerX - movementZone, centerY - movementZone, movementZone * 2, movementZone * 2)
' draw actual mouse location
SetColor 255, 0, 0
DrawLine(prevMouseX - 4, prevMouseY, prevMouseX + 4, prevMouseY)
DrawLine(prevMouseX, prevMouseY - 4, prevMouseX, prevMouseY + 4)
' draw "controller" locations
SetColor 0,255,0
DrawLine(controllerX - 4, controllerY - 4,controllerX + 4, controllerY + 4)
DrawLine(controllerX + 4, controllerY - 4, controllerX - 4, controllerY + 4)
SetColor 0,255,255
DrawLine(slowControllerX - 4, slowControllerY - 4, slowControllerX + 4, slowControllerY + 4)
DrawLine(slowControllerX + 4, slowControllerY - 4, slowControllerX - 4, slowControllerY + 4)
SetColor 255, 255, 255
DrawText "Click to reset, [ESC] to exit. Green x: full speed controlled object.",0,0
DrawText "Blue x: 1/2 speed controlled object. Red +: actual mouse position.",0, 12
DrawText "Red square: mouse movement area.",0,24
DrawText "MouseXSpeed="+MouseXSpeed,0,36
DrawText "MouseYSpeed="+MouseYSpeed,0,48
Flip
Wend
...basically, anything that involves MoveMouse isn't going to work for OS X. Hence, we either need MoveMouse fixed on OS X or we need a bona-fide MouseSpeed function...