B1KMusic

Keyboard Input Abstraction Class

Sep 13th, 2016
862
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Input(el){
  2.     var parent = el,
  3.         map = {},
  4.         intervals = {};
  5.    
  6.     function ev_kdown(ev)
  7.     {
  8.         map[ev.key] = true;
  9.         ev.preventDefault();
  10.         return;
  11.     }
  12.    
  13.     function ev_kup(ev)
  14.     {
  15.         map[ev.key] = false;
  16.         ev.preventDefault();
  17.         return;
  18.     }
  19.    
  20.     function key_down(key)
  21.     {
  22.         return map[key];
  23.     }
  24.  
  25.     function keys_down_array(array)
  26.     {
  27.         for(var i = 0; i < array.length; i++)
  28.             if(!key_down(array[i]))
  29.                 return false;
  30.  
  31.         return true;
  32.     }
  33.    
  34.     function keys_down_arguments()
  35.     {
  36.         return keys_down_array(Array.from(arguments));
  37.     }
  38.    
  39.     function clear()
  40.     {
  41.         map = {};
  42.     }
  43.    
  44.     function watch_loop(keylist, callback)
  45.     {
  46.         return function(){
  47.             if(keys_down_array(keylist))
  48.                 callback();
  49.         }
  50.     }
  51.  
  52.     function watch(name, callback)
  53.     {
  54.         var keylist = Array.from(arguments).splice(2);
  55.  
  56.         intervals[name] = setInterval(watch_loop(keylist, callback), 1000/24);
  57.     }
  58.  
  59.     function unwatch(name)
  60.     {
  61.         clearInterval(intervals[name]);
  62.         delete intervals[name];
  63.     }
  64.  
  65.     function detach()
  66.     {
  67.         parent.removeEventListener("keydown", ev_kdown);
  68.         parent.removeEventListener("keyup", ev_kup);
  69.     }
  70.    
  71.     function attach()
  72.     {
  73.         parent.addEventListener("keydown", ev_kdown);
  74.         parent.addEventListener("keyup", ev_kup);
  75.     }
  76.    
  77.     function Input()
  78.     {
  79.         attach();
  80.  
  81.         return {
  82.             key_down: key_down,
  83.             keys_down: keys_down_arguments,
  84.             watch: watch,
  85.             unwatch: unwatch,
  86.             clear: clear,
  87.             detach: detach
  88.         };
  89.     }
  90.    
  91.     return Input();
  92. }
RAW Paste Data