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
-
.add_click(z_index, action) ⇒ Object
:nodoc:.
-
.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.
-
.register_button_down(id) ⇒ Object
:nodoc:.
-
.register_button_up(id) ⇒ Object
:nodoc:.
-
.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.
390 391 392 |
# File 'lib/minigl/global.rb', line 390 def x @x end |
.y ⇒ Object (readonly)
The current y-coordinate of the mouse cursor in the screen.
393 394 395 |
# File 'lib/minigl/global.rb', line 393 def y @y end |
Class Method Details
.add_click(z_index, action) ⇒ Object
:nodoc:
496 497 498 499 500 |
# File 'lib/minigl/global.rb', line 496 def add_click(z_index, action) return if @click && @click[:z_index] > z_index @click = { z_index: z_index, action: action } end |
.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
453 454 455 |
# File 'lib/minigl/global.rb', line 453 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
444 445 446 |
# File 'lib/minigl/global.rb', line 444 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
463 464 465 |
# File 'lib/minigl/global.rb', line 463 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
472 473 474 |
# File 'lib/minigl/global.rb', line 472 def double_click?(btn) @dbl_click[btn] end |
.initialize ⇒ Object
This is called by GameWindow.initialize
. Don’t call it explicitly.
397 398 399 400 401 402 403 |
# File 'lib/minigl/global.rb', line 397 def initialize @down = {} @prev_down = {} @next_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.
490 491 492 493 |
# File 'lib/minigl/global.rb', line 490 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 |
.register_button_down(id) ⇒ Object
:nodoc:
503 504 505 506 |
# File 'lib/minigl/global.rb', line 503 def (id) key = key_from_id(id) @next_down[key] = 1 if key end |
.register_button_up(id) ⇒ Object
:nodoc:
509 510 511 512 |
# File 'lib/minigl/global.rb', line 509 def (id) key = key_from_id(id) @next_down[key] = 0 if key && @next_down[key] end |
.update ⇒ Object
Updates the mouse position and the state of all buttons.
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 |
# File 'lib/minigl/global.rb', line 406 def update @prev_down = @down.clone @down = @next_down.clone @next_down.delete_if { |_, v| v.zero? } @dbl_click.clear if @click @click[:action].call @click = nil end @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 %i[left middle right].each do |key| if @down[key] @dbl_click[key] = true if @dbl_click_timer[key] @dbl_click_timer.delete(key) elsif @prev_down[key] @dbl_click_timer[key] = 0 end end @x = G.window.mouse_x.round @y = G.window.mouse_y.round end |