Class: Carbuncle::Input::Action
- Defined in:
- gems/carbuncle-input/mrblib/input.rb
Instance Attribute Summary collapse
-
#controller ⇒ Object
readonly
Returns the value of attribute controller.
Instance Method Summary collapse
- #axis_down? ⇒ Boolean
- #axis_up? ⇒ Boolean
- #bind_gamepad(key, index = -1)) ⇒ Object (also: #gamepad)
- #bind_gamepad_axis(direction, index = -1,, positive: true, deadzone: 0.3, axis: :any) ⇒ Object (also: #axis)
- #bind_keyboard(key) ⇒ Object (also: #key)
- #clear ⇒ Object
- #down? ⇒ Boolean
- #gamepad_axis(binding) ⇒ Object
- #gamepad_binding_down?(gamepad) ⇒ Boolean
- #gamepad_binding_press?(gamepad) ⇒ Boolean
- #gamepad_binding_release?(gamepad) ⇒ Boolean
- #gamepad_binding_up?(gamepad) ⇒ Boolean
- #gamepad_down? ⇒ Boolean
- #gamepad_press? ⇒ Boolean
- #gamepad_release? ⇒ Boolean
- #gamepad_up? ⇒ Boolean
- #gamepads(index) ⇒ Object
-
#initialize(controller) ⇒ Action
constructor
A new instance of Action.
- #keyboard_down? ⇒ Boolean
- #keyboard_press? ⇒ Boolean
- #keyboard_release? ⇒ Boolean
- #keyboard_up? ⇒ Boolean
- #left_axis(binding) ⇒ Object
- #press? ⇒ Boolean
- #release? ⇒ Boolean
- #right_axis(binding) ⇒ Object
- #up? ⇒ Boolean
Constructor Details
#initialize(controller) ⇒ Action
Returns a new instance of Action.
39 40 41 42 43 44 45 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 39 def initialize(controller) @controller = controller @key_bindings = [] @gamepad_bindings = [] @gamepad_axis = [] @last_axis = 0 end |
Instance Attribute Details
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
37 38 39 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 37 def controller @controller end |
Instance Method Details
#axis_down? ⇒ Boolean
152 153 154 155 156 157 158 159 160 161 162 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 152 def axis_down? @gamepad_axis.any? do |binding| gamepad_axis(binding).any? do |value| if binding[:positive] value > binding[:deadzone] else value < -binding[:deadzone] end end end end |
#axis_up? ⇒ Boolean
120 121 122 123 124 125 126 127 128 129 130 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 120 def axis_up? @gamepad_axis.any? do |binding| gamepad_axis(binding).any? do |value| if binding[:positive] value <= binding[:deadzone] else value >= -binding[:deadzone] end end end end |
#bind_gamepad(key, index = -1)) ⇒ Object Also known as: gamepad
54 55 56 57 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 54 def bind_gamepad(key, index = -1) @gamepad_bindings.push([index, key]) self end |
#bind_gamepad_axis(direction, index = -1,, positive: true, deadzone: 0.3, axis: :any) ⇒ Object Also known as: axis
61 62 63 64 65 66 67 68 69 70 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 61 def bind_gamepad_axis(direction, index = -1, positive: true, deadzone: 0.3, axis: :any) @gamepad_axis.push({ direction: direction, index: index, axis: axis, positive: positive, deadzone: deadzone }) self end |
#bind_keyboard(key) ⇒ Object Also known as: key
47 48 49 50 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 47 def bind_keyboard(key) @key_bindings << key self end |
#clear ⇒ Object
74 75 76 77 78 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 74 def clear @key_bindings.clear @gamepad_bindings.clear @gamepad_axis.clear end |
#down? ⇒ Boolean
132 133 134 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 132 def down? keyboard_down? || gamepad_down? || axis_down? end |
#gamepad_axis(binding) ⇒ Object
187 188 189 190 191 192 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 187 def gamepad_axis(binding) return left_axis(binding) + right_axis(binding) if binding[:axis] == :any return right_axis(binding) if binding[:axis] == :right left_axis(binding) end |
#gamepad_binding_down?(gamepad) ⇒ Boolean
147 148 149 150 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 147 def gamepad_binding_down?(gamepad) index, key = gamepad gamepads(index).any? { |pad| pad.down?(key) } end |
#gamepad_binding_press?(gamepad) ⇒ Boolean
98 99 100 101 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 98 def gamepad_binding_press?(gamepad) index, key = gamepad gamepads(index).any? { |pad| pad.press?(key) } end |
#gamepad_binding_release?(gamepad) ⇒ Boolean
182 183 184 185 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 182 def gamepad_binding_release?(gamepad) index, key = gamepad gamepads(index).any? { |pad| pad.release?(key) } end |
#gamepad_binding_up?(gamepad) ⇒ Boolean
115 116 117 118 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 115 def gamepad_binding_up?(gamepad) index, key = gamepad gamepads(index).any? { |pad| pad.up?(key) } end |
#gamepad_down? ⇒ Boolean
143 144 145 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 143 def gamepad_down? @gamepad_bindings.any? { |i| gamepad_binding_down?(i) } end |
#gamepad_press? ⇒ Boolean
91 92 93 94 95 96 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 91 def gamepad_press? return false unless @gamepad_bindings.any? { |i| gamepad_binding_press?(i) } controller.last_source = :gamepad return true end |
#gamepad_release? ⇒ Boolean
175 176 177 178 179 180 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 175 def gamepad_release? return false unless @gamepad_bindings.any? { |i| gamepad_binding_release?(i) } controller.last_source = :gamepad return true end |
#gamepad_up? ⇒ Boolean
111 112 113 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 111 def gamepad_up? @gamepad_bindings.any? { |i| gamepad_binding_up?(i) } end |
#gamepads(index) ⇒ Object
220 221 222 223 224 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 220 def gamepads(index) return Carbuncle::Gamepad.each if index < 0 [Carbuncle::Gamepad[index]] end |
#keyboard_down? ⇒ Boolean
136 137 138 139 140 141 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 136 def keyboard_down? return false unless Carbuncle::Keyboard.any_down?(*@key_bindings) controller.last_source = :keyboard return true end |
#keyboard_press? ⇒ Boolean
84 85 86 87 88 89 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 84 def keyboard_press? return false unless Carbuncle::Keyboard.any_press?(*@key_bindings) controller.last_source = :keyboard return true end |
#keyboard_release? ⇒ Boolean
168 169 170 171 172 173 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 168 def keyboard_release? return false unless Carbuncle::Keyboard.any_release?(*@key_bindings) controller.last_source = :keyboard return true end |
#keyboard_up? ⇒ Boolean
107 108 109 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 107 def keyboard_up? Carbuncle::Keyboard.any_up?(*@key_bindings) end |
#left_axis(binding) ⇒ Object
194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 194 def left_axis(binding) gamepads(binding[:index]).map(&:left_axis).map do |point| case binding[:direction] when :up [point.x] when :down [point.y] else [point.x, point.y] end end.flatten end |
#press? ⇒ Boolean
80 81 82 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 80 def press? keyboard_press? || gamepad_press? end |
#release? ⇒ Boolean
164 165 166 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 164 def release? keyboard_release? || gamepad_release? end |
#right_axis(binding) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 207 def right_axis(binding) gamepads(binding[:index]).map(&:right_axis).map do |point| case binding[:direction] when :up [point.x] when :down [point.y] else [point.x, point.y] end end.flatten end |
#up? ⇒ Boolean
103 104 105 |
# File 'gems/carbuncle-input/mrblib/input.rb', line 103 def up? keyboard_up? || gamepad_up? || axis_up? end |