Module: Miyako::Input
- Defined in:
- lib/Miyako/API/input.rb
Overview
入力管理モジュール
本モジュールでは、キーボードやマウス、ゲームパッドなどの入力装置からの情報を管理する。 メソッドのほとんどは、「押されたかどうか」などの問い合わせメソッドで構成されている。 本モジュールでは、以下のボタンが使用可能。キー(ボタン)すべてシンボルとして定義
- :btn1 ~ :btn12
-
ゲームパッドの 1~12 に対応するボタン、もしくはキーボード上の z~n、a~hの各ボタンに対応
- :down,:left_,:right,:up
-
ゲームパッドの方向ボタンとキーボードの方向キーに対応
- :spc
-
スペースバーに対応
- :ent
-
Enterキーに対応
- :esc
-
エスケープキーに対応
- :alt
-
Altキー(左右)に対応
- :ctl
-
コントロールキー(左右)に対応
- :sft
-
シフトキー(左右)に対応
また、本モジュールのメソッドに “trigger”, “pushed” の2つのメソッドがあるが、 “trigger”系メソッドは、「押されていたら常にtrue」を示すのに対して、 “pushed”系メソッドは、「押した瞬間のみtrue、次の更新(Input.update)の時以降は、 ボタンを放して再び押されるまでfalse」という機能を持つ
Constant Summary collapse
- BTNS =
使用するボタン数(ボタン1〜ボタン12)
12
- @@joy =
nil
- @@quit =
false
- @@toggle_screen_mode =
true
- @@click_start_tick =
0
- @@syms =
[:btn1, :btn2, :btn3, :btn4, :btn5, :btn6, :btn7, :btn8, :btn9, :btn10, :btn11, :btn12, :down, :left, :right, :up, :spc, :ent, :esc, :alt, :ctl, :sft]
- @@mods =
[SDL::Key::MOD_LALT, SDL::Key::MOD_RALT, SDL::Key::MOD_LCTRL, SDL::Key::MOD_RCTRL, SDL::Key::MOD_LSHIFT, SDL::Key::MOD_RSHIFT]
- @@btn2sym =
{SDL::Key::Z => :btn1, SDL::Key::X => :btn2, SDL::Key::C => :btn3, SDL::Key::A => :btn4, SDL::Key::S => :btn5, SDL::Key::D => :btn6, SDL::Key::Q => :btn7, SDL::Key::W => :btn8, SDL::Key::E => :btn9, SDL::Key::V => :btn10, SDL::Key::B => :btn11, SDL::Key::N => :btn12, SDL::Key::KP2 => :down, SDL::Key::DOWN => :down, SDL::Key::KP4 => :left, SDL::Key::LEFT => :left, SDL::Key::KP6 => :right, SDL::Key::RIGHT => :right, SDL::Key::KP8 => :up, SDL::Key::UP => :up, SDL::Key::SPACE => :spc, SDL::Key::RETURN => :ent, SDL::Key::ESCAPE => :esc, SDL::Key::MOD_LALT => :alt, SDL::Key::MOD_RALT => :alt, SDL::Key::MOD_LCTRL => :ctl, SDL::Key::MOD_RCTRL => :ctl, SDL::Key::MOD_LSHIFT => :sft, SDL::Key::MOD_RSHIFT => :sft}
- @@num2bsym =
[:btn1, :btn2, :btn3, :btn4, :btn5, :btn6, :btn7, :btn8, :btn9, :btn10, :btn11, :btn12]
- @@enable_keyboard =
true
- @@enable_joypad =
true
- @@enable_mouse =
true
- @@btn =
{:trigger => create_btns, :pushed => create_btns, :pre => create_btns}
- @@move_amount =
[{:down => 0, :left => -1, :right => 1, :up => 0}, {:down => 1, :left => 0, :right => 0, :up => -1}]
- @@process =
{SDL::Event2::Active => lambda {|e| Input::process_active(e)}, SDL::Event2::Quit => lambda {|e| Input::process_quit(e)}, SDL::Event2::KeyDown => lambda {|e| Input::process_keydown(e)}, SDL::Event2::KeyUp => lambda {|e| Input::process_keyup(e)}, SDL::Event2::JoyAxis => lambda {|e| Input::process_joyaxis(e)}, SDL::Event2::JoyButtonDown => lambda {|e| Input::(e)}, SDL::Event2::JoyButtonUp => lambda {|e| Input::(e)}, SDL::Event2::MouseMotion => lambda {|e| Input::process_mousemotion(e)}, SDL::Event2::MouseButtonDown => lambda {|e| Input::(e)}, SDL::Event2::MouseButtonUp => lambda {|e| Input::(e)}}
- @@mouse =
{:pos => {:x => 0, :y => 0, :dx => 0, :dy => 0}, :trigger => {:left => false, :middle => false, :right => false}, # 2008.06.11 :click => {:left => false, :middle => false, :right => false, :interval => 200}, :drag => {:left => false, :middle => false, :right => false, :x => 0, :y => 0}, :drop => {:left => false, :middle => false, :right => false, :succeed => true}, :inner => false, :focus => false, :mini => false}
- @@mouse_inner =
false
- @@key_focus =
false
- @@app_minimize =
false
- @@initialized =
false
Class Method Summary collapse
- .after_exec ⇒ Object
- .btn_state ⇒ Object
-
.click?(btn) ⇒ Boolean
ボタンがクリックされたかを問い合わせるメソッド ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り このメソッドを呼び出した後、そのボタンの返却値は、Input.updateが呼ばれない限りfalseになることに注意。.
-
.click_interval ⇒ Object
ダブルクリックの間隔を取得する 間隔は、ミリ秒単位で取得できる 返却値:: ボタンのクリック間隔.
-
.click_interval=(v) ⇒ Object
ダブルクリックの間隔を設定する 間隔は、ミリ秒単位で設定できる v:: ボタンのクリック間隔.
-
.click_mouse_button(mode, btn) ⇒ Object
:nodoc:.
-
.create_btns ⇒ Object
:nodoc:.
-
.disenable_toggle_screen_mode ⇒ Object
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えを不可にする.
-
.drag_and_drop?(btn) ⇒ Boolean
ドラッグアンドドロップが行われたかどうかを問い合わせる ドラッグアンドドロップした際に使ったボタンの問い合わせは、 可変個数のシンボルで行う。指定できるボタンは以下の通り.
-
.enable_toggle_screen_mode ⇒ Object
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えの可否を切り替える.
-
.escape? ⇒ Boolean
エスケープキーが押されたかどうかを問い合わせる 返却値:: エスケープキーが押されていれば true を返す.
-
.get_drag_and_drop_range ⇒ Object
ドラッグアンドドロップされた範囲を取得する 取得できる範囲は、以下のハッシュで取得できる。 => ドラッグが行われた x 座標, :drag_y => ドラッグが行われた y 座標, :drop_x => ドロップが行われた x 座業, :drop_y => ドロップが行われた y 座標 返却値:: ドラッグアンドドロップが成功していれば、移動範囲を示すハッシュ、失敗していれば nil を返す.
-
.get_mouse_amount ⇒ Object
マウスの移動量を取得する 求める値は、:x=>n,:y=>nで示すハッシュとする 移動量は、右下方向を正とする 返却値:: マウスカーソルの移動量を示すSize構造体.
-
.get_mouse_position ⇒ Object
マウスの現在位置を取得する 求める値は、:x=>n,:y=>nで示すハッシュとする 原点は、画面領域の左上を:x=>0,:y=>0とする 返却値:: マウスカーソルの位置を示すPoint構造体.
-
.init ⇒ Object
入力部の初期化.
-
.joypad_disable ⇒ Object
ゲームパッドを使用不可にする.
-
.joypad_enable ⇒ Object
ゲームパッドを使用可能にする.
-
.joypad_enable? ⇒ Boolean
ゲームパッドを使用可能かどうか問い合わせる.
-
.key_focus? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
-
.key_focus_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
-
.keyboad_enable? ⇒ Boolean
キーボードを使用可能かどうか問い合わせる.
-
.keyboard_disable ⇒ Object
キーボードを使用不可にする.
-
.keyboard_enable ⇒ Object
キーボードを使用可能にする.
-
.mouse_cursor_hide ⇒ Object
マウスカーソルを隠蔽する.
-
.mouse_cursor_inner? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
-
.mouse_cursor_inner_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
-
.mouse_cursor_show ⇒ Object
マウスカーソルを表示する.
-
.mouse_disable ⇒ Object
マウスを使用不可にする.
- .mouse_dx ⇒ Object
- .mouse_dy ⇒ Object
-
.mouse_enable ⇒ Object
マウスを使用可能にする.
-
.mouse_enable? ⇒ Boolean
マウスを使用可能かどうか問い合わせる.
- .mouse_state ⇒ Object
-
.mouse_trigger?(btn) ⇒ Boolean
ボタンが押されているかを問い合わせるメソッド ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り.
- .mouse_x ⇒ Object
- .mouse_y ⇒ Object
-
.process_active(e) ⇒ Object
:nodoc:.
-
.process_default(e) ⇒ Object
:nodoc:.
-
.process_joyaxis(e) ⇒ Object
:nodoc:.
-
.process_joybuttondown(e) ⇒ Object
:nodoc:.
-
.process_joybuttonup(e) ⇒ Object
:nodoc:.
-
.process_keydown(e) ⇒ Object
:nodoc:.
-
.process_keyup(e) ⇒ Object
:nodoc:.
-
.process_mousebuttondown(e) ⇒ Object
:nodoc:.
-
.process_mousebuttonup(e) ⇒ Object
:nodoc:.
-
.process_mousemotion(e) ⇒ Object
:nodoc:.
-
.process_quit(e) ⇒ Object
:nodoc:.
-
.pushed_all?(*inputs) ⇒ Boolean
指定のボタンがすべて押されたかを問い合わせるメソッド inputs:: ボタンを示すシンボル。複数指定可能 ((例)Input.trigger_all?(:btn1, :btn2) #ボタン1とボタン2が押されている) 返却値:: すべて押されていれば true を返す.
-
.pushed_amount ⇒ Object
ボタンが押された方向を取得する 方向キーが押された情報を、2要素の配列[x,y]で示す。.
-
.pushed_any?(*inputs) ⇒ Boolean
指定のボタンのどれかが押されたかを問い合わせるメソッド inputs:: ボタンを示すシンボル。複数指定可能 ((例)Input.trigger_all?(:btn1, :btn2) #ボタン1かボタン2、もしくはその両方が押されている) 返却値:: すべて押されていれば true を返す.
-
.quit? ⇒ Boolean
ウィンドウの「閉じる」ボタンが選択されたかどうかを問い合わせる Windowsの場合、ウィンドウ右上の「×」ボタンを押したときに相当 返却値:: 「×」ボタンが押されていれば true を返す.
-
.quit_or_escape? ⇒ Boolean
ウィンドウの「×」ボタンか、エスケープキーが押されたかどうかを問い合わせる 返却値:: 「×」ボタンが押されてる、もしくはエスケープキーが押されていれば true を返す.
-
.reset_btn(n) ⇒ Object
:nodoc:.
-
.reset_mouse_button(mode, btn) ⇒ Object
:nodoc:.
-
.set_btn(n) ⇒ Object
:nodoc:.
-
.set_mouse_button(mode, btn) ⇒ Object
:nodoc:.
-
.toggle_screen_mode? ⇒ Boolean
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えができるかどうかを問い合わせる 返却値:: 切り替えができるときは true を返す.
-
.trigger_all?(*inputs) ⇒ Boolean
指定のボタンがすべて押下状態かを問い合わせるメソッド inputs:: ボタンを示すシンボル。複数指定可能 ((例)Input.trigger_all?(:btn1, :btn2) #ボタン1とボタン2が押されている) 返却値:: すべて押下状態ならば true を返す.
-
.trigger_amount ⇒ Object
ボタンが押下状態にある方向を取得する 方向キーが押下状態にある情報を、2要素の配列[x,y]で示す。.
-
.trigger_any?(*inputs) ⇒ Boolean
指定のボタンがどれかが押下状態かを問い合わせるメソッド 引数を省略した場合は、「どれかのキーが押下状態か」を問い合わせる。 inputs:: ボタンを示すシンボル。複数指定可能 ((例)Input.trigger_all?(:btn1, :btn2) #ボタン1かボタン2、もしくはその両方が押されている)。 返却値:: どれかが押下状態ならば true を返す.
-
.update ⇒ Object
入力装置からの情報を更新する 必ず1回は呼び出す必要がある (特に、ゲームループの最初に呼び出す必要がある また、このメソッドを呼び出すのは必ずメインスレッドから呼び出すこと.
-
.window_minimize? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
-
.window_minimize_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる 返却値:: マウスカーソルが画面内ならtrueを返す.
Class Method Details
.after_exec ⇒ Object
332 333 334 335 336 337 338 339 |
# File 'lib/Miyako/API/input.rb', line 332 def Input::after_exec x = @@mouse[:pos][:x] y = @@mouse[:pos][:y] if (@@mouse[:click][:left] or @@mouse[:click][:middle] or @@mouse[:click][:right]) and !@@key_focus and x>=0 and x<Screen.w and y>=0 and y<Screen.h @@key_focus = true [:left, :middle, :right].each{|key| @@mouse[:click][key] = false } end end |
.btn_state ⇒ Object
595 596 597 |
# File 'lib/Miyako/API/input.rb', line 595 def Input::btn_state @@btn end |
.click?(btn) ⇒ Boolean
ボタンがクリックされたかを問い合わせるメソッド
ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り このメソッドを呼び出した後、そのボタンの返却値は、Input.updateが呼ばれない限りfalseになることに注意。
:left : 左ボタン :middle : 中ボタン(ホイールをクリック) :right : 右ボタン :any : 上記ボタンの少なくともどれか一つ
- btn
-
問い合わせるボタンを示すシンボル(可変個)
- 返却値
-
ボタンが押されていれば true を返す
480 481 482 483 484 485 |
# File 'lib/Miyako/API/input.rb', line 480 def Input::click?(btn) return false unless @@enable_mouse btns = (btn == :any ? [:left, :middle, :right] : [btn]) ret = btns.inject(false){|r, f| r |= @@mouse[:click][f]} return ret end |
.click_interval ⇒ Object
ダブルクリックの間隔を取得する
間隔は、ミリ秒単位で取得できる
- 返却値
-
ボタンのクリック間隔
530 531 532 |
# File 'lib/Miyako/API/input.rb', line 530 def Input::click_interval return @@mouse[:click][:interval] end |
.click_interval=(v) ⇒ Object
ダブルクリックの間隔を設定する
間隔は、ミリ秒単位で設定できる
- v
-
ボタンのクリック間隔
537 538 539 |
# File 'lib/Miyako/API/input.rb', line 537 def Input::click_interval=(v) @@mouse[:click][:interval] = v end |
.click_mouse_button(mode, btn) ⇒ Object
:nodoc:
274 275 276 277 278 |
# File 'lib/Miyako/API/input.rb', line 274 def Input::(mode, btn) #:nodoc: @@mouse[mode][:left] = (btn == SDL::Mouse::BUTTON_LEFT) @@mouse[mode][:middle] = (btn == SDL::Mouse::BUTTON_MIDDLE) @@mouse[mode][:right] = (btn == SDL::Mouse::BUTTON_RIGHT) end |
.create_btns ⇒ Object
:nodoc:
77 78 79 80 81 82 83 84 85 |
# File 'lib/Miyako/API/input.rb', line 77 def Input::create_btns #:nodoc: return {:btn1 => 0, :btn2 => 0, :btn3 => 0, :btn4 => 0, :btn5 => 0, :btn6 => 0, :btn7 => 0, :btn8 => 0, :btn9 => 0, :btn10 => 0, :btn11 => 0, :btn12 => 0, :down => 0, :left => 0, :right => 0, :up => 0, :spc => 0, :ent => 0, :esc => 0, :alt => 0, :ctl => 0, :sft => 0} end |
.disenable_toggle_screen_mode ⇒ Object
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えを不可にする
585 586 587 |
# File 'lib/Miyako/API/input.rb', line 585 def Input::disenable_toggle_screen_mode @@toggle_screen_mode = false end |
.drag_and_drop?(btn) ⇒ Boolean
ドラッグアンドドロップが行われたかどうかを問い合わせる
ドラッグアンドドロップした際に使ったボタンの問い合わせは、 可変個数のシンボルで行う。指定できるボタンは以下の通り
- :left
-
左ボタン
- :middle
-
中ボタン(ホイールをクリック)
- :right
-
右ボタン
- :any
-
上記ボタンの少なくともどれか一つ
- btn
-
問い合わせるボタンを示すシンボル(可変個)
- 返却値
-
ドラッグアンドドロップが成功していれば、true を返す
513 514 515 516 |
# File 'lib/Miyako/API/input.rb', line 513 def Input::drag_and_drop?(btn) return false unless @@enable_mouse return @@mouse[:drop][:succeed] && (btn == :any ? (@@mouse[:drop][:left] || @@mouse[:drop][:middle] || @@mouse[:drop][:right]) : @@mouse[:click][btn]) end |
.enable_toggle_screen_mode ⇒ Object
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えの可否を切り替える
580 581 582 |
# File 'lib/Miyako/API/input.rb', line 580 def Input::enable_toggle_screen_mode @@toggle_screen_mode = true end |
.escape? ⇒ Boolean
エスケープキーが押されたかどうかを問い合わせる
- 返却値
-
エスケープキーが押されていれば true を返す
415 416 417 |
# File 'lib/Miyako/API/input.rb', line 415 def Input::escape? return (@@btn[:pushed][:esc] == 1) end |
.get_drag_and_drop_range ⇒ Object
ドラッグアンドドロップされた範囲を取得する
取得できる範囲は、以下のハッシュで取得できる。 => ドラッグが行われた x 座標, :drag_y => ドラッグが行われた y 座標, :drop_x => ドロップが行われた x 座業, :drop_y => ドロップが行われた y 座標
- 返却値
-
ドラッグアンドドロップが成功していれば、移動範囲を示すハッシュ、失敗していれば nil を返す
522 523 524 525 |
# File 'lib/Miyako/API/input.rb', line 522 def Input::get_drag_and_drop_range return nil unless @@enable_mouse return @@mouse[:drop][:succeed] ? {:drag_x => @@mouse[:drag][:x], :drag_y => @@mouse[:drag][:y], :drop_x => @@mouse[:pos][:x], :drop_y => @@mouse[:pos][:y]} : nil end |
.get_mouse_amount ⇒ Object
マウスの移動量を取得する
求める値は、:x=>n,:y=>nで示すハッシュとする 移動量は、右下方向を正とする
- 返却値
-
マウスカーソルの移動量を示すSize構造体
464 465 466 467 |
# File 'lib/Miyako/API/input.rb', line 464 def Input::get_mouse_amount return Size.new(0,0) unless @@enable_mouse return Size.new(@@mouse[:pos][:dx],@@mouse[:pos][:dy]) end |
.get_mouse_position ⇒ Object
マウスの現在位置を取得する
求める値は、:x=>n,:y=>nで示すハッシュとする 原点は、画面領域の左上を:x=>0,:y=>0とする
- 返却値
-
マウスカーソルの位置を示すPoint構造体
439 440 441 442 |
# File 'lib/Miyako/API/input.rb', line 439 def Input::get_mouse_position return Point.new(-1,-1) unless @@enable_mouse return Point.new(@@mouse[:pos][:x],@@mouse[:pos][:y]) end |
.init ⇒ Object
入力部の初期化
120 121 122 123 124 |
# File 'lib/Miyako/API/input.rb', line 120 def Input.init raise MiyakoError, "Already initialized!" if @@initialized @@joy = SDL::Joystick.open(0) if SDL::Joystick.num >= 1 @@initialized = true end |
.joypad_disable ⇒ Object
ゲームパッドを使用不可にする
147 148 149 |
# File 'lib/Miyako/API/input.rb', line 147 def Input.joypad_disable @@enable_joypad = false end |
.joypad_enable ⇒ Object
ゲームパッドを使用可能にする
142 143 144 |
# File 'lib/Miyako/API/input.rb', line 142 def Input.joypad_enable @@enable_joypad= true end |
.joypad_enable? ⇒ Boolean
ゲームパッドを使用可能かどうか問い合わせる
152 153 154 |
# File 'lib/Miyako/API/input.rb', line 152 def Input.joypad_enable? @@enable_joypad end |
.key_focus? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
550 551 552 |
# File 'lib/Miyako/API/input.rb', line 550 def Input::key_focus? return @@key_focus end |
.key_focus_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
569 570 571 |
# File 'lib/Miyako/API/input.rb', line 569 def Input::key_focus_change? return @@mouse[:focus] end |
.keyboad_enable? ⇒ Boolean
キーボードを使用可能かどうか問い合わせる
137 138 139 |
# File 'lib/Miyako/API/input.rb', line 137 def Input.keyboad_enable? @@enable_keyboard end |
.keyboard_disable ⇒ Object
キーボードを使用不可にする
132 133 134 |
# File 'lib/Miyako/API/input.rb', line 132 def Input.keyboard_disable @@enable_keyboard = false end |
.keyboard_enable ⇒ Object
キーボードを使用可能にする
127 128 129 |
# File 'lib/Miyako/API/input.rb', line 127 def Input.keyboard_enable @@enable_keyboard = true end |
.mouse_cursor_hide ⇒ Object
マウスカーソルを隠蔽する
431 432 433 |
# File 'lib/Miyako/API/input.rb', line 431 def Input::mouse_cursor_hide SDL::Mouse.hide end |
.mouse_cursor_inner? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
543 544 545 546 |
# File 'lib/Miyako/API/input.rb', line 543 def Input::mouse_cursor_inner? return false unless @@enable_mouse return @@mouse_inner end |
.mouse_cursor_inner_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
562 563 564 565 |
# File 'lib/Miyako/API/input.rb', line 562 def Input::mouse_cursor_inner_change? return false unless @@enable_mouse return @@mouse[:inner] end |
.mouse_cursor_show ⇒ Object
マウスカーソルを表示する
426 427 428 |
# File 'lib/Miyako/API/input.rb', line 426 def Input::mouse_cursor_show SDL::Mouse.show end |
.mouse_disable ⇒ Object
マウスを使用不可にする
162 163 164 |
# File 'lib/Miyako/API/input.rb', line 162 def Input.mouse_disable @@enable_mouse = false end |
.mouse_dx ⇒ Object
452 453 454 |
# File 'lib/Miyako/API/input.rb', line 452 def Input::mouse_dx return @@enable_mouse ? @@mouse[:pos][:dx] : 0 end |
.mouse_dy ⇒ Object
456 457 458 |
# File 'lib/Miyako/API/input.rb', line 456 def Input::mouse_dy return @@enable_mouse ? @@mouse[:pos][:dy] : 0 end |
.mouse_enable ⇒ Object
マウスを使用可能にする
157 158 159 |
# File 'lib/Miyako/API/input.rb', line 157 def Input.mouse_enable @@enable_mouse = true end |
.mouse_enable? ⇒ Boolean
マウスを使用可能かどうか問い合わせる
167 168 169 |
# File 'lib/Miyako/API/input.rb', line 167 def Input.mouse_enable? @@enable_mouse end |
.mouse_state ⇒ Object
599 600 601 |
# File 'lib/Miyako/API/input.rb', line 599 def Input::mouse_state @@mouse end |
.mouse_trigger?(btn) ⇒ Boolean
ボタンが押されているかを問い合わせるメソッド
ボタンの問い合わせは可変個数のシンボルで行う。指定できるボタンは以下の通り
- :left
-
左ボタン
- :middle
-
中ボタン(ホイールをクリック)
- :right
-
右ボタン
- :any
-
上記ボタンの少なくともどれか一つ
- btn
-
問い合わせるボタンを示すシンボル(可変個)
- 返却値
-
ボタンが押されていれば true を返す
497 498 499 500 |
# File 'lib/Miyako/API/input.rb', line 497 def Input::mouse_trigger?(btn) return false unless @@enable_mouse return btn == :any ? (@@mouse[:trigger][:left] || @@mouse[:trigger][:middle] || @@mouse[:trigger][:right]) : @@mouse[:trigger][btn] end |
.mouse_x ⇒ Object
444 445 446 |
# File 'lib/Miyako/API/input.rb', line 444 def Input::mouse_x return @@enable_mouse ? @@mouse[:pos][:x] : -1 end |
.mouse_y ⇒ Object
448 449 450 |
# File 'lib/Miyako/API/input.rb', line 448 def Input::mouse_y return @@enable_mouse ? @@mouse[:pos][:y] : -1 end |
.process_active(e) ⇒ Object
:nodoc:
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
# File 'lib/Miyako/API/input.rb', line 254 def Input::process_active(e) #:nodoc: if e.state & 1 == 1 return unless @@enable_mouse @@mouse[:inner] = true @@mouse_inner = e.gain end if e.state & 2 == 2 @@mouse[:focus] = true @@key_focus = e.gain [:left, :middle, :right].each{|key| @@mouse[:click][key] = false } end if e.state & 4 == 4 @@mouse[:mini] = true @@app_minimize = !e.gain end end |
.process_default(e) ⇒ Object
:nodoc:
271 272 |
# File 'lib/Miyako/API/input.rb', line 271 def Input::process_default(e) #:nodoc: end |
.process_joyaxis(e) ⇒ Object
:nodoc:
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/Miyako/API/input.rb', line 187 def Input::process_joyaxis(e) #:nodoc: return unless @@enable_joypad if e.axis == 0 if e.value >= 16384 set_btn(:right) elsif e.value < -16384 set_btn(:left) else reset_btn(:left) reset_btn(:right) end elsif e.axis == 1 if e.value >= 16384 set_btn(:down) elsif e.value < -16384 set_btn(:up) else reset_btn(:down) reset_btn(:up) end end end |
.process_joybuttondown(e) ⇒ Object
:nodoc:
210 211 212 213 |
# File 'lib/Miyako/API/input.rb', line 210 def Input::(e) #:nodoc: return unless @@enable_joypad set_btn(@@num2bsym[e.]) if e. < BTNS end |
.process_joybuttonup(e) ⇒ Object
:nodoc:
215 216 217 218 |
# File 'lib/Miyako/API/input.rb', line 215 def Input::(e) #:nodoc: return unless @@enable_joypad reset_btn(@@num2bsym[e.]) if e. < BTNS end |
.process_keydown(e) ⇒ Object
:nodoc:
175 176 177 178 179 |
# File 'lib/Miyako/API/input.rb', line 175 def Input::process_keydown(e) #:nodoc: return unless @@enable_keyboard set_btn(@@btn2sym[e.sym]) if @@btn2sym.include?(e.sym) @@mods.each{|m| set_btn(@@btn2sym[m]) if e.mod & m == m} end |
.process_keyup(e) ⇒ Object
:nodoc:
181 182 183 184 185 |
# File 'lib/Miyako/API/input.rb', line 181 def Input::process_keyup(e) #:nodoc: return unless @@enable_keyboard reset_btn(@@btn2sym[e.sym]) if @@btn2sym.include?(e.sym) @@mods.each{|m| reset_btn(@@btn2sym[m]) if e.mod & m == m} end |
.process_mousebuttondown(e) ⇒ Object
:nodoc:
228 229 230 231 232 233 234 235 236 237 |
# File 'lib/Miyako/API/input.rb', line 228 def Input::(e) #:nodoc: return unless @@enable_mouse (:trigger, e.) return unless @@mouse_inner (:click, e.) (:drag, e.) @@mouse[:drag][:x] = @@mouse[:pos][:x] @@mouse[:drag][:y] = @@mouse[:pos][:y] @@click_start_tick = SDL.getTicks end |
.process_mousebuttonup(e) ⇒ Object
:nodoc:
239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/Miyako/API/input.rb', line 239 def Input::(e) #:nodoc: return unless @@enable_mouse (:trigger, e.) click_interval = SDL.getTicks - @@click_start_tick if click_interval < @@mouse[:click][:interval] [:left, :middle, :right].each{|b| @@mouse[:drag][b] = false } else @@mouse[:drop][:left] = @@mouse[:drag][:left] and (e. == SDL::Mouse::BUTTON_LEFT) @@mouse[:drop][:middle] = @@mouse[:drag][:left] and (e. == SDL::Mouse::BUTTON_MIDDLE) @@mouse[:drop][:right] = @@mouse[:drag][:left] and (e. == SDL::Mouse::BUTTON_RIGHT) @@mouse[:drop][:succeed] = [:left,:middle,:right].inject(false){|r,i| r |= @@mouse[:drag][i]} && @@mouse[:inner] [:left, :middle, :right].each{|b| @@mouse[:drag][b] = false } end end |
.process_mousemotion(e) ⇒ Object
:nodoc:
220 221 222 223 224 225 226 |
# File 'lib/Miyako/API/input.rb', line 220 def Input::process_mousemotion(e) #:nodoc: return unless @@enable_mouse @@mouse[:pos][:x] = e.x @@mouse[:pos][:y] = e.y @@mouse[:pos][:dx] = e.xrel @@mouse[:pos][:dy] = e.yrel end |
.process_quit(e) ⇒ Object
:nodoc:
171 172 173 |
# File 'lib/Miyako/API/input.rb', line 171 def Input::process_quit(e) #:nodoc: @@quit = true end |
.pushed_all?(*inputs) ⇒ Boolean
指定のボタンがすべて押されたかを問い合わせるメソッド
- inputs
-
ボタンを示すシンボル。複数指定可能
((例)Input.trigger_all?(:btn1, :btn2) #ボタン1とボタン2が押されている)
- 返却値
-
すべて押されていれば true を返す
364 365 366 367 |
# File 'lib/Miyako/API/input.rb', line 364 def Input::pushed_all?(*inputs) raise MiyakoError, "No setting any buttons! : trigger_any?" if inputs.length == 0 return inputs.inject(true){|r, v| r &= (@@btn[:pushed][v] == 1)} end |
.pushed_amount ⇒ Object
ボタンが押された方向を取得する
方向キーが押された情報を、2要素の配列[x,y]で示す。
各要素の値は以下の通り。 x ・・・ -1:左、0:変化なし、1:右
y ・・・ -1:上、0:変化なし、1:下
- 返却値
-
移動方向を示す配列
400 401 402 403 404 |
# File 'lib/Miyako/API/input.rb', line 400 def Input::pushed_amount amt = [0, 0] [:down, :left, :right, :up].each{|d| [0, 1].each{|n| amt[n] += @@btn[:pushed][d] * @@move_amount[n][d]} } return amt end |
.pushed_any?(*inputs) ⇒ Boolean
指定のボタンのどれかが押されたかを問い合わせるメソッド
- inputs
-
ボタンを示すシンボル。複数指定可能
((例)Input.trigger_all?(:btn1, :btn2) #ボタン1かボタン2、もしくはその両方が押されている)
- 返却値
-
すべて押されていれば true を返す
373 374 375 376 |
# File 'lib/Miyako/API/input.rb', line 373 def Input::pushed_any?(*inputs) inputs = @@syms if inputs.length == 0 return inputs.inject(false){|r, v| r |= (@@btn[:pushed][v] == 1)} end |
.quit? ⇒ Boolean
ウィンドウの「閉じる」ボタンが選択されたかどうかを問い合わせる
Windowsの場合、ウィンドウ右上の「×」ボタンを押したときに相当
- 返却値
-
「×」ボタンが押されていれば true を返す
409 410 411 |
# File 'lib/Miyako/API/input.rb', line 409 def Input::quit? return @@quit end |
.quit_or_escape? ⇒ Boolean
ウィンドウの「×」ボタンか、エスケープキーが押されたかどうかを問い合わせる
- 返却値
-
「×」ボタンが押されてる、もしくはエスケープキーが押されていれば true を返す
421 422 423 |
# File 'lib/Miyako/API/input.rb', line 421 def Input::quit_or_escape? return @@quit || (@@btn[:pushed][:esc] == 1) end |
.reset_btn(n) ⇒ Object
:nodoc:
299 300 301 |
# File 'lib/Miyako/API/input.rb', line 299 def Input::reset_btn(n) #:nodoc: @@btn.each_key{|k| @@btn[k][n] = 0} end |
.reset_mouse_button(mode, btn) ⇒ Object
:nodoc:
286 287 288 289 290 |
# File 'lib/Miyako/API/input.rb', line 286 def Input::(mode, btn) #:nodoc: @@mouse[mode][:left] = false if (btn == SDL::Mouse::BUTTON_LEFT) @@mouse[mode][:middle] = false if (btn == SDL::Mouse::BUTTON_MIDDLE) @@mouse[mode][:right] = false if (btn == SDL::Mouse::BUTTON_RIGHT) end |
.set_btn(n) ⇒ Object
:nodoc:
292 293 294 295 296 297 |
# File 'lib/Miyako/API/input.rb', line 292 def Input::set_btn(n) #:nodoc: @@btn[:trigger][n] = 1 return if @@btn[:pre][n] == 1 @@btn[:pushed][n] = 1 @@btn[:pre][n] = 1 end |
.set_mouse_button(mode, btn) ⇒ Object
:nodoc:
280 281 282 283 284 |
# File 'lib/Miyako/API/input.rb', line 280 def Input::(mode, btn) #:nodoc: @@mouse[mode][:left] = (btn == SDL::Mouse::BUTTON_LEFT) @@mouse[mode][:middle] = (btn == SDL::Mouse::BUTTON_MIDDLE) @@mouse[mode][:right] = (btn == SDL::Mouse::BUTTON_RIGHT) end |
.toggle_screen_mode? ⇒ Boolean
Alt+Enterキーを押したときにフル・ウィンドウモード切り替えができるかどうかを問い合わせる
- 返却値
-
切り替えができるときは true を返す
591 592 593 |
# File 'lib/Miyako/API/input.rb', line 591 def Input::toggle_screen_mode? return @@toggle_screen_mode end |
.trigger_all?(*inputs) ⇒ Boolean
指定のボタンがすべて押下状態かを問い合わせるメソッド
- inputs
-
ボタンを示すシンボル。複数指定可能
((例)Input.trigger_all?(:btn1, :btn2) #ボタン1とボタン2が押されている)
- 返却値
-
すべて押下状態ならば true を返す
345 346 347 348 |
# File 'lib/Miyako/API/input.rb', line 345 def Input::trigger_all?(*inputs) raise MiyakoError, "No setting any buttons! : trigger_all?" if inputs.length == 0 return inputs.inject(false){|r, v| r &= (@@btn[:trigger][v] == 1)} end |
.trigger_amount ⇒ Object
ボタンが押下状態にある方向を取得する
方向キーが押下状態にある情報を、2要素の配列[x,y]で示す。
各要素の値は以下の通り。 x ・・・ -1:左、0:変化なし、1:右
y ・・・ -1:上、0:変化なし、1:下
- 返却値
-
移動方向を示す配列
386 387 388 389 390 |
# File 'lib/Miyako/API/input.rb', line 386 def Input::trigger_amount amt = [0, 0] [:down, :left, :right, :up].each{|d| [0, 1].each{|n| amt[n] += @@btn[:trigger][d] * @@move_amount[n][d]} } return amt end |
.trigger_any?(*inputs) ⇒ Boolean
指定のボタンがどれかが押下状態かを問い合わせるメソッド
引数を省略した場合は、「どれかのキーが押下状態か」を問い合わせる。
- inputs
-
ボタンを示すシンボル。複数指定可能
((例)Input.trigger_all?(:btn1, :btn2) #ボタン1かボタン2、もしくはその両方が押されている)。
- 返却値
-
どれかが押下状態ならば true を返す
355 356 357 358 |
# File 'lib/Miyako/API/input.rb', line 355 def Input::trigger_any?(*inputs) inputs = @@syms if inputs.length == 0 return inputs.inject(false){|r, v| r |= (@@btn[:trigger][v] == 1)} end |
.update ⇒ Object
入力装置からの情報を更新する
必ず1回は呼び出す必要がある (特に、ゲームループの最初に呼び出す必要がある また、このメソッドを呼び出すのは必ずメインスレッドから呼び出すこと
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 |
# File 'lib/Miyako/API/input.rb', line 307 def Input::update SDL::Joystick.updateAll @@btn[:pushed].each_key{|p| @@btn[:pushed][p] = 0 } [:dx, :dy].each{|e| @@mouse[:pos][e] = 0 } [:left, :middle, :right].each{|e| @@mouse[:click][e] = false @@mouse[:drop][e] = false } @@mouse[:inner] = false @@mouse[:focus] = false @@mouse[:mini] = false e_list = [] while e = SDL::Event2.poll e_list << e end e_list.reverse.each{|e| @@process[e.class].call(e) if @@btn[:trigger][:alt] == 1 && @@btn[:pushed][:ent]==1 && @@toggle_screen_mode Screen.toggle_mode @@btn[:trigger][:alt] = 0 @@btn[:pushed][:ent] = 0 end } end |
.window_minimize? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
556 557 558 |
# File 'lib/Miyako/API/input.rb', line 556 def Input::window_minimize? return @@app_minimize end |
.window_minimize_change? ⇒ Boolean
マウスカーソルが画面の内側に有るかどうかを問い合わせる
- 返却値
-
マウスカーソルが画面内ならtrueを返す
575 576 577 |
# File 'lib/Miyako/API/input.rb', line 575 def Input::window_minimize_change? return @@mouse[:mini] end |