Module: SFML::Keyboard

Defined in:
lib/sfml/window/keyboard.rb

Overview

Keyboard key code <-> symbol translation, plus Keyboard.key_pressed?(:esc).

The KEY_CODES array order is load-bearing: it matches the sfKeyCode enum in CSFML/Window/Keyboard.h exactly. sfKeyUnknown is -1 and represented here by :unknown returned via #code_to_symbol.

Constant Summary collapse

KEY_CODES =
%i[
  a b c d e f g h i j k l m n o p q r s t u v w x y z
  num0 num1 num2 num3 num4 num5 num6 num7 num8 num9
  escape
  l_control l_shift l_alt l_system
  r_control r_shift r_alt r_system
  menu
  l_bracket r_bracket
  semicolon comma period apostrophe slash backslash grave equal hyphen
  space enter backspace tab
  page_up page_down end_key home insert delete
  add subtract multiply divide
  left right up down
  numpad0 numpad1 numpad2 numpad3 numpad4
  numpad5 numpad6 numpad7 numpad8 numpad9
  f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15
  pause
].freeze
SYMBOL_TO_CODE =
KEY_CODES.each_with_index.to_h.freeze
ALIASES =

Friendly aliases users might reach for naturally.

{
  esc:    :escape,
  lctrl:  :l_control,
  rctrl:  :r_control,
  lshift: :l_shift,
  rshift: :r_shift,
  space_bar: :space,
  return: :enter,
}.freeze

Class Method Summary collapse

Class Method Details

.code_to_symbol(code) ⇒ Object



42
43
44
45
# File 'lib/sfml/window/keyboard.rb', line 42

def code_to_symbol(code)
  return :unknown if code < 0 || code >= KEY_CODES.length
  KEY_CODES[code]
end

.key_pressed?(symbol) ⇒ Boolean

SFML::Keyboard.key_pressed?(:escape)

Returns:

  • (Boolean)


56
57
58
# File 'lib/sfml/window/keyboard.rb', line 56

def key_pressed?(symbol)
  C::Window.sfKeyboard_isKeyPressed(symbol_to_code(symbol))
end

.symbol_to_code(symbol) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/sfml/window/keyboard.rb', line 47

def symbol_to_code(symbol)
  symbol = ALIASES.fetch(symbol, symbol)
  SYMBOL_TO_CODE.fetch(symbol) do
    raise ArgumentError, "Unknown key symbol: #{symbol.inspect}. " \
                         "See SFML::Keyboard::KEY_CODES."
  end
end