51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
import Body from './body.mjs';
|
|
import {modules} from '../data.mjs';
|
|
import {playerShip} from './index.mjs';
|
|
import {images as assets} from '../assets.mjs';
|
|
import {celestials, particles, entities} from './index.mjs';
|
|
import * as particle from './particle.mjs';
|
|
import * as consts from '../consts.mjs';
|
|
import * as events from '../game/events.mjs';
|
|
|
|
export default class Tracer extends Body {
|
|
constructor(ship) {
|
|
super(...ship.pos, 0.1);
|
|
|
|
this.ship = ship;
|
|
this.path = [];
|
|
}
|
|
|
|
run(distance) {
|
|
this.path = [];
|
|
[this.x, this.y] = this.ship.com;
|
|
[this.xvel, this.yvel] = [this.ship.xvel, this.ship.yvel];
|
|
let dis = 0;
|
|
let last = this.pos;
|
|
let factor = 5;
|
|
|
|
for (let i = 0; dis < distance; i++) {
|
|
if (this.tickPath(factor)) break;
|
|
this.path.push(this.pos);
|
|
|
|
if (i % 10 === 0) {
|
|
let [lx, ly] = last;
|
|
dis += Math.sqrt((this.x - lx) ** 2 + (this.y - ly) ** 2);
|
|
last = this.pos;
|
|
}
|
|
|
|
if (i > distance * 5) break;
|
|
}
|
|
|
|
[this.x, this.y] = this.ship.com;
|
|
}
|
|
|
|
tick() {
|
|
this.run(100);
|
|
}
|
|
|
|
tickPath(speed) {
|
|
this.tickMotion(speed);
|
|
this.tickGravity(celestials, speed);
|
|
return !!this.getCelestialCollision(celestials);
|
|
}
|
|
}
|