import { Point } from "./Point.js"; import { renderCube } from "../../3D/cube.js" class Segment { /** * @param {Point} start * @param {Point} stop */ constructor(game, start, stop) { /** * @type {Point} */ this.start = start === undefined ? new Point() : start; this.game = game; /** * @type {Point} */ this.stop = stop === undefined ? new Point() : stop; } angle() { let x = this.start.x - this.stop.x, y = this.start.y - this.stop.y; return Math.atan2(y, x); } len() { let x = this.start.x - this.stop.x, y = this.start.y - this.stop.y; return (x ** 2 + y ** 2) ** (1 / 2); } draw(ctx) { if(ctx instanceof CanvasRenderingContext2D) { ctx.moveTo(this.start.x, this.start.y); ctx.lineTo(this.stop.x, this.stop.y); } else if(ctx instanceof WebGLRenderingContext) { const size = this.game.config.ball_size * 2; const sizex = this.len() / 2; const posx = (this.start.x - this.game.config.center_x); const posy = (this.start.y - this.game.config.center_y); renderCube(ctx, posx, 0, posy, -this.angle(), sizex, size, size); } else { alert('Unknown rendering context type'); } } from_json(data) { this.start = this.start.from_json(data.start); this.stop = this.stop.from_json(data.stop); return this; } } export { Segment }