MouseSpeed

BlitzMax Forums/BlitzMax Beginners Area/MouseSpeed

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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...