'use strict'; const Projectile = require('./projectile.js'); const Rope = require('../copula/rope.js'); class Grapple extends Projectile { constructor(world, pos, source) { super(world); this.x = pos.x * 32; this.y = pos.y * 32; this.xvel = pos.xvel; this.yvel = pos.yvel; this.r = pos.r; this.xvel += Math.cos(this.r) * 0.2; this.yvel += Math.sin(this.r) * 0.2; this.source = source; this.player = source.player; this.rope = new Rope(this, this); this.type = 'grapple'; this.frame = [ [[0, -8], [5, -12], [4, 0], [0, 0]], [[0, 0], [4, 0], [5, 12], [0, 8]] ]; } contact(body) { this.detonate(); } detonate() { this.world.explosion(this.center, 10); this.world.room.broadcast('effect', { type: 'explosion', size: 10, pos: this.center }); this.world.removeBody(this); } tickType() { let power = 0.004; let x = Math.cos(this.b2body.GetAngleRadians()) * power; let y = Math.sin(this.b2body.GetAngleRadians()) * power; this.applyForce(x, y); if(this.fuel-- <= 0) { this.detonate(); } } packTypeDelta() { return []; } packFull() { return { type: 'missile', id: this.id, source: this.source.id, frame: this.frame, delta: this.packDelta() }; } } module.exports = Missile;