Class: OIS::MouseManager
- 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
-
#abs_x ⇒ Object
readonly
Returns the value of attribute abs_x.
-
#abs_y ⇒ Object
readonly
Returns the value of attribute abs_y.
-
#scrolled ⇒ Object
readonly
Returns the value of attribute scrolled.
-
#x ⇒ Object
readonly
Returns the value of attribute x.
-
#y ⇒ Object
readonly
Returns the value of attribute y.
Instance Method Summary collapse
-
#flush ⇒ Object
Clear out the newly pressed/released events and relative position.
-
#held?(button) ⇒ Boolean
Returns true if the button is held(between pressed and released states).
-
#initialize(*args) ⇒ MouseManager
constructor
Constructor requires an OIS::Mouse object.
-
#pressed?(button) ⇒ Boolean
Returns true if the button is pressed.
-
#process_events(state) ⇒ Object
Unbuffered input processor.
-
#released?(button) ⇒ Boolean
Returns true if the button is released.
-
#respond_to_buttons(state) ⇒ Object
Determine press, release, and held states.
-
#respond_to_move(state) ⇒ Object
Called when the OIS mouse moved event is fired.
-
#respond_to_press(val) ⇒ Object
Called when the OIS mouse pressed event is fired.
-
#respond_to_release(val) ⇒ Object
Called when the OIS mouse released event is fired.
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_x ⇒ Object (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_y ⇒ Object (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 |
#scrolled ⇒ Object (readonly)
Returns the value of attribute scrolled.
6 7 8 |
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6 def scrolled @scrolled end |
#x ⇒ Object (readonly)
Returns the value of attribute x.
6 7 8 |
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 6 def x @x end |
#y ⇒ Object (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
#flush ⇒ Object
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)
98 99 100 |
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 98 def held?() return (@held & (1 << ) != 0) end |
#pressed?(button) ⇒ Boolean
Returns true if the button is pressed
93 94 95 |
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 93 def pressed?() return (@pressed & (1 << ) != 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 (state) respond_to_move(state) end end |
#released?(button) ⇒ Boolean
Returns true if the button is released
103 104 105 |
# File 'lib/shattered_view/ogrerb/mouse_manager.rb', line 103 def released?() return (@released & (1 << ) != 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 (state) = state. 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 & prev = bit & @buttons if current < prev respond_to_release i elsif prev < current respond_to_press i end i+=1 end @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 |