Code archives/User Input/Extended Mouse Click Events
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
For Blitz3D **Work in Progress** The cMouseEvents.bb code handles all mouse clicking events for a three-button mouse. Include the cMouseEvents.bb file in your project and you'll be able to check for mouse button events: Click, DoubleClick, Down, and Up. The cMouseEvents functions are intended to replace the standard Blitz3D functions MouseHit and MouseDown and provide additional double-click and button-up events. At the TOP of your game loop you'll need to call cMouseEvents_Update() which will capture the states and allow the other cMouseEvents functions to work. For example you might place this function call after you call Cls(). If you include this code, it is recommended that you replace calls to MouseHit and MouseDown with cMouseEvents_ButtonClick and cMouseEvents_ButtonDown. Like MouseHit and MouseDown, the cMouseEvents functions require a button parameter. (1=Left button, 2=Right button, 3=Middle button) There are nine cMouseEvents functions: 1) cMouseEvents_ButtonClick(<ButtonNumber>) 2) cMouseEvents_ButtonDoubleClick(<ButtonNumber>) 3) cMouseEvents_ButtonDown(<ButtonNumber>) 4) cMouseEvents_ButtonUp(<ButtonNumber>) 5) cMouseEvents_SetDoubleClickTimeWindow(<Milliseconds>) 6) cMouseEvents_GetDoubleClickTimeWIndow() 7) cMouseEvents_Initialize() 8) cMouseEvents_Dispose() 9) cMouseEvents_Update() The first four functions are similar to Blitz3D’s MouseHit and MouseDown: Pass in an button number and the function will TRUE if the condition is met. Functions five and six get and set the window of time within which the user has to double click. By default this time is set to 200 milliseconds. You may want to adjust this depending on your project Functions seven and eight setup and dispose of the cMouseEvent object of type cMouseEvents. You probably won’t have to use these functions. cMouseEvents_Initialize() is called from within cMouseEvents.bb to initialize the cMouseEvent object. However, if you call cMouseEvent_Dispose() or delete the cMouseEvent object, you’ll need a way to get it back, hence cMouseEvents_Initialize(). Function nine, cMouseEvents_Update(), updates the cMouseEvent object representing the various states of the three buttons. Call this function at the top of your game loop, or any loop inside which you are checking for a mouse button event. As seen in the example program below, the cMouseEvents_Update() function is called at the top of the loop after Cls is called. Below is a simple example Program that includes the cMouseEvents.bb code and checks for a double left click. Graphics3D 800, 600, 0, 2 Include "cMouseEvents.bb" While Not KeyHit(1) Cls cMouseEvents_Update() Text 10, 10, "Double Left Click to Exit, or Press Escape" If cMouseEvents_ButtonDoubleClick(1) Then Exit EndIf Flip Wend | |||||
;------------------------------------------------------------------------------------------------- ; Mouse Events ;To use, save this code in your project's folder as "cMouseEvents.bb" ;Then type Include "cMouseEvents.bb" at the top of your code ;------------------------------------------------------------------------------------------------- cMouseEvents_Initalize() Global cMouseEvent.cMouseEvents Const cMouseEvents_DefaultDoubleClickTimeWindow = 200 Global cMouseEvents_DoubleClickTimeWindowInMillisecs = cMouseEvents_DefaultDoubleClickTimeWindow Type cMouseEvents Field LeftDown Field LeftUp Field LeftClick Field LeftDoubleClick Field LastTimeUserLeftClicked Field RightDown Field RightUp Field RightClick Field RightDoubleClick Field LastTimeUserRightClicked Field MiddleDown Field MiddleUp Field MiddleClick Field MiddleDoubleClick Field LastTimeUserMiddleClicked End Type Function cMouseEvents_Initalize() If cMouseEvent = Null Then cMouseEvent.cMouseEvents = New cMouseEvents cMouseEvent\LeftDown = 0 cMouseEvent\LeftUp = 0 cMouseEvent\LeftClick = 0 cMouseEvent\LeftDoubleClick = 0 cMouseEvent\LastTimeUserLeftClicked = 0 cMouseEvent\RightDown = 0 cMouseEvent\RightUp = 0 cMouseEvent\RightClick = 0 cMouseEvent\RightDoubleClick = 0 cMouseEvent\LastTimeUserRightClicked = 0 cMouseEvent\MiddleDown = 0 cMouseEvent\MiddleUp = 0 cMouseEvent\MiddleClick = 0 cMouseEvent\MiddleDoubleClick = 0 cMouseEvent\LastTimeUserMiddleClicked = 0 EndIf End Function Function cMouseEvents_Dispose() Delete cMouseEvent End Function Function cMouseEvents_SetDoubleClickTimeWindow(MilliSeconds) If MilliSeconds > 0 Then cMouseEvents_DoubleClickTimeWindowInMillisecs = MilliSeconds Else cMouseEvents_DoubleClickTimeWindowInMillisecs = cMouseEvents_DefaultDoubleClickTimeWindow EndIf End Function Function cMouseEvents_GetDoubleClickTimeWindow() Return cMouseEvents_DoubleClickTimeWindowInMillisecs End Function Function cMouseEvents_Update() Local LeftClick = MouseHit(1) Local RightClick = MouseHit(2) Local MiddleClick = MouseHit(3) Local LeftDown = MouseDown(1) Local RightDown = MouseDown(2) Local MiddleDown = MouseDown(3) Local LeftUp = ( (cMouseEvent\LeftDown=1 ) And (LeftDown=0 ) ) Local RightUp = ( (cMouseEvent\RightDown=1 ) And (RightDown=0 ) ) Local MiddleUp = ( (cMouseEvent\MiddleDown=1) And (MiddleDown=0) ) Local TimeUserLeftClicked = LeftClick * MilliSecs() Local TimeUserRightClicked = RightClick * MilliSecs() Local TimeUserMiddleClicked = MiddleClick * MilliSecs() Local LeftClickDuration = TimeUserLeftClicked - cMouseEvent\LastTimeUserLeftClicked Local RightClickDuration = TimeUserRightClicked - cMouseEvent\LastTimeUserRightClicked Local MiddleClickDuration = TimeUserMiddleClicked - cMouseEvent\LastTimeUserMiddleClicked Local LeftDoubleClick = (LeftClickDuration > 0) And (LeftClickDuration < cMouseEvents_DoubleClickTimeWindowInMillisecs) Local RightDoubleClick = (RightClickDuration > 0) And (RightClickDuration < cMouseEvents_DoubleClickTimeWindowInMillisecs) Local MiddleDoubleClick = (MiddleClickDuration > 0) And (MiddleClickDuration < cMouseEvents_DoubleClickTimeWindowInMillisecs) cMouseEvent\LeftClick = LeftClick cMouseEvent\RightClick = RightClick cMouseEvent\MiddleClick = MiddleClick cMouseEvent\LeftDown = LeftDown cMouseEvent\RightDown = RightDown cMouseEvent\MiddleDown = MiddleDown cMouseEvent\LeftUp = LeftUp cMouseEvent\RightUp = RightUp cMouseEvent\MiddleUp = MiddleUp cMouseEvent\LeftDoubleClick = LeftDoubleClick cMouseEvent\RightDoubleClick = RightDoubleClick cMouseEvent\MiddleDoubleClick = MiddleDoubleClick If LeftDoubleClick Then cMouseEvent\LastTimeUserLeftClicked = 0 ElseIf TimeUserLeftClicked > 0 Then cMouseEvent\LastTimeUserLeftClicked = TimeUserLeftClicked EndIf If RightDoubleClick Then cMouseEvent\LastTimeUserRightClicked = 0 ElseIf TimeUserRightClicked > 0 Then cMouseEvent\LastTimeUserRightClicked = TimeUserRightClicked EndIf If MiddleDoubleClick Then cMouseEvent\LastTimeUserMiddleClicked = 0 ElseIf TimeUserMiddleClicked > 0 Then cMouseEvent\LastTimeUserMiddleClicked = TimeUserMiddleClicked EndIf End Function Function cMouseEvents_ButtonClick(ButtonNumber) If cMouseEvent <> Null Then Select ButtonNumber Case 1 : Return cMouseEvent\LeftClick Case 2 : Return cMouseEvent\RightClick Case 3 : Return cMouseEvent\MiddleClick Default: Return 0 End Select Else Return -1 EndIf End Function Function cMouseEvents_ButtonDown(ButtonNumber) If cMouseEvent <> Null Then Select ButtonNumber Case 1 : Return cMouseEvent\LeftDown Case 2 : Return cMouseEvent\RightDown Case 3 : Return cMouseEvent\MiddleDown Default: Return 0 End Select Else Return -1 EndIf End Function Function cMouseEvents_ButtonUp(ButtonNumber) If cMouseEvent <> Null Then Select ButtonNumber Case 1 : Return cMouseEvent\LeftUp Case 2 : Return cMouseEvent\RightUp Case 3 : Return cMouseEvent\MiddleUp Default: Return 0 End Select Else Return -1 EndIf End Function Function cMouseEvents_ButtonDoubleClick(ButtonNumber) If cMouseEvent <> Null Then Select ButtonNumber Case 1 : Return cMouseEvent\LeftDoubleClick Case 2 : Return cMouseEvent\RightDoubleClick Case 3 : Return cMouseEvent\MiddleDoubleClick Default: Return 0 End Select Else Return -1 EndIf End Function ;------------------------------------------------------------------------------------------------- |
Comments
| ||
There are eight cMouseEvents functions You forgot the ninth and most important one: Update. |
| ||
lol good point! |
| ||
Thanks Nilium, Code has been updated. |
| ||
Nice function set. All the variables are managed nicely inside the type. |
Code Archives Forum