Module: MiniGL::Mouse
- Defined in:
- lib/minigl/global.rb
Overview
Exposes methods for controlling mouse events.
Class Attribute Summary collapse
-
.x ⇒ Object
readonly
The current x-coordinate of the mouse cursor in the screen.
-
.y ⇒ Object
readonly
The current y-coordinate of the mouse cursor in the screen.
Class Method Summary collapse
-
.button_down?(btn) ⇒ Boolean
Returns whether the given button is down in the current frame.
-
.button_pressed?(btn) ⇒ Boolean
Returns whether the given button is down in the current frame and was not down in the frame before.
-
.button_released?(btn) ⇒ Boolean
Returns whether the given button is not down in the current frame, but was down in the frame before.
-
.double_click?(btn) ⇒ Boolean
Returns whether the given button has just been double clicked.
-
.initialize ⇒ Object
This is called by
GameWindow.initialize
. -
.over?(x, y = nil, w = nil, h = nil) ⇒ Boolean
Returns whether the mouse cursor is currently inside the given area.
-
.update ⇒ Object
Updates the mouse position and the state of all buttons.
Class Attribute Details
.x ⇒ Object (readonly)
The current x-coordinate of the mouse cursor in the screen.
362 363 364 |
# File 'lib/minigl/global.rb', line 362 def x @x end |
.y ⇒ Object (readonly)
The current y-coordinate of the mouse cursor in the screen.
365 366 367 |
# File 'lib/minigl/global.rb', line 365 def y @y end |
Class Method Details
.button_down?(btn) ⇒ Boolean
Returns whether the given button is down in the current frame.
Parameters:
- btn
-
Button to be checked. Valid values are
:left
,:middle
and:right
418 419 420 |
# File 'lib/minigl/global.rb', line 418 def (btn) @down[btn] end |
.button_pressed?(btn) ⇒ Boolean
Returns whether the given button is down in the current frame and was not down in the frame before.
Parameters:
- btn
-
Button to be checked. Valid values are
:left
,:middle
and:right
409 410 411 |
# File 'lib/minigl/global.rb', line 409 def (btn) @down[btn] and not @prev_down[btn] end |
.button_released?(btn) ⇒ Boolean
Returns whether the given button is not down in the current frame, but was down in the frame before.
Parameters:
- btn
-
Button to be checked. Valid values are
:left
,:middle
and:right
428 429 430 |
# File 'lib/minigl/global.rb', line 428 def (btn) @prev_down[btn] and not @down[btn] end |
.double_click?(btn) ⇒ Boolean
Returns whether the given button has just been double clicked.
Parameters:
- btn
-
Button to be checked. Valid values are
:left
,:middle
and:right
437 438 439 |
# File 'lib/minigl/global.rb', line 437 def double_click?(btn) @dbl_click[btn] end |
.initialize ⇒ Object
This is called by GameWindow.initialize
. Don’t call it explicitly.
369 370 371 372 373 374 |
# File 'lib/minigl/global.rb', line 369 def initialize @down = {} @prev_down = {} @dbl_click = {} @dbl_click_timer = {} end |
.over?(x, y = nil, w = nil, h = nil) ⇒ Boolean
Returns whether the mouse cursor is currently inside the given area.
Parameters:
- x
-
The x-coordinate of the top left corner of the area.
- y
-
The y-coordinate of the top left corner of the area.
- w
-
The width of the area.
- h
-
The height of the area.
Alternate syntax
over?(rectangle)
Parameters:
- rectangle
-
A rectangle representing the area to be checked.
455 456 457 458 |
# File 'lib/minigl/global.rb', line 455 def over?(x, y = nil, w = nil, h = nil) return @x >= x.x && @x < x.x + x.w && @y >= x.y && @y < x.y + x.h if x.is_a? Rectangle @x >= x && @x < x + w && @y >= y && @y < y + h end |
.update ⇒ Object
Updates the mouse position and the state of all buttons.
377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 |
# File 'lib/minigl/global.rb', line 377 def update @prev_down = @down.clone @down.clear @dbl_click.clear @dbl_click_timer.each do |k, v| if v < G.double_click_delay; @dbl_click_timer[k] += 1 else; @dbl_click_timer.delete k; end end k1 = [Gosu::MsLeft, Gosu::MsMiddle, Gosu::MsRight] k2 = [:left, :middle, :right] (0..2).each do |i| if G.window. k1[i] @down[k2[i]] = true @dbl_click[k2[i]] = true if @dbl_click_timer[k2[i]] @dbl_click_timer.delete k2[i] elsif @prev_down[k2[i]] @dbl_click_timer[k2[i]] = 0 end end @x = G.window.mouse_x.round @y = G.window.mouse_y.round end |