papercats/game-client.js

124 lines
3.3 KiB
JavaScript
Raw Normal View History

2017-02-25 18:52:52 -05:00
/* global $ */
var Player = require("./player.js");
2017-02-25 18:52:52 -05:00
var renderer = require("./game-renderer.js");
var consts = require("./game-consts.js");
2017-02-21 00:54:44 -05:00
/**
* Provides requestAnimationFrame in a cross browser way.
* @author paulirish / http://paulirish.com/
*/
// window.requestAnimationFrame = function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) {
// window.setTimeout( callback, 1000 / 60 );
// };
2017-02-21 00:54:44 -05:00
if ( !window.requestAnimationFrame ) {
window.requestAnimationFrame = ( function() {
return window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( /* function FrameRequestCallback */ callback, /* DOMElement Element */ element ) {
window.setTimeout( callback, 1000 / 60 );
};
})();
}
2017-02-21 17:17:06 -05:00
2017-02-21 00:54:44 -05:00
$(function() {
2017-02-25 18:52:52 -05:00
var GRID_SIZE = consts.GRID_SIZE;
var CELL_WIDTH = consts.CELL_WIDTH;
2017-02-22 19:51:41 -05:00
2017-02-25 18:52:52 -05:00
var canvas = $("#main-ui")[0];
var ctx2 = canvas.getContext('2d');
var grid = renderer.grid;
renderer.allowAnimation = true;
2017-02-21 00:54:44 -05:00
//Load players.
2017-02-22 19:51:41 -05:00
for (var p = 0; p < 9; p++)
2017-02-21 00:54:44 -05:00
{
//TODO: socket loading.
var pRow = getRandomInt(0, GRID_SIZE);
var pCol = getRandomInt(0, GRID_SIZE);
var sdata = {
posX: pCol * CELL_WIDTH,
posY: pRow * CELL_WIDTH,
currentHeading: getRandomInt(0, 4),
//name: ...,
num: p
2017-02-25 18:52:52 -05:00
};
2017-02-25 18:52:52 -05:00
renderer.addPlayer(new Player(true, grid, sdata));
for (var dr = -1; dr <= 1; dr++)
for (var dc = -1; dc <= 1; dc++)
if (!grid.isOutOfBounds(dr + pRow, dc + pCol))
2017-02-25 18:52:52 -05:00
grid.set(dr + pRow, dc + pCol, renderer.getPlayer(p));
2017-02-21 00:54:44 -05:00
}
//Load grid.
2017-02-22 19:51:41 -05:00
for (var r = 0; r < grid.size; r++)
2017-02-21 00:54:44 -05:00
{
2017-02-22 19:51:41 -05:00
for (var c = 0; c < grid.size; c++)
2017-02-21 00:54:44 -05:00
{
//TODO: load data.
//if (Math.random() > .9)
// grid.set(r, c, players[getRandomInt(0, players.length)]);
2017-02-21 00:54:44 -05:00
}
}
var frameCount = 0;
2017-02-22 01:34:59 -05:00
//TODO: current player index
2017-02-25 18:52:52 -05:00
var user = renderer.getPlayer(0);
renderer.initUser(user);
2017-02-21 00:54:44 -05:00
function update()
{
2017-02-25 18:52:52 -05:00
renderer.update();
2017-02-21 00:54:44 -05:00
}
2017-02-22 19:51:41 -05:00
//Thanks to https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
2017-02-25 18:52:52 -05:00
function paintLoop(ctx)
2017-02-22 22:36:29 -05:00
{
2017-02-25 18:52:52 -05:00
renderer.paint(ctx); //TODO: pre-rendering.
2017-02-25 01:09:34 -05:00
2017-02-21 00:54:44 -05:00
//TODO: sync each loop with server. (server will give frame count.)
frameCount++;
update();
requestAnimationFrame(paintLoop);
}
2017-02-25 18:52:52 -05:00
paintLoop(ctx2);
2017-02-21 00:54:44 -05:00
2017-02-21 17:17:06 -05:00
2017-02-21 00:54:44 -05:00
//Event listeners
$(document).keydown(function(e) {
2017-02-22 19:51:41 -05:00
if (user.dead)
return;
2017-02-21 00:54:44 -05:00
var newHeading = -1;
switch (e.which)
{
case 37: newHeading = 3; break; //LEFT
case 38: newHeading = 0; break; //UP
case 39: newHeading = 1; break; //RIGHT
case 40: newHeading = 2; break; //DOWN
default: return; //exit handler for other keys.
}
2017-02-21 17:17:06 -05:00
if (newHeading === user.currentHeading || ((newHeading % 2 === 0) ^
(user.currentHeading % 2 === 0)))
{
//TODO: notify server.
user.heading = newHeading;
}
2017-02-21 00:54:44 -05:00
e.preventDefault();
});
2017-02-21 17:17:06 -05:00
});