forked from ilikecats/papercats
move consts to config.json
This commit is contained in:
parent
dad3583c68
commit
32449da6fb
13
config.json
13
config.json
@ -2,5 +2,16 @@
|
||||
"hostname": "0.0.0.0",
|
||||
"http_port": 8080,
|
||||
"ws_port": 8081,
|
||||
"bots": []
|
||||
"bots": [],
|
||||
// DO NOT EDIT THE FOLLOWING SETTINGS
|
||||
// UNLESS YOU KNOW WHAT YOU ARE DOING
|
||||
"consts": {
|
||||
"GRID_SIZE": 80,
|
||||
"CELL_WIDTH": 40,
|
||||
"SPEED": 5,
|
||||
"BORDER_WIDTH": 20,
|
||||
"MAX_PLAYERS": 81,
|
||||
"PREFIXES": "Angry Baby Crazy Diligent Excited Fat Greedy Hungry Interesting Japanese Kind Little Magic Naïve Old Powerful Quiet Rich Superman THU Undefined Valuable Wifeless Xiangbuchulai Young Zombie",
|
||||
"NAMES": "Alice Bob Carol Dave Eve Francis Grace Hans Isabella Jason Kate Louis Margaret Nathan Olivia Paul Queen Richard Susan Thomas Uma Vivian Winnie Xander Yasmine Zach"
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -4,16 +4,14 @@ if (process.argv.length < 3) {
|
||||
}
|
||||
|
||||
//TODO: add a land claiming algo (with coefficient parameters)
|
||||
//TODO: add weight to the max land area and last land area, and also the number
|
||||
//of kills
|
||||
//TODO: add weight to the max land area and last land area, and also the number of kills
|
||||
//TODO: genetic gene pooling
|
||||
|
||||
var core = require("../core");
|
||||
var client = require("../game-client");
|
||||
var consts = require("../../config.json").consts;
|
||||
|
||||
var GRID_SIZE = core.GRID_SIZE;
|
||||
var CELL_WIDTH = core.CELL_WIDTH;
|
||||
var MOVES = [[-1, 0], [0, 1], [1, 0], [0, -1]]
|
||||
var MOVES = [[-1, 0], [0, 1], [1, 0], [0, -1]];
|
||||
|
||||
var AGGRESSIVE = Math.random();
|
||||
var THRESHOLD = 10;
|
||||
@ -51,7 +49,7 @@ var DIST_TYPES = {
|
||||
}
|
||||
}, edge: {
|
||||
check: function(loc) {
|
||||
return loc.row <= 1 || loc.col <= 1 || loc.row >= GRID_SIZE - 1 || loc.col >= GRID_SIZE - 1
|
||||
return loc.row <= 1 || loc.col <= 1 || loc.row >= consts.GRID_SIZE - 1 || loc.col >= consts.GRID_SIZE - 1
|
||||
},
|
||||
coeff: function() {
|
||||
return coeffs[4];
|
||||
@ -124,7 +122,7 @@ function tail(player, loc) {
|
||||
}
|
||||
|
||||
function traverseGrid(dir) {
|
||||
steps = new Array(GRID_SIZE * GRID_SIZE);
|
||||
steps = new Array(consts.GRID_SIZE * consts.GRID_SIZE);
|
||||
for (var i in steps) {
|
||||
steps[i] = -1;
|
||||
}
|
||||
@ -135,8 +133,8 @@ function traverseGrid(dir) {
|
||||
}
|
||||
|
||||
var row = user.row, col = user.col;
|
||||
var minRow = Math.max(0, row - 10), maxRow = Math.min(GRID_SIZE, row + 10);
|
||||
var minCol = Math.max(0, col - 10), maxCol = Math.min(GRID_SIZE, col + 10);
|
||||
var minRow = Math.max(0, row - 10), maxRow = Math.min(consts.GRID_SIZE, row + 10);
|
||||
var minCol = Math.max(0, col - 10), maxCol = Math.min(consts.GRID_SIZE, col + 10);
|
||||
|
||||
var proj = 0;
|
||||
for (var i = 1; i >= -1; i-=2) {
|
||||
@ -154,7 +152,7 @@ function traverseGrid(dir) {
|
||||
loc.row += user.row;
|
||||
loc.col += user.col;
|
||||
|
||||
if (loc.row < 0 || loc.row >= GRID_SIZE || loc.col < 0 || loc.col >= GRID_SIZE) continue;
|
||||
if (loc.row < 0 || loc.row >= consts.GRID_SIZE || loc.col < 0 || loc.col >= consts.GRID_SIZE) continue;
|
||||
if (DIST_TYPES[distType].check(loc)) distWeights[distType] += dist;
|
||||
}
|
||||
}
|
||||
@ -164,9 +162,9 @@ function traverseGrid(dir) {
|
||||
}
|
||||
|
||||
function printGrid() {
|
||||
var chars = new core.Grid(GRID_SIZE);
|
||||
for (var r = 0; r < GRID_SIZE; r++) {
|
||||
for (var c = 0; c < GRID_SIZE; c++) {
|
||||
var chars = new core.Grid(consts.GRID_SIZE);
|
||||
for (var r = 0; r < consts.GRID_SIZE; r++) {
|
||||
for (var c = 0; c < consts.GRID_SIZE; c++) {
|
||||
if (tail(user, {row: r, col: c})) chars.set(r, c, "t");
|
||||
else {
|
||||
var owner = grid.get(r, c);
|
||||
@ -181,9 +179,9 @@ function printGrid() {
|
||||
chars.set(user.row, user.col, "^>V<"[user.currentHeading]);
|
||||
|
||||
var str = "";
|
||||
for (var r = 0; r < GRID_SIZE; r++) {
|
||||
for (var r = 0; r < consts.GRID_SIZE; r++) {
|
||||
str += "\n";
|
||||
for (var c = 0; c < GRID_SIZE; c++) {
|
||||
for (var c = 0; c < consts.GRID_SIZE; c++) {
|
||||
str += chars.get(r, c);
|
||||
}
|
||||
}
|
||||
|
@ -5,9 +5,8 @@ if (process.argv.length < 3) {
|
||||
|
||||
var core = require("../core");
|
||||
var client = require("../game-client");
|
||||
var consts = require("../../config.json").consts;
|
||||
|
||||
var GRID_SIZE = core.GRID_SIZE;
|
||||
var CELL_WIDTH = core.CELL_WIDTH;
|
||||
var MOVES = [[-1, 0], [0, 1], [1, 0], [0, -1]];
|
||||
|
||||
var startFrame = -1;
|
||||
@ -50,9 +49,9 @@ function update(frame) {
|
||||
//the original code (i.e. deobfuscating) and made more efficient in some
|
||||
//areas (and some tweaks), otherwise, the original logic is about the same.
|
||||
var row = user.row, col = user.col, dir = user.currentHeading;
|
||||
var thres = (.05 + .1 * Math.random()) * GRID_SIZE * GRID_SIZE;
|
||||
var thres = (.05 + .1 * Math.random()) * consts.GRID_SIZE * consts.GRID_SIZE;
|
||||
|
||||
if (row < 0 || col < 0 || row >= GRID_SIZE || col >= GRID_SIZE) return;
|
||||
if (row < 0 || col < 0 || row >= consts.GRID_SIZE || col >= consts.GRID_SIZE) return;
|
||||
|
||||
if (grid.get(row, col) === user) {
|
||||
//When we are inside our territory
|
||||
@ -66,7 +65,7 @@ function update(frame) {
|
||||
var nr = MOVES[nd][0] * S + row;
|
||||
var nc = MOVES[nd][1] * S + col;
|
||||
|
||||
if (nr < 0 || nc < 0 || nr >= GRID_SIZE || nc >= GRID_SIZE) {
|
||||
if (nr < 0 || nc < 0 || nr >= consts.GRID_SIZE || nc >= consts.GRID_SIZE) {
|
||||
if (S > 1) weights[nd]--;
|
||||
else weights[nd] = -9999;
|
||||
}
|
||||
@ -132,7 +131,7 @@ function update(frame) {
|
||||
var nr = MOVES[nd][0] * S + row;
|
||||
var nc = MOVES[nd][1] * S + col;
|
||||
|
||||
if (nr < 0 || nc < 0 || nr >= GRID_SIZE || nc >= GRID_SIZE) {
|
||||
if (nr < 0 || nc < 0 || nr >= consts.GRID_SIZE || nc >= consts.GRID_SIZE) {
|
||||
if (S > 1) weights[nd]--;
|
||||
else weights[nd] = -9999;
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
function constant(val) {
|
||||
return {
|
||||
value: val,
|
||||
enumerable: true
|
||||
};
|
||||
}
|
||||
|
||||
var consts = {
|
||||
GRID_SIZE: constant(80),
|
||||
CELL_WIDTH: constant(40),
|
||||
SPEED: constant(5),
|
||||
BORDER_WIDTH: constant(20),
|
||||
MAX_PLAYERS: constant(81),
|
||||
PREFIXES: constant("Angry Baby Crazy Diligent Excited Fat Greedy Hungry Interesting Japanese Kind Little Magic Naïve Old Powerful Quiet Rich Superman THU Undefined Valuable Wifeless Xiangbuchulai Young Zombie".split(" ")),
|
||||
NAMES: constant("Alice Bob Carol Dave Eve Francis Grace Hans Isabella Jason Kate Louis Margaret Nathan Olivia Paul Queen Richard Susan Thomas Uma Vivian Winnie Xander Yasmine Zach".split(" "))
|
||||
};
|
||||
|
||||
Object.defineProperties(module.exports, consts);
|
@ -1,7 +1,4 @@
|
||||
var consts = require("./consts");
|
||||
var CELL_WIDTH = consts.CELL_WIDTH;
|
||||
|
||||
//TODO: remove constants
|
||||
var consts = require("../../config.json").consts;
|
||||
exports.initPlayer = function(grid, player) {
|
||||
for (var dr = -1; dr <= 1; dr++) {
|
||||
for (var dc = -1; dc <= 1; dc++) {
|
||||
@ -97,11 +94,11 @@ exports.updateFrame = function(grid, players, dead, notifyKill) {
|
||||
};
|
||||
|
||||
function squaresIntersect(a, b) {
|
||||
return (a < b) ? (b < a + CELL_WIDTH) : (a < b + CELL_WIDTH);
|
||||
return (a < b) ? (b < a + consts.CELL_WIDTH) : (a < b + consts.CELL_WIDTH);
|
||||
}
|
||||
|
||||
function area(player) {
|
||||
var xDest = player.col * CELL_WIDTH;
|
||||
var yDest = player.row * CELL_WIDTH;
|
||||
var xDest = player.col * consts.CELL_WIDTH;
|
||||
var yDest = player.row * consts.CELL_WIDTH;
|
||||
return (player.posX === xDest) ? Math.abs(player.posY - yDest) : Math.abs(player.posX - xDest);
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
var core = require("./core");
|
||||
var consts = require("./consts");
|
||||
|
||||
exports.Color = require("./color");
|
||||
exports.Grid = require("./grid");
|
||||
@ -7,10 +6,3 @@ exports.Player = require("./player");
|
||||
|
||||
exports.initPlayer = core.initPlayer;
|
||||
exports.updateFrame = core.updateFrame;
|
||||
|
||||
for (var prop in consts) {
|
||||
Object.defineProperty(exports, prop, {
|
||||
enumerable: true,
|
||||
value: consts[prop]
|
||||
});
|
||||
}
|
||||
|
@ -1,10 +1,8 @@
|
||||
var Stack = require("./stack");
|
||||
var Color = require("./color");
|
||||
var Grid = require("./grid");
|
||||
var consts = require("./consts");
|
||||
var consts = require("../../config.json").consts;
|
||||
|
||||
var GRID_SIZE = consts.GRID_SIZE;
|
||||
var CELL_WIDTH = consts.CELL_WIDTH;
|
||||
var NEW_PLAYER_LAG = 60; //Wait for a second at least
|
||||
|
||||
function defineGetter(getter) {
|
||||
@ -127,7 +125,7 @@ function render2(data, ctx) {
|
||||
for (var r = 0; r < data.tailGrid.length; r++) {
|
||||
if (!data.tailGrid[r]) continue;
|
||||
for (var c = 0; c < data.tailGrid[r].length; c++) {
|
||||
if (data.tailGrid[r][c]) ctx.fillRect(c * CELL_WIDTH, r * CELL_WIDTH, CELL_WIDTH, CELL_WIDTH);
|
||||
if (data.tailGrid[r][c]) ctx.fillRect(c * consts.CELL_WIDTH, r * consts.CELL_WIDTH, consts.CELL_WIDTH, consts.CELL_WIDTH);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -171,9 +169,9 @@ function renderCorner(ctx, cornerStart, dir1, dir2) {
|
||||
var b = walk(a, null, dir1, 1);
|
||||
|
||||
var triangle = new Path2D();
|
||||
triangle.moveTo(cornerStart[1] * CELL_WIDTH, cornerStart[0] * CELL_WIDTH);
|
||||
triangle.lineTo(a[1] * CELL_WIDTH, a[0] * CELL_WIDTH);
|
||||
triangle.lineTo(b[1] * CELL_WIDTH, b[0] * CELL_WIDTH);
|
||||
triangle.moveTo(cornerStart[1] * consts.CELL_WIDTH, cornerStart[0] * consts.CELL_WIDTH);
|
||||
triangle.lineTo(a[1] * consts.CELL_WIDTH, a[0] * consts.CELL_WIDTH);
|
||||
triangle.lineTo(b[1] * consts.CELL_WIDTH, b[0] * consts.CELL_WIDTH);
|
||||
triangle.closePath();
|
||||
for (var i = 0; i < 2; i++) {
|
||||
ctx.fill(triangle);
|
||||
@ -194,13 +192,13 @@ function walk(from, ret, orient, dist) {
|
||||
}
|
||||
|
||||
function fillTailRect(ctx, start, end) {
|
||||
var x = start[1] * CELL_WIDTH;
|
||||
var y = start[0] * CELL_WIDTH;
|
||||
var width = (end[1] - start[1]) * CELL_WIDTH;
|
||||
var height = (end[0] - start[0]) * CELL_WIDTH;
|
||||
var x = start[1] * consts.CELL_WIDTH;
|
||||
var y = start[0] * consts.CELL_WIDTH;
|
||||
var width = (end[1] - start[1]) * consts.CELL_WIDTH;
|
||||
var height = (end[0] - start[0]) * consts.CELL_WIDTH;
|
||||
|
||||
if (width === 0) width += CELL_WIDTH;
|
||||
if (height === 0) height += CELL_WIDTH;
|
||||
if (width === 0) width += consts.CELL_WIDTH;
|
||||
if (height === 0) height += consts.CELL_WIDTH;
|
||||
|
||||
if (width < 0) {
|
||||
x += width;
|
||||
@ -260,7 +258,7 @@ function floodFill(data, grid, row, col, been) {
|
||||
if (grid.isOutOfBounds(row, col) || been.get(row, col) || onTail(start) || grid.get(row, col) === data.player) return;
|
||||
//Avoid allocating too many resources
|
||||
var coords = [];
|
||||
var filled = new Stack(GRID_SIZE * GRID_SIZE + 1);
|
||||
var filled = new Stack(consts.GRID_SIZE * consts.GRID_SIZE + 1);
|
||||
var surrounded = true;
|
||||
|
||||
coords.push(start);
|
||||
@ -370,11 +368,11 @@ function nearestInteger(positive, val) {
|
||||
}
|
||||
|
||||
function calcRow(data) {
|
||||
return nearestInteger(data.currentHeading === 2 /*DOWN*/, data.posY / CELL_WIDTH);
|
||||
return nearestInteger(data.currentHeading === 2 /*DOWN*/, data.posY / consts.CELL_WIDTH);
|
||||
}
|
||||
|
||||
function calcCol(data) {
|
||||
return nearestInteger(data.currentHeading === 1 /*RIGHT*/, data.posX / CELL_WIDTH);
|
||||
return nearestInteger(data.currentHeading === 1 /*RIGHT*/, data.posX / consts.CELL_WIDTH);
|
||||
}
|
||||
|
||||
//Instance methods
|
||||
@ -384,24 +382,24 @@ Player.prototype.render = function(ctx, fade) {
|
||||
//Render player.
|
||||
fade = fade || 1;
|
||||
ctx.fillStyle = this.shadowColor.deriveAlpha(fade).rgbString();
|
||||
ctx.fillRect(this.posX, this.posY, CELL_WIDTH, CELL_WIDTH);
|
||||
ctx.fillRect(this.posX, this.posY, consts.CELL_WIDTH, consts.CELL_WIDTH);
|
||||
|
||||
var mid = CELL_WIDTH / 2;
|
||||
var grd = ctx.createRadialGradient(this.posX + mid, this.posY + mid - SHADOW_OFFSET, 1, this.posX + mid, this.posY + mid - SHADOW_OFFSET, CELL_WIDTH);
|
||||
var mid = consts.CELL_WIDTH / 2;
|
||||
var grd = ctx.createRadialGradient(this.posX + mid, this.posY + mid - SHADOW_OFFSET, 1, this.posX + mid, this.posY + mid - SHADOW_OFFSET, consts.CELL_WIDTH);
|
||||
//grd.addColorStop(0, this.baseColor.deriveAlpha(fade).rgbString());
|
||||
//grd.addColorStop(1, new Color(0, 0, 1, fade).rgbString());
|
||||
//ctx.fillStyle = grd;
|
||||
ctx.fillStyle = this.shadowColor.deriveLumination(.2).rgbString();
|
||||
ctx.fillRect(this.posX - 1, this.posY - SHADOW_OFFSET, CELL_WIDTH + 2, CELL_WIDTH);
|
||||
ctx.fillRect(this.posX - 1, this.posY - SHADOW_OFFSET, consts.CELL_WIDTH + 2, consts.CELL_WIDTH);
|
||||
|
||||
//Render name
|
||||
ctx.fillStyle = this.shadowColor.deriveAlpha(fade).rgbString();
|
||||
ctx.textAlign = "center";
|
||||
|
||||
var yoff = -SHADOW_OFFSET * 2;
|
||||
if (this.row === 0) yoff = SHADOW_OFFSET * 2 + CELL_WIDTH;
|
||||
if (this.row === 0) yoff = SHADOW_OFFSET * 2 + consts.CELL_WIDTH;
|
||||
ctx.font = "18px Changa";
|
||||
ctx.fillText(this.name, this.posX + CELL_WIDTH / 2, this.posY + yoff);
|
||||
ctx.fillText(this.name, this.posX + consts.CELL_WIDTH / 2, this.posY + yoff);
|
||||
};
|
||||
|
||||
function move(data) {
|
||||
@ -411,7 +409,7 @@ function move(data) {
|
||||
}
|
||||
//Move to new position.
|
||||
var heading = this.heading;
|
||||
if (this.posX % CELL_WIDTH !== 0 || this.posY % CELL_WIDTH !== 0) heading = data.currentHeading;
|
||||
if (this.posX % consts.CELL_WIDTH !== 0 || this.posY % consts.CELL_WIDTH !== 0) heading = data.currentHeading;
|
||||
else data.currentHeading = heading;
|
||||
switch (heading) {
|
||||
case 0: data.posY -= SPEED; break; //UP
|
||||
@ -432,7 +430,7 @@ function move(data) {
|
||||
this.tail.reposition(row, col);
|
||||
}
|
||||
//If we are completely in a new cell (not in our safe zone), we add to the tail.
|
||||
else if (this.posX % CELL_WIDTH === 0 && this.posY % CELL_WIDTH === 0) this.tail.addTail(heading);
|
||||
else if (this.posX % consts.CELL_WIDTH === 0 && this.posY % consts.CELL_WIDTH === 0) this.tail.addTail(heading);
|
||||
}
|
||||
|
||||
module.exports = Player;
|
||||
|
@ -1,6 +1,6 @@
|
||||
var io = require("socket.io-client");
|
||||
var core = require("./core");
|
||||
var Player = core.Player;
|
||||
var consts = require("../config.json").consts;
|
||||
var running = false;
|
||||
var user, socket, frame;
|
||||
var players, allPlayers;
|
||||
@ -11,7 +11,7 @@ var deadFrames = 0;
|
||||
var requesting = -1; //frame that we are requesting at
|
||||
var frameCache = []; //Frames after our request
|
||||
var allowAnimation = true;
|
||||
var grid = new core.Grid(core.GRID_SIZE, function(row, col, before, after) {
|
||||
var grid = new core.Grid(consts.GRID_SIZE, function(row, col, before, after) {
|
||||
invokeRenderer("updateGrid", [row, col, before, after]);
|
||||
});
|
||||
|
||||
@ -36,8 +36,8 @@ function connectGame(url, name, callback) {
|
||||
running = true;
|
||||
user = null;
|
||||
deadFrames = 0;
|
||||
var prefixes = core.PREFIXES;
|
||||
var names = core.NAMES;
|
||||
var prefixes = consts.PREFIXES.split(" ");
|
||||
var names = consts.NAMES.split(" ");
|
||||
name = name || [prefixes[Math.floor(Math.random() * prefixes.length)], names[Math.floor(Math.random() * names.length)]].join(" ");
|
||||
//Socket connection
|
||||
io.j = [];
|
||||
@ -58,7 +58,7 @@ function connectGame(url, name, callback) {
|
||||
reset();
|
||||
//Load players.
|
||||
data.players.forEach(function(p) {
|
||||
var pl = new Player(grid, p);
|
||||
var pl = new core.Player(grid, p);
|
||||
addPlayer(pl);
|
||||
});
|
||||
user = allPlayers[data.num];
|
||||
@ -170,7 +170,7 @@ function processFrame(data) {
|
||||
if (data.newPlayers) {
|
||||
data.newPlayers.forEach(function(p) {
|
||||
if (p.num === user.num) return;
|
||||
var pl = new Player(grid, p);
|
||||
var pl = new core.Player(grid, p);
|
||||
addPlayer(pl);
|
||||
core.initPlayer(grid, pl);
|
||||
});
|
||||
|
@ -1,7 +1,5 @@
|
||||
var core = require("./core");
|
||||
var GRID_SIZE = core.GRID_SIZE;
|
||||
var CELL_WIDTH = core.CELL_WIDTH;
|
||||
var MAX_PLAYERS = core.MAX_PLAYERS;
|
||||
var consts = require("../config.json").consts;
|
||||
var SATS = [192, 150, 100].map(function(val) {
|
||||
return val / 240;
|
||||
});
|
||||
@ -35,21 +33,21 @@ function Game(id) {
|
||||
var frameLocs = [];
|
||||
var frame = 0;
|
||||
var filled = 0;
|
||||
var grid = new core.Grid(GRID_SIZE, function(row, col, before, after) {
|
||||
var grid = new core.Grid(consts.GRID_SIZE, function(row, col, before, after) {
|
||||
if (!!after ^ !!before) {
|
||||
if (after) filled++;
|
||||
else filled--;
|
||||
if (filled === GRID_SIZE * GRID_SIZE) log("FULL GAME");
|
||||
if (filled === consts.GRID_SIZE * consts.GRID_SIZE) log("FULL GAME");
|
||||
}
|
||||
});
|
||||
this.id = id;
|
||||
this.addPlayer = function(client, name) {
|
||||
if (players.length >= MAX_PLAYERS) return false;
|
||||
if (players.length >= consts.MAX_PLAYERS) return false;
|
||||
var start = findEmpty(grid);
|
||||
if (!start) return false;
|
||||
var params = {
|
||||
posX: start.col * CELL_WIDTH,
|
||||
posY: start.row * CELL_WIDTH,
|
||||
posX: start.col * consts.CELL_WIDTH,
|
||||
posY: start.row * consts.CELL_WIDTH,
|
||||
currentHeading: Math.floor(Math.random() * 4),
|
||||
name: name,
|
||||
num: nextInd,
|
||||
|
@ -2,18 +2,15 @@
|
||||
|
||||
var core = require("./core");
|
||||
var client = require("./game-client");
|
||||
var consts = require("../config.json").consts;
|
||||
|
||||
var GRID_SIZE = core.GRID_SIZE;
|
||||
var CELL_WIDTH = core.CELL_WIDTH;
|
||||
var SPEED = core.SPEED;
|
||||
var BORDER_WIDTH = core.BORDER_WIDTH;
|
||||
var SHADOW_OFFSET = 5;
|
||||
var ANIMATE_FRAMES = 24;
|
||||
var BOUNCE_FRAMES = [8, 4];
|
||||
var DROP_HEIGHT = 24;
|
||||
var DROP_SPEED = 2;
|
||||
var MIN_BAR_WIDTH = 65;
|
||||
var BAR_HEIGHT = SHADOW_OFFSET + CELL_WIDTH;
|
||||
var BAR_HEIGHT = SHADOW_OFFSET + consts.CELL_WIDTH;
|
||||
var BAR_WIDTH = 400;
|
||||
|
||||
var canvas, canvasWidth, canvasHeight, gameWidth, gameHeight, ctx, offctx, offscreenCanvas;
|
||||
@ -45,7 +42,7 @@ function updateSize() {
|
||||
}
|
||||
|
||||
function reset() {
|
||||
animateGrid = new core.Grid(GRID_SIZE);
|
||||
animateGrid = new core.Grid(consts.GRID_SIZE);
|
||||
playerPortion = [];
|
||||
portionsRolling = [];
|
||||
barProportionRolling = [];
|
||||
@ -61,34 +58,34 @@ reset();
|
||||
//Paint methods
|
||||
function paintGridBorder(ctx) {
|
||||
ctx.fillStyle = "lightgray";
|
||||
var gridWidth = CELL_WIDTH * GRID_SIZE;
|
||||
var gridWidth = consts.CELL_WIDTH * consts.GRID_SIZE;
|
||||
|
||||
ctx.fillRect(-BORDER_WIDTH, 0, BORDER_WIDTH, gridWidth);
|
||||
ctx.fillRect(-BORDER_WIDTH, -BORDER_WIDTH, gridWidth + BORDER_WIDTH * 2, BORDER_WIDTH);
|
||||
ctx.fillRect(gridWidth, 0, BORDER_WIDTH, gridWidth);
|
||||
ctx.fillRect(-BORDER_WIDTH, gridWidth, gridWidth + BORDER_WIDTH * 2, BORDER_WIDTH);
|
||||
ctx.fillRect(-consts.BORDER_WIDTH, 0, consts.BORDER_WIDTH, gridWidth);
|
||||
ctx.fillRect(-consts.BORDER_WIDTH, -consts.BORDER_WIDTH, gridWidth + consts.BORDER_WIDTH * 2, consts.BORDER_WIDTH);
|
||||
ctx.fillRect(gridWidth, 0, consts.BORDER_WIDTH, gridWidth);
|
||||
ctx.fillRect(-consts.BORDER_WIDTH, gridWidth, gridWidth + consts.BORDER_WIDTH * 2, consts.BORDER_WIDTH);
|
||||
}
|
||||
|
||||
function paintGrid(ctx) {
|
||||
//Paint background
|
||||
ctx.fillStyle = "rgb(211, 225, 237)";
|
||||
ctx.fillRect(0, 0, CELL_WIDTH * GRID_SIZE, CELL_WIDTH * GRID_SIZE);
|
||||
ctx.fillRect(0, 0, consts.CELL_WIDTH * consts.GRID_SIZE, consts.CELL_WIDTH * consts.GRID_SIZE);
|
||||
paintGridBorder(ctx);
|
||||
|
||||
//paintGridLines(ctx);
|
||||
//Get viewing limits
|
||||
var offsetX = (offset[0] - BORDER_WIDTH);
|
||||
var offsetY = (offset[1] - BORDER_WIDTH);
|
||||
var minRow = Math.max(Math.floor(offsetY / CELL_WIDTH), 0);
|
||||
var minCol = Math.max(Math.floor(offsetX / CELL_WIDTH), 0);
|
||||
var maxRow = Math.min(Math.ceil((offsetY + gameHeight / zoom) / CELL_WIDTH), grid.size);
|
||||
var maxCol = Math.min(Math.ceil((offsetX + gameWidth / zoom) / CELL_WIDTH), grid.size);
|
||||
var offsetX = (offset[0] - consts.BORDER_WIDTH);
|
||||
var offsetY = (offset[1] - consts.BORDER_WIDTH);
|
||||
var minRow = Math.max(Math.floor(offsetY / consts.CELL_WIDTH), 0);
|
||||
var minCol = Math.max(Math.floor(offsetX / consts.CELL_WIDTH), 0);
|
||||
var maxRow = Math.min(Math.ceil((offsetY + gameHeight / zoom) / consts.CELL_WIDTH), grid.size);
|
||||
var maxCol = Math.min(Math.ceil((offsetX + gameWidth / zoom) / consts.CELL_WIDTH), grid.size);
|
||||
|
||||
//Paint occupied areas. (and fading ones)
|
||||
for (var r = minRow; r < maxRow; r++) {
|
||||
for (var c = minCol; c < maxCol; c++) {
|
||||
var p = grid.get(r, c);
|
||||
var x = c * CELL_WIDTH, y = r * CELL_WIDTH, baseColor, shadowColor;
|
||||
var x = c * consts.CELL_WIDTH, y = r * consts.CELL_WIDTH, baseColor, shadowColor;
|
||||
var animateSpec = animateGrid.get(r, c);
|
||||
if (client.allowAnimation && animateSpec) {
|
||||
if (animateSpec.before) { //fading animation
|
||||
@ -111,10 +108,10 @@ function paintGrid(ctx) {
|
||||
(!bottomAnimate || (bottomAnimate.after && bottomAnimate.before));
|
||||
if (hasBottom && ((!!bottomAnimate ^ !!animateSpec) || bottomEmpty)) {
|
||||
ctx.fillStyle = shadowColor.rgbString();
|
||||
ctx.fillRect(x, y + CELL_WIDTH, CELL_WIDTH + 1, SHADOW_OFFSET);
|
||||
ctx.fillRect(x, y + consts.CELL_WIDTH, consts.CELL_WIDTH + 1, SHADOW_OFFSET);
|
||||
}
|
||||
ctx.fillStyle = baseColor.rgbString();
|
||||
ctx.fillRect(x, y, CELL_WIDTH + 1, CELL_WIDTH + 1);
|
||||
ctx.fillRect(x, y, consts.CELL_WIDTH + 1, consts.CELL_WIDTH + 1);
|
||||
}
|
||||
}
|
||||
if (!client.allowAnimation) return;
|
||||
@ -123,7 +120,7 @@ function paintGrid(ctx) {
|
||||
for (var r = 0; r < grid.size; r++) {
|
||||
for (var c = 0; c < grid.size; c++) {
|
||||
animateSpec = animateGrid.get(r, c);
|
||||
x = c * CELL_WIDTH, y = r * CELL_WIDTH;
|
||||
x = c * consts.CELL_WIDTH, y = r * consts.CELL_WIDTH;
|
||||
if (animateSpec && client.allowAnimation) {
|
||||
var viewable = r >= minRow && r < maxRow && c >= minCol && c < maxCol;
|
||||
if (animateSpec.after && viewable) {
|
||||
@ -133,9 +130,9 @@ function paintGrid(ctx) {
|
||||
shadowColor = animateSpec.after.shadowColor;
|
||||
baseColor = animateSpec.after.lightBaseColor.deriveLumination(-(offsetBounce / DROP_HEIGHT) * .1);
|
||||
ctx.fillStyle = shadowColor.rgbString();
|
||||
ctx.fillRect(x, y + CELL_WIDTH, CELL_WIDTH, SHADOW_OFFSET);
|
||||
ctx.fillRect(x, y + consts.CELL_WIDTH, consts.CELL_WIDTH, SHADOW_OFFSET);
|
||||
ctx.fillStyle = baseColor.rgbString();
|
||||
ctx.fillRect(x, y, CELL_WIDTH + 1, CELL_WIDTH + 1);
|
||||
ctx.fillRect(x, y, consts.CELL_WIDTH + 1, consts.CELL_WIDTH + 1);
|
||||
}
|
||||
animateSpec.frame++;
|
||||
if (animateSpec.frame >= ANIMATE_FRAMES) animateGrid.set(r, c, null);
|
||||
@ -153,7 +150,7 @@ function paintUIBar(ctx) {
|
||||
ctx.fillStyle = "white";
|
||||
ctx.font = "24px Changa";
|
||||
barOffset = (user && user.name) ? (ctx.measureText(user.name).width + 20) : 0;
|
||||
ctx.fillText(user ? user.name : "", 5, CELL_WIDTH - 5);
|
||||
ctx.fillText(user ? user.name : "", 5, consts.CELL_WIDTH - 5);
|
||||
|
||||
//Draw filled bar
|
||||
ctx.fillStyle = "rgba(180, 180, 180, .3)";
|
||||
@ -162,20 +159,20 @@ function paintUIBar(ctx) {
|
||||
var userPortions = portionsRolling[user.num] ? portionsRolling[user.num].lag : 0;
|
||||
var barSize = Math.ceil((BAR_WIDTH - MIN_BAR_WIDTH) * userPortions + MIN_BAR_WIDTH);
|
||||
ctx.fillStyle = user ? user.baseColor.rgbString() : "";
|
||||
ctx.fillRect(barOffset, 0, barSize, CELL_WIDTH);
|
||||
ctx.fillRect(barOffset, 0, barSize, consts.CELL_WIDTH);
|
||||
ctx.fillStyle = user ? user.shadowColor.rgbString() : "";
|
||||
ctx.fillRect(barOffset, CELL_WIDTH, barSize, SHADOW_OFFSET);
|
||||
ctx.fillRect(barOffset, consts.CELL_WIDTH, barSize, SHADOW_OFFSET);
|
||||
|
||||
//TODO: dont reset kill count and zoom when we request frames.
|
||||
//Percentage
|
||||
ctx.fillStyle = "white";
|
||||
ctx.font = "18px Changa";
|
||||
ctx.fillText((userPortions * 100).toFixed(3) + "%", 5 + barOffset, CELL_WIDTH - 5);
|
||||
ctx.fillText((userPortions * 100).toFixed(3) + "%", 5 + barOffset, consts.CELL_WIDTH - 5);
|
||||
|
||||
//Number of kills
|
||||
var killsText = "Kills: " + client.kills;
|
||||
var killsOffset = 20 + BAR_WIDTH + barOffset;
|
||||
ctx.fillText(killsText, killsOffset, CELL_WIDTH - 5);
|
||||
ctx.fillText(killsText, killsOffset, consts.CELL_WIDTH - 5);
|
||||
|
||||
//Calcuate rank
|
||||
var sorted = [];
|
||||
@ -190,7 +187,7 @@ function paintUIBar(ctx) {
|
||||
return val.player === user
|
||||
});
|
||||
ctx.fillText("Rank: " + (rank === -1 ? "--" : rank + 1) + " of " + sorted.length,
|
||||
ctx.measureText(killsText).width + killsOffset + 20, CELL_WIDTH - 5);
|
||||
ctx.measureText(killsText).width + killsOffset + 20, consts.CELL_WIDTH - 5);
|
||||
|
||||
//Rolling the leaderboard bars
|
||||
if (sorted.length > 0) {
|
||||
@ -216,14 +213,14 @@ function paintUIBar(ctx) {
|
||||
ctx.fillStyle = "rgba(10, 10, 10, .3)";
|
||||
ctx.fillRect(barX - 10, barY + 10 - offset, barSize + 10, BAR_HEIGHT + offset);
|
||||
ctx.fillStyle = player.baseColor.rgbString();
|
||||
ctx.fillRect(barX, barY, barSize, CELL_WIDTH);
|
||||
ctx.fillRect(barX, barY, barSize, consts.CELL_WIDTH);
|
||||
ctx.fillStyle = player.shadowColor.rgbString();
|
||||
ctx.fillRect(barX, barY + CELL_WIDTH, barSize, SHADOW_OFFSET);
|
||||
ctx.fillRect(barX, barY + consts.CELL_WIDTH, barSize, SHADOW_OFFSET);
|
||||
ctx.fillStyle = "black";
|
||||
ctx.fillText(name, barX - nameWidth - 15, barY + 27);
|
||||
var percentage = (portionsRolling[player.num].lag * 100).toFixed(3) + "%";
|
||||
ctx.fillStyle = "white";
|
||||
ctx.fillText(percentage, barX + 5, barY + CELL_WIDTH - 5);
|
||||
ctx.fillText(percentage, barX + 5, barY + consts.CELL_WIDTH - 5);
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,7 +237,7 @@ function paint(ctx) {
|
||||
|
||||
//Zoom in/out based on player stats
|
||||
ctx.scale(zoom, zoom);
|
||||
ctx.translate(-offset[0] + BORDER_WIDTH, -offset[1] + BORDER_WIDTH);
|
||||
ctx.translate(-offset[0] + consts.BORDER_WIDTH, -offset[1] + consts.BORDER_WIDTH);
|
||||
|
||||
paintGrid(ctx);
|
||||
client.getPlayers().forEach(function (p) {
|
||||
@ -274,7 +271,7 @@ function update() {
|
||||
if (client.allowAnimation) {
|
||||
var delta = animateTo[i] - offset[i];
|
||||
var dir = Math.sign(delta);
|
||||
var mag = Math.min(SPEED, Math.abs(delta));
|
||||
var mag = Math.min(consts.SPEED, Math.abs(delta));
|
||||
offset[i] += dir * mag;
|
||||
}
|
||||
else offset[i] = animateTo[i];
|
||||
@ -284,7 +281,7 @@ function update() {
|
||||
//Calculate player portions
|
||||
client.getPlayers().forEach(function(player) {
|
||||
var roll = portionsRolling[player.num];
|
||||
roll.value = playerPortion[player.num] / GRID_SIZE / GRID_SIZE;
|
||||
roll.value = playerPortion[player.num] / consts.GRID_SIZE / consts.GRID_SIZE;
|
||||
roll.update();
|
||||
});
|
||||
|
||||
@ -296,9 +293,9 @@ function update() {
|
||||
|
||||
//Helper methods
|
||||
function centerOnPlayer(player, pos) {
|
||||
var xOff = Math.floor(player.posX - (gameWidth / zoom - CELL_WIDTH) / 2);
|
||||
var yOff = Math.floor(player.posY - (gameHeight / zoom - CELL_WIDTH) / 2);
|
||||
var gridWidth = grid.size * CELL_WIDTH + BORDER_WIDTH * 2;
|
||||
var xOff = Math.floor(player.posX - (gameWidth / zoom - consts.CELL_WIDTH) / 2);
|
||||
var yOff = Math.floor(player.posY - (gameHeight / zoom - consts.CELL_WIDTH) / 2);
|
||||
var gridWidth = grid.size * consts.CELL_WIDTH + consts.BORDER_WIDTH * 2;
|
||||
pos[0] = xOff; //Math.max(Math.min(xOff, gridWidth + (BAR_WIDTH + 100) / zoom - gameWidth / zoom), 0);
|
||||
pos[1] = yOff; //Math.max(Math.min(yOff, gridWidth - gameHeight / zoom), 0);
|
||||
}
|
||||
@ -343,7 +340,7 @@ function Rolling(value, frames) {
|
||||
module.exports = exports = {
|
||||
addPlayer: function(player) {
|
||||
playerPortion[player.num] = 0;
|
||||
portionsRolling[player.num] = new Rolling(9 / GRID_SIZE / GRID_SIZE, ANIMATE_FRAMES);
|
||||
portionsRolling[player.num] = new Rolling(9 / consts.GRID_SIZE / consts.GRID_SIZE, ANIMATE_FRAMES);
|
||||
barProportionRolling[player.num] = new Rolling(0, ANIMATE_FRAMES);
|
||||
},
|
||||
disconnect: function() {
|
||||
|
Loading…
Reference in New Issue
Block a user