Skip to content

Commit

Permalink
Added input handler and fixed the sprite_list
Browse files Browse the repository at this point in the history
  • Loading branch information
BorisKozo committed Apr 2, 2013
1 parent 383cbe8 commit ff047f0
Show file tree
Hide file tree
Showing 5 changed files with 284 additions and 8 deletions.
15 changes: 8 additions & 7 deletions app/states/battle.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
define(["require","easel", "common/game","common/state", "common/loader","./../sprites/tank"], function (require, createjs, game, State, loader) {
define(["require", "easel", "common/game", "common/state", "common/loader", "common/sprite_list", "common/input", "./../sprites/tank"], function (require, createjs, game, State, loader, SpriteList, input) {
var Tank = require("./../sprites/tank");

var battle = new State();

battle.setup = function (options) {
battle.tank = new Tank();
battle.sprites = new SpriteList();
battle.sprites.add(new Tank(),"tank");
}

battle.onLoad = function (deferred) {
loader.loadManifest(battle.tank.getManifest(), function (assets) {
battle.tank.initialize(assets);
game.stage.addChild(battle.tank.drawing);
deferred.resolve();
});
battle.sprites.load(deferred, game.stage);
}

battle.update = function (delta) {
if (input.pressed("right")) {
battle.sprites.at("tank").drawing.x += 1;

}
}
return battle;
});
14 changes: 14 additions & 0 deletions common/array_helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
define([], function () {
// Array Remove - By John Resig (MIT Licensed)
var _remove = function (from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};

return {
remove: function (array, from, to) {
_remove.call(array, from, to);
}
}
});
199 changes: 199 additions & 0 deletions common/input.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
//Copyright: Original code was written by ippa and can be found here:
//https://github.com/ippa/jaws/blob/master/src/input.js

define([], function () {

var pressed_keys = {}
var keycode_to_string = []
var on_keydown_callbacks = []
var on_keyup_callbacks = []
var mousebuttoncode_to_string = []
var ie_mousebuttoncode_to_string = []

var input = {};
/** @private
* Map all javascript keycodes to easy-to-remember letters/words
*/
function initialize() {

var k = []

k[8] = "backspace"
k[9] = "tab"
k[13] = "enter"
k[16] = "shift"
k[17] = "ctrl"
k[18] = "alt"
k[19] = "pause"
k[20] = "capslock"
k[27] = "esc"
k[32] = "space"
k[33] = "pageup"
k[34] = "pagedown"
k[35] = "end"
k[36] = "home"
k[37] = "left"
k[38] = "up"
k[39] = "right"
k[40] = "down"
k[45] = "insert"
k[46] = "delete"

k[91] = "leftwindowkey"
k[92] = "rightwindowkey"
k[93] = "selectkey"
k[106] = "multiply"
k[107] = "add"
k[109] = "subtract"
k[110] = "decimalpoint"
k[111] = "divide"

k[144] = "numlock"
k[145] = "scrollock"
k[186] = "semicolon"
k[187] = "equalsign"
k[188] = "comma"
k[189] = "dash"
k[190] = "period"
k[191] = "forwardslash"
k[192] = "graveaccent"
k[219] = "openbracket"
k[220] = "backslash"
k[221] = "closebracket"
k[222] = "singlequote"

var m = []

m[0] = "left_mouse_button"
m[1] = "center_mouse_button"
m[2] = "right_mouse_button"

var ie_m = [];
ie_m[1] = "left_mouse_button";
ie_m[2] = "right_mouse_button";
ie_m[4] = "center_mouse_button";

mousebuttoncode_to_string = m
ie_mousebuttoncode_to_string = ie_m;


var numpadkeys = ["numpad0", "numpad1", "numpad2", "numpad3", "numpad4", "numpad5", "numpad6", "numpad7", "numpad8", "numpad9"]
var fkeys = ["f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9"]
var numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
var letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
for (var i = 0; numbers[i]; i++) { k[48 + i] = numbers[i] }
for (var i = 0; letters[i]; i++) { k[65 + i] = letters[i] }
for (var i = 0; numpadkeys[i]; i++) { k[96 + i] = numpadkeys[i] }
for (var i = 0; fkeys[i]; i++) { k[112 + i] = fkeys[i] }

keycode_to_string = k

window.addEventListener("keydown", handleKeyDown)
window.addEventListener("keyup", handleKeyUp)
window.addEventListener("blur", resetPressedKeys, false);

}

/** @private
* Reset input-hash. Called when game is blurred so a key-controlled player doesn't keep on moving when the game isn't focused.
*/
function resetPressedKeys(e) {
pressed_keys = {};
}

/** @private
* handle event "onkeydown" by remembering what key was pressed
*/
function handleKeyUp(e) {
event = (e) ? e : window.event
var human_name = keycode_to_string[event.keyCode]
pressed_keys[human_name] = false
if (on_keyup_callbacks[human_name]) {
on_keyup_callbacks[human_name](human_name)
e.preventDefault()
}
if (prevent_default_keys[human_name]) { e.preventDefault() }
}

/** @private
* handle event "onkeydown" by remembering what key was un-pressed
*/
function handleKeyDown(e) {
event = (e) ? e : window.event
var human_name = keycode_to_string[event.keyCode]
pressed_keys[human_name] = true
if (on_keydown_callbacks[human_name]) {
on_keydown_callbacks[human_name](human_name)
e.preventDefault()
}
if (prevent_default_keys[human_name]) { e.preventDefault() }
}

var prevent_default_keys = []
/**
* Prevents default browseraction for given keys.
* @example
* jaws.preventDefaultKeys( ["down"] ) // Stop down-arrow-key from scrolling page down
*/
input.preventDefaultKeys = function (array_of_strings) {
array_of_strings.forEach(function (item, index) {
prevent_default_keys[item] = true
});
}

/**
* Returns true if *key* is currently pressed down
* @example
* jaws.pressed("left"); // returns true if arrow key is pressed
* jaws.pressed("a"); // returns true if key "a" is pressed
*/
input.pressed = function (key) {
return pressed_keys[key]
}

/**
* sets up a callback for a key (or array of keys) to call when it's pressed down
*
* @example
* // call goLeft() when left arrow key is pressed
* jaws.on_keypress("left", goLeft)
*
* // call fireWeapon() when SPACE or CTRL is pressed
* jaws.on_keypress(["space","ctrl"], fireWeapon)
*/
input.on_keydown = function (key, callback) {
if (jaws.isArray(key)) {
for (var i = 0; key[i]; i++) {
on_keydown_callbacks[key[i]] = callback
}
}
else {
on_keydown_callbacks[key] = callback
}
}

/**
* sets up a callback when a key (or array of keys) to call when it's released
*/
input.on_keyup = function (key, callback) {
if (jaws.isArray(key)) {
for (var i = 0; key[i]; i++) {
on_keyup_callbacks[key[i]] = callback
}
}
else {
on_keyup_callbacks[key] = callback
}
}

/** @private
* Clean up all callbacks set by on_keydown / on_keyup
*/
input.clearKeyCallbacks = function () {
on_keyup_callbacks = []
on_keydown_callbacks = []
}

initialize();
return input;
});
61 changes: 61 additions & 0 deletions common/sprite_list.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
define(["lodash", "./loader"], function (_, loader) {
var SpriteList = function () {
this.length = 0;
this.data = {};
this.counter = 0;
this.keys = [];
};

SpriteList.prototype.update = function (delta) {

for (var i = 0, length = this.length; i < length; i += 1) {
this.data[this.keys[i]].update(data);
}
};

SpriteList.prototype.add = function (item, id) {
id = id || "$$" + this.counter;
this.counter++;

this.data[id] = item;
this.keys.push(id);
this.length += 1;
};

SpriteList.prototype.at = function (id) {
return this.data[id];
};

SpriteList.prototype.getManifest = function () {
var result = [];
for (var i = 0, length = this.length; i < length; i += 1) {
result = result.concat(this.data[this.keys[i]].getManifest());
}

return result;
}

SpriteList.prototype.initialize = function (stage, assets) {
for (var i = 0, length = this.length; i < length; i += 1) {
this.data[this.keys[i]].initialize(assets);
}
}

SpriteList.prototype.load = function (deferred, stage) {
var _this = this;
loader.loadManifest(_this.getManifest(), function (assets) {
_this.initialize(stage, assets);
for (var i = 0, length = _this.length; i < length; i += 1) {
if (_this.data[_this.keys[i]].drawing) {
stage.addChild(_this.data[_this.keys[i]].drawing);
}
}
deferred.resolve();
});
}


return SpriteList;


});
3 changes: 2 additions & 1 deletion common/state.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define(["jquery", "lodash", "./game"], function ($, _, game) {
define(["jquery", "lodash", "./game","./input"], function ($, _, game,input) {
var State = function () {
}

Expand Down Expand Up @@ -26,6 +26,7 @@
State.prototype.teardown = function () {
game.stage.removeAllChildren();
game.stage.removeAllEventListeners();
input.clearKeyCallbacks();
}
return State;
});

0 comments on commit ff047f0

Please sign in to comment.