Module: MiniGL::Mouse

Defined in:
lib/minigl/global.rb

Overview

Exposes methods for controlling mouse events.

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.xObject (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

.yObject (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

.add_click(z_index, action) ⇒ Object

:nodoc:



484
485
486
487
488
# File 'lib/minigl/global.rb', line 484

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

Returns:

  • (Boolean)


441
442
443
# File 'lib/minigl/global.rb', line 441

def button_down?(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

Returns:

  • (Boolean)


432
433
434
# File 'lib/minigl/global.rb', line 432

def button_pressed?(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

Returns:

  • (Boolean)


451
452
453
# File 'lib/minigl/global.rb', line 451

def button_released?(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

Returns:

  • (Boolean)


460
461
462
# File 'lib/minigl/global.rb', line 460

def double_click?(btn)
  @dbl_click[btn]
end

.initializeObject

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.

Returns:

  • (Boolean)


478
479
480
481
# File 'lib/minigl/global.rb', line 478

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

.updateObject

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
420
421
422
423
424
# File 'lib/minigl/global.rb', line 395

def update
  @prev_down = @down.clone
  @down.clear
  @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

  k1 = [Gosu::MsLeft, Gosu::MsMiddle, Gosu::MsRight]
  k2 = [:left, :middle, :right]
  (0..2).each do |i|
    if G.window.button_down? 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