38 lines
743 B
JavaScript
38 lines
743 B
JavaScript
/*
|
|
import Signal
|
|
import Keyboard.Raw
|
|
import List
|
|
*/
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
function keySignal(f) {
|
|
var signal = Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
|
|
Elm.Keyboard.Raw.keysDown.defaultNumberOfKids += 1;
|
|
signal.defaultNumberOfKids = 0;
|
|
return signal;
|
|
}
|
|
|
|
function dir(up, down, left, right) {
|
|
function f(ks) {
|
|
var x = 0, y = 0;
|
|
while (ks.ctor == "Cons") {
|
|
switch (ks._0) {
|
|
case left : --x; break;
|
|
case right: ++x; break;
|
|
case up : ++y; break;
|
|
case down : --y; break;
|
|
}
|
|
ks = ks._1;
|
|
}
|
|
return { _:{}, x:x, y:y };
|
|
}
|
|
return keySignal(f);
|
|
}
|
|
|
|
function is(key) { return keySignal(Elm.List.member(key)); }
|
|
|
|
Elm.Native.Keyboard = { isDown:is, dir:F4(dir) };
|
|
|
|
}());
|