add robust fixture rendering

This commit is contained in:
Asraelite 2016-03-30 15:58:06 +01:00
parent ef2d067b38
commit cf4e8024af
13 changed files with 140 additions and 64 deletions

View file

@ -9,7 +9,6 @@ class Blaster extends Fixture {
}
fire() {
wingbase.debug('pew pew');
let data = {
speed: 1

View file

@ -1,36 +1,35 @@
'use strict';
const traits = require('../../traits/fixtures.json');
class Fixture {
constructor(mount, data) {
this.type = data.type;
this.id = data.id;
this.rof = data.rateOfFire;
this.state = 0;
this.projectiles = new Set();
this._angle = mount.traversal ? mount.traversal.cw : 0;
this.mount = mount;
this.projectiles = new WeakSet();
let turretTraits = traits[data.type];
console.log(turretTraits);
this.rof = turretTraits.rateOfFire;
this.traversal = this.mount.traversal || false;
this.fired = false;
this._angle = this.traversal ? this.traversal.cw : 0;
}
destruct() {
this.projectiles.forEach(p => p.world.removeBody(p));
}
fire() {
}
packFull() {
return {
traversal: this.traversal
traversal: this.traversal,
angle: this.angle
}
}
packDelta() {
return [this.traversal];
}
get angle() {
@ -39,7 +38,7 @@ class Fixture {
set angle(angle) {
// TODO: Check if within traversal limit if on mount.
if (this.type == 'fixed') return;
if (this.mount.type == 'fixed') return;
this._angle = angle;
}
}

View file

@ -0,0 +1,15 @@
'use strict';
const Fixture = require('./fixture.js');
class Grapple extends Fixture {
constructor(mount, data) {
super(mount, data);
}
fire() {
}
}
module.exports = Grapple;

View file

@ -1,51 +1,78 @@
'use strict';
const Blaster = require('./blaster.js');
const Grapple = require('./grapple.js');
const traits = require('../../traits/fixtures.json');
class Mount {
constructor(ship, data, fixture) {
this.ship = ship;
//this.ship = ship;
this.type = data.type || 'turret';
this.fixture = fixture || false//new Fixture(fixture);
this.size = data.size || 0;
this.hidden = data.hidden || 'false';
this.position = {
x: data.pos[0],
y: data.pos[1]
}
this.traversal = data.traversal ? {
cw: data.bounds[0],
ccw: data.bounds[1]
cw: data.traversal[0],
ccw: data.traversal[1]
} : 0;
this.updateDeltaInterface();
this.deltaInterface = ['traversal'];
this.fixture = false;
this.setFixture(fixture);
}
destruct() {
if (!this.fixture) return;
//this.fixture.destruct();
this.fixture.destruct();
}
fire() {
console.log(this.fixture);
if (!this.fixture) return;
this.fixture.fire();
}
setFixture(fixture) {
if (!(fixture in traits)) return;
let fixtureClass = {
'blaster': Blaster,
'grapple': Grapple
}[traits[fixture].type];
if (!fixtureClass) return;
let data = traits[fixture];
data.id = fixture;
this.fixture = new fixtureClass(this, data);
}
packDelta() {
return [this.traversal || 0];
return [this.angle || 0, this.fixture.state || 0];
}
updateDeltaInterface() {
this.deltaInterface = ['traversal'];
packTypeDelta() {
return [0];
}
packFull() {
return {
x: this.position.x,
y: this.position.y,
type: this.fixture ? this.fixture : 0
hidden: this.hidden,
fixture: this.fixture ? this.fixture.id : 0
};
}
get angle() {
return this.fixture ? this.fixture.angle : 0;
}
}
module.exports = Mount;