wingbase/server/game/room/world/body/hardpoint/fixture.js
2016-10-18 17:35:14 +01:00

65 lines
1.1 KiB
JavaScript

'use strict';
class Fixture {
constructor(mount, data) {
this.type = data.type;
this.id = data.id;
this.rof = 60 / data.rateOfFire | 0;
this.autofire = data.autofire || false;
this.fired = false;
this.cooldown = 0;
this.state = 0;
this.projectiles = new Set();
this._angle = mount.traversal ? mount.traversal.cw : 0;
this.mount = mount;
this.body = this.mount.body;
}
destruct() {
this.projectiles.forEach(p => p.world.removeBody(p));
if (this.grapple) this.grapple.release();
}
fire(value) {
if (this.cooldown > 0) return;
if (this.fired && !this.autofire) return;
this.fireType(value);
this.cooldown = this.rof;
this.fired = true;
}
rest() {
this.fired = false;
}
tick() {
if (this.cooldown > 0)
this.cooldown--;
}
packFull() {
return {
traversal: this.traversal,
angle: this.angle
}
}
packDelta() {
}
get angle() {
return this._angle;
}
set angle(angle) {
// TODO: Check if within traversal limit if on mount.
if (this.mount.type == 'fixed') return;
this._angle = angle;
}
}
module.exports = Fixture;