November 30, 2020, 01:12:14 AM

Author Topic: [bb] Easy Mouse System for MaxGui by klepto2 [ 1+ years ago ]  (Read 628 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Easy Mouse System for MaxGui
Author : klepto2
Posted : 1+ years ago

Description : Easy to use Mouse system which overrides the lack of a Mouse_Dragged Event.

Code :
Code: BlitzBasic
  1. The TMouse Type:
  2. [codebox]
  3. Type TMouse
  4.         Field x:Int  = 0
  5.         Field y:Int  = 0
  6.         Field z:Int  = 0
  7.         Field Button:Byte[3]
  8.        
  9.         Function Init:TMouse()
  10.                 Return New TMouse
  11.         End Function
  12.        
  13.         Method Update()
  14.                 Local CUR_Event:TEvent = CurrentEvent
  15.                 Select Cur_Event.id
  16.                         Case EVENT_MOUSEMOVE  
  17.                                 x = Cur_Event.x
  18.                                 y = Cur_Event.y  
  19.                         Case EVENT_MOUSEWHEEL
  20.                                 z:+Cur_Event.data
  21.                         Case EVENT_MOUSEDOWN
  22.                                 Button[cur_event.data-1] = True
  23.                         Case EVENT_MOUSEUP
  24.                                 Button[cur_event.data-1] = False
  25.                 End Select
  26.         End Method  
  27.        
  28.         Method getX:Int()
  29.                 Return x
  30.         End Method  
  31.        
  32.         Method getY:Int()
  33.                 Return y
  34.         End Method
  35.         Method getZ:Int()
  36.                 Return z
  37.         End Method  
  38.        
  39.         Method GetButton:Byte(_Button:Int=0)
  40.                 If _Button >= 0 And _Button <= 2 Then
  41.                         Return Button[_Button]
  42.                 EndIf
  43.         End Method
  44.        
  45. End Type
  46. [/codebox]
  47.  
  48. And a sample:
  49.  
  50. [codebox]
  51. ' createcanvas.bmx
  52.  
  53. Strict
  54.  
  55. Global GAME_WIDTH=800
  56. Global GAME_HEIGHT=600
  57.  
  58. ' create a centered window with client size GAME_WIDTH,GAME_HEIGHT
  59.  
  60. Local wx=(GadgetWidth(Desktop())-GAME_WIDTH)/2
  61. Local wy=(GadgetHeight(Desktop())-GAME_HEIGHT)/2
  62.  
  63. Local window:TGadget=CreateWindow("My Canvas",wx,wy,GAME_WIDTH,GAME_HEIGHT,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS)
  64.  
  65. ' create a canvas for our game
  66.  
  67. Local canvas:TGadget=CreateCanvas(0,0,800,600,window)
  68.  
  69.  
  70. Global Mouse:TMouse = TMouse.Init()
  71.  
  72. ' create an update timer
  73.  
  74. CreateTimer 60
  75.  
  76. While WaitEvent()
  77.  
  78.         Mouse.Update()     'Important the Update Method have to be directly after the WaitEvent() Command
  79.        
  80.         Select EventID()
  81.                 Case EVENT_TIMERTICK
  82.                         RedrawGadget canvas
  83.                        
  84.                 Case EVENT_GADGETPAINT
  85.                         SetGraphics CanvasGraphics(canvas)
  86.                         Cls  
  87.                         SetOrigin -15-Mouse.getZ()/2,-15-Mouse.getZ()/2
  88.                         If Mouse.GetButton(0) = True Then
  89.                                 DrawOval Mouse.getX(),Mouse.getY(),30+Mouse.getZ(),30+Mouse.getZ()     
  90.                         End If  
  91.                         SetOrigin 0,0
  92.                     DrawText "X : "+Mouse.x,20,40
  93.                     DrawText "Y : "+Mouse.y,20,60  
  94.                     DrawText "Z : "+Mouse.z,20,80
  95.                     DrawText Mouse.Button[0] + " : " + Mouse.Button[1] + " : " + Mouse.Button[2],20,100
  96.                    
  97.                         Flip
  98.    
  99.                        
  100.                 Case EVENT_WINDOWCLOSE
  101.                         FreeGadget canvas
  102.                         End
  103.  
  104.                 Case EVENT_APPTERMINATE
  105.                         End
  106.         End Select    
  107. Wend    
  108.  
  109. Type TMouse
  110.         Field x:Int  = 0
  111.         Field y:Int  = 0
  112.         Field z:Int  = 0
  113.         Field Button:Byte[3]
  114.        
  115.         Function Init:TMouse()
  116.                 Return New TMouse
  117.         End Function
  118.        
  119.         Method Update()
  120.                 Local CUR_Event:TEvent = CurrentEvent
  121.                 Select Cur_Event.id
  122.                         Case EVENT_MOUSEMOVE  
  123.                                 x = Cur_Event.x
  124.                                 y = Cur_Event.y  
  125.                         Case EVENT_MOUSEWHEEL
  126.                                 z:+Cur_Event.data
  127.                         Case EVENT_MOUSEDOWN
  128.                                 Button[cur_event.data-1] = True
  129.                         Case EVENT_MOUSEUP
  130.                                 Button[cur_event.data-1] = False
  131.                 End Select
  132.         End Method  
  133.        
  134.         Method getX:Int()
  135.                 Return x
  136.         End Method  
  137.        
  138.         Method getY:Int()
  139.                 Return y
  140.         End Method
  141.         Method getZ:Int()
  142.                 Return z
  143.         End Method  
  144.        
  145.         Method GetButton:Byte(_Button:Int=0)
  146.                 If _Button >= 0 And _Button <= 2 Then
  147.                         Return Button[_Button]
  148.                 EndIf
  149.         End Method
  150.        
  151. End Type
  152. [/codebox]


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal