class RubyTerminalGames::Keyboard

Attributes

thread[R]

Public Class Methods

capture(detect_direction: false, &block) click to toggle source
# File lib/ruby_terminal_games/keyboard.rb, line 5
def self.capture(detect_direction: false, &block)
  Curses.noecho
  Curses.stdscr.keypad(true)
  Curses.curs_set(0)
  Curses.cbreak
  Curses.raw

  @capture_thread = Thread.new do
    loop do
      key = Curses.getch
      command = direction(key) || key
      command = key unless detect_direction
      block.call(command)
      sleep(0.15)
    end
  end
end
stop_capture() click to toggle source
# File lib/ruby_terminal_games/keyboard.rb, line 23
def self.stop_capture
  Thread.kill(@capture_thread)
  Curses.echo
  Curses.stdscr.keypad(false)
  Curses.curs_set(1)
  Curses.crmode
  Curses.noraw
end

Private Class Methods

direction(key) click to toggle source
# File lib/ruby_terminal_games/keyboard.rb, line 34
def self.direction(key)
  case key
  when Curses::KEY_UP; then UP;
  when Curses::KEY_DOWN; then DOWN;
  when Curses::KEY_RIGHT; then RIGHT;
  when Curses::KEY_LEFT; then LEFT;
  end
end