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.
380 381 382 |
# File 'lib/minigl/global.rb', line 380 def x @x end |
.y ⇒ Object (readonly)
The current y-coordinate of the mouse cursor in the screen.
383 384 385 |
# File 'lib/minigl/global.rb', line 383 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
436 437 438 |
# File 'lib/minigl/global.rb', line 436 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
427 428 429 |
# File 'lib/minigl/global.rb', line 427 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
446 447 448 |
# File 'lib/minigl/global.rb', line 446 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
455 456 457 |
# File 'lib/minigl/global.rb', line 455 def double_click?(btn) @dbl_click[btn] end |
.initialize ⇒ Object
This is called by GameWindow.initialize
. Don’t call it explicitly.
387 388 389 390 391 392 |
# File 'lib/minigl/global.rb', line 387 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.
473 474 475 476 |
# File 'lib/minigl/global.rb', line 473 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.
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
# File 'lib/minigl/global.rb', line 395 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 |