move consts to config.json

This commit is contained in:
StevenJoeZhang 2019-02-22 00:50:51 +08:00
parent dad3583c68
commit 32449da6fb
11 changed files with 106 additions and 134 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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]
});
}

View File

@ -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;

View File

@ -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);
});

View File

@ -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,

View File

@ -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() {