Add the destination texts with voting based on proximity

This commit is contained in:
Marc Di Luzio 2015-01-31 18:18:47 +00:00
parent b3cef55412
commit 7bead385d3

View file

@ -1,4 +1,29 @@
// If we're ready // list of destinations
var destinations = [{
name: "SOUTHSIDE",
num: 0,
}, {
name: "FRANCE",
num: 0,
}, {
name: "TADS",
num: 0,
}, {
name: "SAVOYS",
num: 0,
}, {
name: "PIZZA",
num: 0,
}, {
name: "PACKED LUNCH",
num: 0,
}, ];
var title = "FOODICATOR: RELOADED";
var titlefont = "40px Arial";
var destfont = "25px Arial";
// to block until ready
var ready = false; var ready = false;
// My ID // My ID
@ -53,7 +78,7 @@ var eurecaClientSetup = function() {
// Spawn another player // Spawn another player
eurecaClient.exports.spawnPlayer = function(i, x, y) { eurecaClient.exports.spawnPlayer = function(i, x, y) {
if (i == myId) return; // do nothing for me if (i === myId) return; // do nothing for me
// log and create the player // log and create the player
console.log(i, " connected"); console.log(i, " connected");
@ -65,18 +90,30 @@ var eurecaClientSetup = function() {
// Update a player state // Update a player state
eurecaClient.exports.updateState = function(id, state) { eurecaClient.exports.updateState = function(id, state) {
if (id === myId) return; // do nothing for me
var pl = playerList[id]; var pl = playerList[id];
// if we have this player update it's pos // if we have this player update it's pos
if (pl) { if (pl) {
pl.sprite.x = state.x; pl.sprite.x = state.x;
pl.sprite.y = state.y; pl.sprite.y = state.y;
} else {
// If we don't have it, we probably should so add it
var player = new Player(id, state.x, state.y);
// add to our list
playerList[i] = player;
} }
} }
} }
var width = 800;
var height = 540;
// Create the game // Create the game
var game = new Phaser.Game(800, 540, var game = new Phaser.Game(width, height,
Phaser.AUTO, Phaser.AUTO,
'', { '', {
preload: preload, preload: preload,
@ -86,13 +123,21 @@ var game = new Phaser.Game(800, 540,
// get the length of a vector // get the length of a vector
function length(vec) { function lengthV(vec) {
return Math.sqrt((vec.x * vec.x) + (vec.y * vec.y)); return length(vec.x,vec.y);
}
function length(x,y) {
return Math.sqrt((x * x) + (y * y));
}
// get the length of a vector
function distance(x1, y1, x2, y2) {
return length( x1 - x2, y1 - y2 );
} }
// Normalise a vector // Normalise a vector
function normalise(vec) { function normaliseV(vec) {
var len = length(vec); var len = lengthV(vec);
vec.x = (vec.x / len); vec.x = (vec.x / len);
vec.y = (vec.y / len); vec.y = (vec.y / len);
} }
@ -158,8 +203,8 @@ Player.prototype.update = function() {
} }
// Normalise out force // Normalise out force
if (length(force) > 0) { if (lengthV(force) > 0) {
normalise(force) normaliseV(force)
// Limit to pos // Limit to pos
velocity.x = Math.min(velocity.x + force.x, topSpeed); velocity.x = Math.min(velocity.x + force.x, topSpeed);
@ -177,7 +222,7 @@ Player.prototype.update = function() {
} }
// if we have a speed, then update pos and send info to server // if we have a speed, then update pos and send info to server
if (length(velocity) > 1) { if (lengthV(velocity) > 1) {
sprite.position.x = sprite.position.x + velocity.x; sprite.position.x = sprite.position.x + velocity.x;
sprite.position.y = sprite.position.y + velocity.y; sprite.position.y = sprite.position.y + velocity.y;
@ -197,6 +242,84 @@ Player.prototype.kill = function() {
this.alive = false; this.alive = false;
} }
function createDests() {
var minX = 0;
var maxX = width - minX;
var minY = 150;
var maxY = height;
var len = destinations.length;
// we need 3 columns max
var numCols = 3;
var numRows = len / numCols;
var colsep = ((maxX - minX) * (1 / numCols));
var rowsep = ((maxY - minY) * (1 / numRows));
var num = 0;
var row = 0;
var col = 0;
for (var i = 0; i < len; ++i) {
var dest = destinations[i];
var posX = minX + (colsep * col) + (colsep * 0.5);
var posY = minY + (rowsep * row);
// Create our destination text
var destText = game.add.text(posX, posY, dest.name, {
font: destfont,
fill: "#FFFFFF"
});
destText.anchor.x = Math.round(destText.width * 0.5) / destText.width;
// Add to our group
textGroup.add(destText);
dest.text = destText;
// increment num, rows and cols
num++;
col = num % numCols;
if (col === 0) row++;
}
}
function updateDests() {
var votingRange = 100;
// Get number of voters
var len = destinations.length
for (var i = 0; i < len; ++i) {
var dest = destinations[i];
dest.num = 0;
dest.vote = false;
// For each external player
for (var p in playerList) {
var dist = distance(playerList[p].sprite.x,playerList[p].sprite.y, dest.text.x, dest.text.y);
if (dist < votingRange) dest.num++;
}
// Add for the current player
var dist = distance(player.sprite.x,player.sprite.y, dest.text.x, dest.text.y);
if (dist < votingRange)
{
dest.num++;
dest.vote = true;
}
}
// Set the texts
for (var i = 0; i < len; ++i) {
var dest = destinations[i];
dest.text.setText( dest.name + ":" + dest.num);
}
}
// Phaser functions // Phaser functions
// preload all assets // preload all assets
@ -209,9 +332,6 @@ function preload() {
// load the background // load the background
game.load.image("bg", "assets/bg.png"); game.load.image("bg", "assets/bg.png");
// load the background
game.load.image("options", "assets/options.png");
// Load the dude // Load the dude
game.load.image('dude', 'assets/dude.png', 50, 50); game.load.image('dude', 'assets/dude.png', 50, 50);
} }
@ -223,7 +343,7 @@ function create() {
var background = game.add.sprite(0, 0, "bg"); var background = game.add.sprite(0, 0, "bg");
// create our player // create our player
player = new Player(myId, game.world.centerX + (25 - Math.random() * 50),game.world.centerY + (25 - Math.random() * 50) ); player = new Player(myId, game.world.centerX + (25 - Math.random() * 50), game.world.centerY + (25 - Math.random() * 50));
// Get controls // Get controls
controls = game.input.keyboard.createCursorKeys(); controls = game.input.keyboard.createCursorKeys();
@ -232,11 +352,16 @@ function create() {
textGroup = game.add.group(); textGroup = game.add.group();
// Create our title text // Create our title text
var titleText= game.add.text(game.world.centerX,10,"FOODICATOR", {font: "65px Arial", fill: "#FFFFFF" }); var titleText = game.add.text(game.world.centerX, 20, title, {
font: titlefont,
fill: "#FFFFFF"
});
titleText.anchor.x = Math.round(titleText.width * 0.5) / titleText.width; titleText.anchor.x = Math.round(titleText.width * 0.5) / titleText.width;
// Add to our group // Add to our group
textGroup.add(titleText); textGroup.add(titleText);
createDests();
} }
// On update // On update
@ -250,4 +375,7 @@ function update() {
// Bring the text group to the top // Bring the text group to the top
game.world.bringToTop(textGroup); game.world.bringToTop(textGroup);
// Update our destinations
updateDests();
} }