import * as c from "../constants.js" import * as en from "../../shared_js/enums.js" import { VectorInteger } from "./Vector.js"; import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js"; import { random } from "../utils.js"; class GameComponents { wallTop: Rectangle | MovingRectangle; wallBottom: Rectangle | MovingRectangle; playerLeft: Racket; playerRight: Racket; ballsArr: Ball[] = []; constructor(options: en.MatchOptions) { const pos = new VectorInteger; // Rackets pos.assign(0+c.pw, c.h_mid-c.ph/2); this.playerLeft = new Racket(pos, c.pw, c.ph, c.racketSpeed); pos.assign(c.w-c.pw-c.pw, c.h_mid-c.ph/2); this.playerRight = new Racket(pos, c.pw, c.ph, c.racketSpeed); // Balls let ballsCount = 1; if (options & en.MatchOptions.multiBalls) { ballsCount = c.multiBallsCount; } pos.assign(-c.ballSize, -c.ballSize); // ball out =) while (this.ballsArr.length < ballsCount) { this.ballsArr.push(new Ball(pos, c.ballSize, c.ballSpeed, c.ballSpeedIncrease)) } this.ballsArr.forEach((ball) => { ball.dir.x = 1; if (random() > 0.5) { ball.dir.x *= -1; } ball.dir.y = random(0, 0.2); if (random() > 0.5) { ball.dir.y *= -1; } ball.dir = ball.dir.normalized(); }); // Walls if (options & en.MatchOptions.movingWalls) { pos.assign(0, 0); this.wallTop = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed); (this.wallTop).dir.y = -1; pos.assign(0, c.h-c.wallSize); this.wallBottom = new MovingRectangle(pos, c.w, c.wallSize, c.movingWallSpeed); (this.wallBottom).dir.y = 1; } else { pos.assign(0, 0); this.wallTop = new Rectangle(pos, c.w, c.wallSize); pos.assign(0, c.h-c.wallSize); this.wallBottom = new Rectangle(pos, c.w, c.wallSize); } } } export {GameComponents}