Class: Carbuncle::Input::Action

Inherits:
Object
  • Object
show all
Defined in:
gems/carbuncle-input/mrblib/input.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#controllerObject (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

Returns:

  • (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

Returns:

  • (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

#clearObject



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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (Boolean)


80
81
82
# File 'gems/carbuncle-input/mrblib/input.rb', line 80

def press?
  keyboard_press? || gamepad_press?
end

#release?Boolean

Returns:

  • (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

Returns:

  • (Boolean)


103
104
105
# File 'gems/carbuncle-input/mrblib/input.rb', line 103

def up?
  keyboard_up? || gamepad_up? || axis_up?
end