import { AExchangeable } from "../../AExchangable.js"; import { PongGame } from "./PongGame.js"; import { renderCube} from "../../../3D/cube.js" import { Position } from "./Position.js"; import { Point } from "./Point.js"; export class PongBall extends AExchangeable { /** * * @param {PongGame} game * @param {Position} position * @param {Number} angle * @param {Number} speed * @param {Number} size */ constructor(game, size, position = new Position(new Point(game.config.CENTER_X, game.config.CENTER_Y), 0), angle, speed) { super(); /** * @type {PongGame} */ this.game = game; /** * @type {Position} */ this.position = position; /** * @type {Number} */ this.size = size; /** * @type {Number} */ this.angle = angle; /** * @type {Number} */ this.speed = speed; } /** * * @param {CanvasRenderingContext2D} ctx */ draw(ctx) { if(ctx instanceof CanvasRenderingContext2D) { ctx.rect(this.position.location.x - this.size / 2, this.position.location.y - this.size / 2, this.size, this.size); } else if(ctx instanceof WebGLRenderingContext) { const size = this.size * 3; const posx = (this.position.location.x - this.size / 2) - this.game.config.MAP_SIZE_X / 2; const posy = (this.position.location.y - this.size / 2) - this.game.config.MAP_SIZE_Y / 2; renderCube(ctx, posx, 0, posy, 0, size, size, size); } else { alert('Unknown rendering context type'); } } /** * * @param {CanvasRenderingContext2D} ctx */ render(ctx) { let distance = this.speed * (this.game.time.deltaTime() / 1000); this.position.location.x = this.position.location.x + distance * Math.cos(this.angle); this.position.location.y = this.position.location.y - distance * Math.sin(this.angle); this.draw(ctx); } }