UNPKG

odin

Version:

Node.js Canvas/WebGL Javascript Game Framework

138 lines (98 loc) 3.55 kB
if (typeof(define) !== "function") { var define = require("amdefine")(module); } define([ "odin/base/time", "odin/core/input/button", "odin/core/game/log" ], function(Time, Button, Log) { "use strict"; function Buttons() { Array.call(this); this.hash = {}; this._SYNC = {}; this.add("mouse0"); this.add("mouse1"); this.add("mouse2"); } Buttons.prototype = Object.create(Array.prototype); Buttons.prototype.constructor = Buttons; Buttons.prototype.add = function(name) { if (this.hash[name]) { Log.error("Buttons.add: Buttons already have Button name " + name); return undefined; } var button = new Button(name); this.push(button); this.hash[name] = button; return button; }; Buttons.prototype.get = function(name) { return this.hash[name]; }; Buttons.prototype.on = function(name) { var button = this.hash[name] || this.add(name); if (button._first) { button.frameDown = Time.frameCount + 1; button.timeDown = Time.stamp(); button._first = false; } button.value = true; return button; }; Buttons.prototype.off = function(name) { var button = this.hash[name] || this.add(name); button.frameUp = Time.frameCount + 1; button.timeUp = Time.stamp(); button.value = false; button._first = true; return button; }; Buttons.prototype.toSYNC = function(json) { json || (json = this._SYNC); var jsonButtons = json.buttons || (json.buttons = []), i; for (i = this.length; i--;) jsonButtons[i] = this[i].toSYNC(jsonButtons[i]); return json; }; Buttons.prototype.fromSYNC = function(json) { var buttonHash = this.hash, jsonButtons = json.buttons || (json.buttons = []), button, jsonButton, i; for (i = jsonButtons.length; i--;) { jsonButton = jsonButtons[i]; if ((button = buttonHash[jsonButton.name])) { button.fromSYNC(jsonButton); } else { this.add(jsonButton.name).fromJSON(jsonButton); } } return this; }; Buttons.prototype.toJSON = function(json) { json || (json = {}); var jsonButtons = json.buttons || (json.buttons = []), i; for (i = this.length; i--;) jsonButtons[i] = this[i].toJSON(jsonButtons[key]); return json; }; Buttons.prototype.fromJSON = function(json) { var buttonHash = this.hash, jsonButtons = json.buttons || (json.buttons = []), button, jsonButton, i; for (i = jsonButtons.length; i--;) { jsonButton = jsonButtons[i]; if ((button = buttonHash[jsonButton.name])) { button.fromJSON(jsonButton); } else { this.add(jsonButton.name).fromJSON(jsonButton); } } return this; }; return Buttons; } );