add client side physics
by god did this take a lot of debugging to get working
This commit is contained in:
parent
65f78ec3ac
commit
1412cabbb4
19 changed files with 697 additions and 71 deletions
|
@ -1,14 +1,14 @@
|
|||
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];
|
||||
this.xvel = data.delta[2];
|
||||
this.yvel = data.delta[3];
|
||||
this.rvel = data.delta[5];
|
||||
this.r = data.delta[2];
|
||||
this.team = data.team;
|
||||
this.name = data.name;
|
||||
this.hull = '01';
|
||||
this.move = [];
|
||||
this.thrust = {};
|
||||
this.power = data.power;
|
||||
this.mounts = data.mounts;
|
||||
this.turrets = data.turrets;
|
||||
this.frame = data.frame;
|
||||
|
@ -18,46 +18,71 @@ function Ship(data) {
|
|||
'large': 24
|
||||
}[data.size];
|
||||
this.lastMove = [];
|
||||
this.b2body = false;
|
||||
this.bodyType = 'ship';
|
||||
this.com = {
|
||||
x: 16,
|
||||
y: 17.6
|
||||
x: 0,
|
||||
y: 0
|
||||
};
|
||||
|
||||
var b2Vec2 = Box2D.Common.Math.b2Vec2;
|
||||
var s = SCALE;
|
||||
|
||||
this.getPos = function() {
|
||||
var pos = this.b2body.GetPosition();
|
||||
var angle = this.b2body.GetAngle();
|
||||
return {
|
||||
x: this.x * s,
|
||||
y: this.y * s
|
||||
x: pos.x,
|
||||
y: pos.y,
|
||||
r: angle
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.update = function (data) {
|
||||
this.x = data[0];
|
||||
this.y = data[1];
|
||||
this.xvel = data[2];
|
||||
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.updated = true;
|
||||
this.thrust = {
|
||||
forward: data[6],
|
||||
left: data[7],
|
||||
right: data[8]
|
||||
}
|
||||
};
|
||||
|
||||
this.updateMove = function() {
|
||||
if (JSON.stringify(this.move) != JSON.stringify(this.lastMove) || true) {
|
||||
game.net.update(this.move);
|
||||
this.lastMove = Array.apply(0, this.move); // Bloody Javascript.
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.applyForce = function(x, y) {
|
||||
var b = this.b2body;
|
||||
b.ApplyForce(new b2Vec2(x, y), b.GetWorldCenter());
|
||||
};
|
||||
|
||||
this.applyTorque = function(f) {
|
||||
this.b2body.ApplyTorque(f);
|
||||
};
|
||||
|
||||
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[0]) {
|
||||
var power = this.power.forward;
|
||||
var x = Math.cos(this.getPos().r) * power;
|
||||
var y = Math.sin(this.getPos().r) * power;
|
||||
this.applyForce(x, y);
|
||||
}
|
||||
|
||||
if (this.move[1]) this.rvel -= 0.01;
|
||||
if (this.move[2]) this.rvel += 0.01;
|
||||
}
|
||||
if (this.move[1]) {
|
||||
this.applyTorque(-this.power.rotation);
|
||||
}
|
||||
|
||||
if (this.move[2]) {
|
||||
this.applyTorque(this.power.rotation);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue