improve multiplayer
This commit is contained in:
parent
0aa259b874
commit
2fffe574c1
10 changed files with 76 additions and 19 deletions
|
@ -39,6 +39,8 @@ function Game() {
|
|||
|
||||
self.input.clear();
|
||||
|
||||
self.world.tick();
|
||||
|
||||
requestAnimationFrame(self.tick);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ function Net() {
|
|||
this.socket;
|
||||
|
||||
this.connect = function() {
|
||||
this.socket = io.connect('http://localhost:8080');
|
||||
this.socket = io.connect('/');
|
||||
|
||||
this.socket.on('connect', function() {
|
||||
game.connected = true;
|
||||
|
@ -27,6 +27,10 @@ function Net() {
|
|||
game.world.add(data.bodies[i]);
|
||||
}
|
||||
});
|
||||
|
||||
this.socket.on('create', function(data) {
|
||||
game.world.add(data);
|
||||
});
|
||||
};
|
||||
|
||||
this.update = function(move) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
function renderShip(pallet, ship) {
|
||||
var img = game.assets.images.ships[ship.hull].hull;
|
||||
var col = game.assets.images.ships[ship.hull].teamb;
|
||||
var teama = game.assets.images.ships[ship.hull].teama;
|
||||
var teamb = game.assets.images.ships[ship.hull].teamb;
|
||||
var thr0 = game.assets.images.ships[ship.hull].thrust0;
|
||||
var thr5 = game.assets.images.ships[ship.hull].thrust5;
|
||||
var thr8 = game.assets.images.ships[ship.hull].thrust8;
|
||||
|
@ -12,7 +13,7 @@ function renderShip(pallet, ship) {
|
|||
var vy = -game.world.getCenter().y;
|
||||
|
||||
pallet.view(x + vx, y + vy, false, ship.r);
|
||||
pallet.image(col, 0, 0, 0);
|
||||
pallet.image(ship.team == 'a' ? teama : teamb, 0, 0, 0);
|
||||
pallet.image(img, 0, 0, 0);
|
||||
pallet.image(ship.move[0] ? thr8 : thr0, 0, 0, 0);
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
function Asteroid(data) {
|
||||
this.id = data.id;
|
||||
this.x = data.delta[0];
|
||||
this.y = data.delta[1];
|
||||
this.r = data.delta[2];
|
||||
this.x = data[0];
|
||||
this.y = data[1];
|
||||
this.r = data[2];
|
||||
this.bodyType = 'asteroid';
|
||||
this.frame = data.frame;
|
||||
|
||||
|
@ -16,6 +16,17 @@ function Asteroid(data) {
|
|||
this.update = function(data) {
|
||||
this.x = data[0];
|
||||
this.y = data[1];
|
||||
this.xvel = data[2];
|
||||
this.yvel = data[3];
|
||||
this.r = data[4];
|
||||
this.rvel = data[5];
|
||||
}
|
||||
|
||||
this.tick = function() {
|
||||
this.x += this.xvel * 10;
|
||||
this.y += this.yvel * 10;
|
||||
this.r += this.rvel * 10;
|
||||
this.xvel *= 0.98;
|
||||
this.yvel *= 0.98;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
function Ship(data) {
|
||||
this.id = data.id;
|
||||
this.team = data.team;
|
||||
this.x = data.delta[0];
|
||||
this.y = data.delta[1];
|
||||
this.r = data.delta[4];
|
||||
|
@ -30,6 +31,8 @@ function Ship(data) {
|
|||
this.xvel = data[2];
|
||||
this.yvel = data[3];
|
||||
this.r = data[4];
|
||||
this.rvel = data[5];
|
||||
if(this != game.world.playerShip) this.move[0] = data[6];
|
||||
}
|
||||
|
||||
this.updateMove = function() {
|
||||
|
@ -38,4 +41,15 @@ function Ship(data) {
|
|||
this.lastMove = Array.apply(0, this.move); // Bloody Javascript.
|
||||
}
|
||||
}
|
||||
|
||||
this.tick = function() {
|
||||
this.x += this.xvel * 10;
|
||||
this.y += this.yvel * 10;
|
||||
//this.r += this.rvel * 10;
|
||||
this.xvel *= 0.98;
|
||||
this.yvel *= 0.98;
|
||||
|
||||
if (this.move[1]) this.rvel -= 0.01;
|
||||
if (this.move[2]) this.rvel += 0.01;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,25 +20,25 @@ function World() {
|
|||
y += Math.sin(a + r) * d;
|
||||
|
||||
return { x: x, y: y };
|
||||
}
|
||||
};
|
||||
|
||||
this.add = function(data) {
|
||||
var body;
|
||||
if (data.type == 'asteroid') body = new Asteroid(data);
|
||||
if (data.type == 'ship') body = new Ship(data);
|
||||
if (data.type == 'structure') body = new Structure(data);
|
||||
|
||||
|
||||
this.bodies[body.id] = body;
|
||||
}
|
||||
};
|
||||
|
||||
this.remove = function(id) {
|
||||
delete this.bodies[id];
|
||||
}
|
||||
};
|
||||
|
||||
this.clear = function() {
|
||||
this.bodies = {};
|
||||
this.playerShip = false;
|
||||
}
|
||||
};
|
||||
|
||||
this.update = function(data) {
|
||||
this.playerShip = this.bodies[this.playerShipId];
|
||||
|
@ -54,5 +54,11 @@ function World() {
|
|||
|
||||
if (data[id].destroy) delete this.bodies[id];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.tick = function() {
|
||||
for (var i in this.bodies) {
|
||||
this.bodies[i].tick();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -25,12 +25,16 @@ class Player {
|
|||
});
|
||||
}
|
||||
|
||||
send(msg, data) {
|
||||
this.connection.send(msg, data);
|
||||
}
|
||||
|
||||
sendWorld(data) {
|
||||
this.connection.send('world', data);
|
||||
}
|
||||
|
||||
sendUpdate() {
|
||||
if (Object.keys(this.delta).length == 0) return;
|
||||
if (Object.keys(this.delta).length == 0 || Math.random() < 0) return;
|
||||
this.connection.send('update', this.delta);
|
||||
this.delta = {};
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ class Room {
|
|||
this.players = new Set();
|
||||
this.teamA = new Set();
|
||||
this.teamB = new Set();
|
||||
this.world = new World();
|
||||
this.world = new World(this);
|
||||
this.name = (Math.random() * 100000 | 0).toString(36);
|
||||
|
||||
this.start();
|
||||
|
@ -42,6 +42,10 @@ class Room {
|
|||
self.players.forEach(player => player.sendUpdate());
|
||||
}
|
||||
|
||||
broadcast(msg, data) {
|
||||
this.players.forEach(player => player.send(msg, data));
|
||||
}
|
||||
|
||||
sendWorld(player) {
|
||||
let data = {
|
||||
playerShipId: player.ship.id,
|
||||
|
|
|
@ -5,13 +5,14 @@ const Physics = require('./physics.js');
|
|||
const Ship = require('./ship.js');
|
||||
|
||||
class World {
|
||||
constructor() {
|
||||
constructor(room) {
|
||||
this.physics = new Physics();
|
||||
this.bodies = new Set();
|
||||
this.structures = new Set();
|
||||
this.asteroids = new Set();
|
||||
this.ships = new Map();
|
||||
this.players = new Set();
|
||||
this.room = room;
|
||||
}
|
||||
|
||||
addPlayer(player) {
|
||||
|
@ -27,14 +28,18 @@ class World {
|
|||
|
||||
addShip(ship) {
|
||||
this.ships.set(ship.player, ship);
|
||||
this.bodies.add(ship);
|
||||
this.physics.createBody(ship);
|
||||
this.addBody(ship);
|
||||
}
|
||||
|
||||
addAsteroid(asteroid) {
|
||||
this.asteroids.add(asteroid);
|
||||
this.bodies.add(asteroid);
|
||||
this.physics.createBody(asteroid);
|
||||
this.addBody(asteroid);
|
||||
}
|
||||
|
||||
addBody(body) {
|
||||
this.bodies.add(body);
|
||||
this.physics.createBody(body);
|
||||
this.room.broadcast('create', body.packFull());
|
||||
}
|
||||
|
||||
applyDelta(body, data) {
|
||||
|
|
|
@ -47,6 +47,12 @@ class Ship extends Body {
|
|||
if (data.right) {
|
||||
this.applyTorque(this.power.rotation);
|
||||
}
|
||||
|
||||
this.thrust = {
|
||||
forward: data.forward,
|
||||
left: data.left,
|
||||
right: data.right
|
||||
};
|
||||
}
|
||||
|
||||
packTypeDelta() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue