UNPKG

2.05 kBJavaScriptView Raw
1"use strict";
2
3var Keyboard = require("game-keyboard");
4var keyMap = require("game-keyboard/key_map").US;
5var keyboard = new Keyboard(keyMap);
6var Mouse = require("./mouse");
7
8function Input(config, canvas) {
9 this.config = config;
10 this.mouse = new Mouse(canvas);
11 this.lastButtonState = {};
12 this.delayedButtonUpdates = {};
13}
14Input.prototype.button = function(name) {
15 var input = this.config[name];
16 if (input === undefined) {
17 console.error("No such button: " + name);
18 return false;
19 }
20 if (input.type !== "button") {
21 console.error("\"" + name + "\" is not a button");
22 return false;
23 }
24 for (var i = 0; i < input.inputs.length; i++) {
25 var physicalInput = input.inputs[i];
26 var device = physicalInput.device;
27 if (device === "keyboard") {
28 var key = physicalInput.key;
29 if (keyboard.isPressed(key)) {
30 return true;
31 }
32 }
33 if (device === "mouse") {
34 var button = physicalInput.button;
35 if (this.mouse.isPressed(button)) {
36 return true;
37 }
38 }
39 if (device === "touch") {
40 for (var j = 0; j < this.mouse.touches.length; j++) {
41 var t = this.mouse.touches[j];
42 if (t.x >= physicalInput.x && t.x < physicalInput.x + physicalInput.width && t.y >= physicalInput.y && t.y < physicalInput.y + physicalInput.height) {
43 return true;
44 }
45 }
46 }
47 }
48 return false;
49};
50Input.prototype.buttonPressed = function(name) {
51 var current = this.button(name);
52 var last = this.lastButtonState[name];
53 if (last === undefined) {
54 last = true;
55 }
56 this.delayedButtonUpdates[name] = current;
57 return current && !last;
58};
59Input.prototype.buttonReleased = function(name) {
60 var current = this.button(name);
61 var last = this.lastButtonState[name];
62 if (last === undefined) {
63 last = false;
64 }
65 this.delayedButtonUpdates[name] = current;
66 return !current && last;
67};
68Input.prototype.processUpdates = function() {
69 Object.keys(this.delayedButtonUpdates).forEach(function(name) {
70 this.lastButtonState[name] = this.delayedButtonUpdates[name];
71 delete this.delayedButtonUpdates[name];
72 }.bind(this));
73};
74
75module.exports = Input;