Class: OIS::MouseManager

Inherits:
Object show all
Defined in:
lib/shattered_view/ogrerb/mouse_manager.rb

Overview

One centralized place for responding to mouse input in shattered TODO: buffered? TODO: make this a singleton(the constructor takes arguments, which makes this difficult)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ MouseManager

Constructor requires an OIS::Mouse object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 9

def initialize(*args)
	if(args.empty?)
		puts "Warning:  Do not initialize MouseManager via the default constructor unless you are running tests."
	else
#				@mouse_events = OIS::MouseEvents.new(*args)
#				@mouse_events.on_press lambda {|e, val| respond_to_press(e, val) }
#				@mouse_events.on_release lambda {|e, val| respond_to_release(e, val) }
#				@mouse_events.on_move lambda {|e| respond_to_move(e) }
		  @ois_mouse = args[0]
		end
	@pressed=0
	@held=0
	@released=0
	@scrolled=0
	@x=0
	@y=0
	@abs_x=0
	@abs_y=0
	@buttons = 0
end

Instance Attribute Details

#abs_xObject (readonly)

Returns the value of attribute abs_x.



6
7
8
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6

def abs_x
  @abs_x
end

#abs_yObject (readonly)

Returns the value of attribute abs_y.



6
7
8
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6

def abs_y
  @abs_y
end

#scrolledObject (readonly)

Returns the value of attribute scrolled.



6
7
8
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6

def scrolled
  @scrolled
end

#xObject (readonly)

Returns the value of attribute x.



6
7
8
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6

def x
  @x
end

#yObject (readonly)

Returns the value of attribute y.



6
7
8
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6

def y
  @y
end

Instance Method Details

#flushObject

Clear out the newly pressed/released events and relative position



31
32
33
34
35
36
37
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 31

def flush
  @pressed=0
  @released=0
	@scrolled=0
	@x=0
	@y=0
end

#held?(button) ⇒ Boolean

Returns true if the button is held(between pressed and released states)

Returns:

  • (Boolean)


98
99
100
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 98

def held?(button)
  return (@held & (1 << button) != 0)
end

#pressed?(button) ⇒ Boolean

Returns true if the button is pressed

Returns:

  • (Boolean)


93
94
95
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 93

def pressed?(button)
  return (@pressed & (1 << button) != 0)
end

#process_events(state) ⇒ Object

Unbuffered input processor



40
41
42
43
44
45
46
47
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 40

def process_events(state)
  #TODO: What to do on buffered input
  if @ois_mouse.nil? || !@ois_mouse.buffered
    flush
    respond_to_buttons(state)
    respond_to_move(state)
  end
end

#released?(button) ⇒ Boolean

Returns true if the button is released

Returns:

  • (Boolean)


103
104
105
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 103

def released?(button)
  return (@released & (1 << button) != 0)
end

#respond_to_buttons(state) ⇒ Object

Determine press, release, and held states



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 50

def respond_to_buttons(state)
  buttons = state.buttons
  i = 0
  # This code checks each bit, and does a press or release depending on the bit.
  while i <= 7
    bit = 1 << i
    current = bit & buttons
    prev = bit & @buttons
    if current < prev
      respond_to_release i
    elsif prev < current
      respond_to_press i
    end
    i+=1
  end
  @buttons = buttons
end

#respond_to_move(state) ⇒ Object

Called when the OIS mouse moved event is fired



69
70
71
72
73
74
75
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 69

def respond_to_move(state)
  @scrolled+=state.Z.rel
  @x+=state.X.rel
  @y+=state.Y.rel
  @abs_x=state.X.abs
  @abs_y=state.Y.abs
end

#respond_to_press(val) ⇒ Object

Called when the OIS mouse pressed event is fired



78
79
80
81
82
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 78

def respond_to_press(val)
  bit = (1 << val)
  @pressed |= bit
  @held |= bit
end

#respond_to_release(val) ⇒ Object

Called when the OIS mouse released event is fired



85
86
87
88
89
90
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 85

def respond_to_release(val)
  bit = (1 << val)
  @released |= bit
  @held &= ~bit
  @pressed &= ~bit
end