diff --git a/src/client/class/GameArea.ts b/src/client/class/GameArea.ts index e6921e4e..5483baa4 100644 --- a/src/client/class/GameArea.ts +++ b/src/client/class/GameArea.ts @@ -1,7 +1,7 @@ import * as c from ".././constants.js" -class GameArea { +export class GameArea { keys: string[] = []; handleInputInterval: number = 0; gameLoopInterval: number = 0; @@ -34,5 +34,3 @@ class GameArea { this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); } } - -export {GameArea} diff --git a/src/client/class/GameComponentsClient.ts b/src/client/class/GameComponentsClient.ts index deabbdb3..9fa0a2a3 100644 --- a/src/client/class/GameComponentsClient.ts +++ b/src/client/class/GameComponentsClient.ts @@ -62,8 +62,7 @@ class GameComponentsExtensionForClient extends GameComponents { } } - -class GameComponentsClient extends GameComponentsExtensionForClient { +export class GameComponentsClient extends GameComponentsExtensionForClient { midLine: Line; scoreLeft: TextNumericValue; scoreRight: TextNumericValue; @@ -114,5 +113,3 @@ class GameComponentsClient extends GameComponentsExtensionForClient { this.h_grid_d1 = new RectangleClient(pos, c.gridSize, c.h, ctx, "darkgreen"); } } - -export {GameComponentsClient} diff --git a/src/client/class/InputHistory.ts b/src/client/class/InputHistory.ts index e4d3b8f1..952693af 100644 --- a/src/client/class/InputHistory.ts +++ b/src/client/class/InputHistory.ts @@ -2,7 +2,7 @@ import * as en from "../../shared_js/enums.js" import * as ev from "../../shared_js/class/Event.js" -class InputHistory { +export class InputHistory { input: en.InputEnum; id: number; deltaTime: number; @@ -12,5 +12,3 @@ class InputHistory { this.deltaTime = deltaTime; } } - -export {InputHistory} diff --git a/src/client/class/RectangleClient.ts b/src/client/class/RectangleClient.ts index 5c251704..1cc1c4f5 100644 --- a/src/client/class/RectangleClient.ts +++ b/src/client/class/RectangleClient.ts @@ -17,7 +17,7 @@ function clearRectangle(this: RectangleClient, pos?: VectorInteger) { this.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height); } -class RectangleClient extends Rectangle implements GraphicComponent { +export class RectangleClient extends Rectangle implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -31,19 +31,9 @@ class RectangleClient extends Rectangle implements GraphicComponent { this.update = updateRectangle; this.clear = clearRectangle; } - // update() { - // this.ctx.fillStyle = this.color; - // this.ctx.fillRect(this.pos.x, this.pos.y, this.width, this.height); - // } - // clear(pos?: VectorInteger) { - // if (pos) - // this.ctx.clearRect(pos.x, pos.y, this.width, this.height); - // else - // this.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height); - // } } -class MovingRectangleClient extends MovingRectangle implements GraphicComponent { +export class MovingRectangleClient extends MovingRectangle implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -59,7 +49,7 @@ class MovingRectangleClient extends MovingRectangle implements GraphicComponent } } -class RacketClient extends Racket implements GraphicComponent { +export class RacketClient extends Racket implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -75,7 +65,7 @@ class RacketClient extends Racket implements GraphicComponent { } } -class BallClient extends Ball implements GraphicComponent { +export class BallClient extends Ball implements GraphicComponent { ctx: CanvasRenderingContext2D; color: string; update: () => void; @@ -93,10 +83,6 @@ class BallClient extends Ball implements GraphicComponent { this._bounceAlgo(collider); soundPongArr[ Math.floor(random(0, soundPongArr.length)) ].play(); } - /* protected _bounceRacket(collider: Racket) { - this._bounceRacketAlgo(collider); - soundRoblox.play(); - } */ } function updateLine(this: Line) { @@ -105,17 +91,20 @@ function updateLine(this: Line) { let i = 0; while (i < this.segmentCount) { - // for Horizontal Line + /* Horizontal Line */ // pos.y = this.pos.y; // pos.x = this.pos.x + this.segmentWidth * i; + + /* Vertical Line */ pos.x = this.pos.x; pos.y = this.pos.y + this.segmentHeight * i; + this.ctx.fillRect(pos.x, pos.y, this.segmentWidth, this.segmentHeight); i += 2; } } -class Line extends RectangleClient { +export class Line extends RectangleClient { gapeCount: number = 0; segmentCount: number; segmentWidth: number; @@ -129,13 +118,12 @@ class Line extends RectangleClient { this.gapeCount = gapeCount; this.segmentCount = this.gapeCount * 2 + 1; + /* Vertical Line */ this.segmentWidth = this.width; this.segmentHeight = this.height / this.segmentCount; - // for Horizontal Line + /* Horizontal Line */ // this.segmentWidth = this.width / this.segmentCount; // this.segmentHeight = this.height; } } - -export {RectangleClient, MovingRectangleClient, RacketClient, BallClient, Line} diff --git a/src/client/class/Text.ts b/src/client/class/Text.ts index 88111131..11f00ab9 100644 --- a/src/client/class/Text.ts +++ b/src/client/class/Text.ts @@ -3,7 +3,7 @@ import { Vector, VectorInteger } from "../../shared_js/class/Vector.js"; import { Component } from "../../shared_js/class/interface.js"; // conflict with Text -class TextElem implements Component { +export class TextElem implements Component { ctx: CanvasRenderingContext2D; pos: VectorInteger; color: string; @@ -39,7 +39,7 @@ class TextElem implements Component { } } -class TextNumericValue extends TextElem { +export class TextNumericValue extends TextElem { private _value: number = 0; constructor(pos: VectorInteger, size: number, ctx: CanvasRenderingContext2D, color: string, font?: string) @@ -54,5 +54,3 @@ class TextNumericValue extends TextElem { this.text = v.toString(); } } - -export {TextElem, TextNumericValue} diff --git a/src/client/draw.ts b/src/client/draw.ts index 0837c84c..204c55f5 100644 --- a/src/client/draw.ts +++ b/src/client/draw.ts @@ -1,10 +1,8 @@ import { pong, gc } from "./global.js" -import * as c from "./constants.js" -import * as en from "../shared_js/enums.js" import { gridDisplay } from "./handleInput.js"; -function drawLoop() +export function drawLoop() { pong.clear(); @@ -49,5 +47,3 @@ function drawGrid() gc.h_grid_u1.update(); gc.h_grid_d1.update(); } - -export {drawLoop} diff --git a/src/client/gameLoop.ts b/src/client/gameLoop.ts index 593d1eaa..60e25753 100644 --- a/src/client/gameLoop.ts +++ b/src/client/gameLoop.ts @@ -8,7 +8,7 @@ let actual_time: number = Date.now(); let last_time: number; let delta_time: number; -function gameLoop() +export function gameLoop() { /* last_time = actual_time; actual_time = Date.now(); @@ -45,5 +45,3 @@ function opponentInterpolation(delta: number) clientInfo.opponent.pos.y = clientInfo.opponentNextPos.y; } } - -export {gameLoop} diff --git a/src/client/handleInput.ts b/src/client/handleInput.ts index 164680e1..33b956f4 100644 --- a/src/client/handleInput.ts +++ b/src/client/handleInput.ts @@ -20,7 +20,7 @@ const inputHistoryArr: InputHistory[] = []; socket.send(JSON.stringify(inputState)); } */ -function handleInput() +export function handleInput() { /* last_time = actual_time; actual_time = Date.now(); @@ -86,7 +86,7 @@ function playerMovePrediction(delta: number, input: en.InputEnum) racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]); } -function repeatInput(lastInputId: number) +export function repeatInput(lastInputId: number) { // server reconciliation let i = inputHistoryArr.findIndex((value: InputHistory) => { @@ -106,5 +106,3 @@ function repeatInput(lastInputId: number) } }); } - -export {handleInput, repeatInput} diff --git a/src/client/utils.ts b/src/client/utils.ts index db971447..ff45234d 100644 --- a/src/client/utils.ts +++ b/src/client/utils.ts @@ -1,7 +1,7 @@ export * from "../shared_js/utils.js" -function countdown(count: number, callback?: (count: number) => void, endCallback?: () => void) +export function countdown(count: number, callback?: (count: number) => void, endCallback?: () => void) { console.log("countdown ", count); if (count > 0) { @@ -14,5 +14,3 @@ function countdown(count: number, callback?: (count: number) => void, endCallbac endCallback(); } } - -export {countdown} diff --git a/src/server/class/Client.ts b/src/server/class/Client.ts index fbdd8fd3..df8f996b 100644 --- a/src/server/class/Client.ts +++ b/src/server/class/Client.ts @@ -5,9 +5,9 @@ import { GameSession } from "./GameSession.js"; import * as ev from "../../shared_js/class/Event.js" import * as en from "../../shared_js/enums.js" -class Client { +export class Client { socket: WebSocket; - id: string; // Pas indispensable si "socket" a une copie de "id" + id: string; // same as "socket.id" isAlive: boolean = true; gameSession: GameSession = null; matchOptions: en.MatchOptions = 0; @@ -17,7 +17,7 @@ class Client { } } -class ClientPlayer extends Client { +export class ClientPlayer extends Client { inputBuffer: ev.EventInput = new ev.EventInput(); lastInputId: number = 0; racket: Racket; @@ -27,10 +27,8 @@ class ClientPlayer extends Client { } } -class ClientSpectator extends Client { // Wip, unused +export class ClientSpectator extends Client { // Wip, unused constructor(socket: WebSocket, id: string) { super(socket, id); } } - -export {Client, ClientPlayer, ClientSpectator} diff --git a/src/server/class/GameComponentsServer.ts b/src/server/class/GameComponentsServer.ts index d8f2c044..691a3991 100644 --- a/src/server/class/GameComponentsServer.ts +++ b/src/server/class/GameComponentsServer.ts @@ -1,9 +1,8 @@ -import * as c from "../constants.js" import * as en from "../../shared_js/enums.js" import { GameComponents } from "../../shared_js/class/GameComponents.js"; -class GameComponentsServer extends GameComponents { +export class GameComponentsServer extends GameComponents { scoreLeft: number = 0; scoreRight: number = 0; constructor(options: en.MatchOptions) @@ -11,5 +10,3 @@ class GameComponentsServer extends GameComponents { super(options); } } - -export {GameComponentsServer} diff --git a/src/server/class/GameSession.ts b/src/server/class/GameSession.ts index d9953502..a37204a6 100644 --- a/src/server/class/GameSession.ts +++ b/src/server/class/GameSession.ts @@ -10,10 +10,11 @@ import { Ball } from "../../shared_js/class/Rectangle.js"; import { wallsMovements } from "../../shared_js/wallsMovement.js"; /* - Arg "s: GameSession" replace "this: GameSession" for use with setTimeout(), - because "this" is equal to "this: Timeout" + multiples methods of GameSession have parameter "s: GameSession". + its used with calls to setTimeout(), + because "this" is not equal to the GameSession but to "this: Timeout" */ -class GameSession { +export class GameSession { id: string; // url ? playersMap: Map = new Map(); unreadyPlayersMap: Map = new Map(); @@ -210,5 +211,3 @@ class GameSession { }); } } - -export {GameSession} diff --git a/src/server/utils.ts b/src/server/utils.ts index 0c939b8c..3cd0a4a5 100644 --- a/src/server/utils.ts +++ b/src/server/utils.ts @@ -1,8 +1,6 @@ export * from "../shared_js/utils.js" -function shortId(id: string): string { +export function shortId(id: string): string { return id.substring(0, id.indexOf("-")); } - -export {shortId} diff --git a/src/shared_js/class/Event.ts b/src/shared_js/class/Event.ts index 381e30a3..29ed9933 100644 --- a/src/shared_js/class/Event.ts +++ b/src/shared_js/class/Event.ts @@ -2,14 +2,14 @@ import * as en from "../enums.js" /* From Server */ -class ServerEvent { +export class ServerEvent { type: en.EventTypes; constructor(type: en.EventTypes = 0) { this.type = type; } } -class EventAssignId extends ServerEvent { +export class EventAssignId extends ServerEvent { id: string; constructor(id: string) { super(en.EventTypes.assignId); @@ -17,7 +17,7 @@ class EventAssignId extends ServerEvent { } } -class EventMatchmakingComplete extends ServerEvent { +export class EventMatchmakingComplete extends ServerEvent { side: en.PlayerSide; constructor(side: en.PlayerSide) { super(en.EventTypes.matchmakingComplete); @@ -25,7 +25,7 @@ class EventMatchmakingComplete extends ServerEvent { } } -class EventGameUpdate extends ServerEvent { +export class EventGameUpdate extends ServerEvent { playerLeft = { y: 0 }; @@ -51,7 +51,7 @@ class EventGameUpdate extends ServerEvent { } } -class EventScoreUpdate extends ServerEvent { +export class EventScoreUpdate extends ServerEvent { scoreLeft: number; scoreRight: number; constructor(scoreLeft: number, scoreRight: number) { @@ -61,7 +61,7 @@ class EventScoreUpdate extends ServerEvent { } } -class EventMatchEnd extends ServerEvent { +export class EventMatchEnd extends ServerEvent { winner: en.PlayerSide; forfeit: boolean; constructor(winner: en.PlayerSide, forfeit = false) { @@ -73,14 +73,14 @@ class EventMatchEnd extends ServerEvent { /* From Client */ -class ClientEvent { +export class ClientEvent { type: en.EventTypes; // readonly ? constructor(type: en.EventTypes = 0) { this.type = type; } } -class ClientAnnounce extends ClientEvent { +export class ClientAnnounce extends ClientEvent { role: en.ClientRole; clientId: string; matchOptions: en.MatchOptions; @@ -92,7 +92,7 @@ class ClientAnnounce extends ClientEvent { } } -class EventInput extends ClientEvent { +export class EventInput extends ClientEvent { input: en.InputEnum; id: number; constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) { @@ -101,9 +101,3 @@ class EventInput extends ClientEvent { this.id = id; } } - -export { - ServerEvent, EventAssignId, EventMatchmakingComplete, - EventGameUpdate, EventScoreUpdate, EventMatchEnd, - ClientEvent, ClientAnnounce, EventInput -} diff --git a/src/shared_js/class/GameComponents.ts b/src/shared_js/class/GameComponents.ts index 10e60932..ec36f15f 100644 --- a/src/shared_js/class/GameComponents.ts +++ b/src/shared_js/class/GameComponents.ts @@ -5,7 +5,7 @@ import { VectorInteger } from "./Vector.js"; import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js"; import { random } from "../utils.js"; -class GameComponents { +export class GameComponents { wallTop: Rectangle | MovingRectangle; wallBottom: Rectangle | MovingRectangle; playerLeft: Racket; @@ -61,5 +61,3 @@ class GameComponents { } } } - -export {GameComponents} diff --git a/src/shared_js/class/Rectangle.ts b/src/shared_js/class/Rectangle.ts index fff71dc9..bbbb30e5 100644 --- a/src/shared_js/class/Rectangle.ts +++ b/src/shared_js/class/Rectangle.ts @@ -3,7 +3,7 @@ import { Vector, VectorInteger } from "./Vector.js"; import { Component, Moving } from "./interface.js"; import * as c from "../constants.js" -class Rectangle implements Component { +export class Rectangle implements Component { pos: VectorInteger; width: number; height: number; @@ -33,7 +33,7 @@ class Rectangle implements Component { } } -class MovingRectangle extends Rectangle implements Moving { +export class MovingRectangle extends Rectangle implements Moving { dir: Vector = new Vector(0,0); speed: number; readonly baseSpeed: number; @@ -61,7 +61,7 @@ class MovingRectangle extends Rectangle implements Moving { } } -class Racket extends MovingRectangle { +export class Racket extends MovingRectangle { constructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) { super(pos, width, height, baseSpeed); } @@ -72,13 +72,22 @@ class Racket extends MovingRectangle { } } -class Ball extends MovingRectangle { +export class Ball extends MovingRectangle { readonly speedIncrease: number; ballInPlay: boolean = false; constructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) { super(pos, size, size, baseSpeed); this.speedIncrease = speedIncrease; } + moveAndBounce(delta: number, colliderArr: Rectangle[]) { + this.move(delta); + let i = colliderArr.findIndex(this.collision, this); + if (i != -1) + { + this.bounce(colliderArr[i]); + this.move(delta); + } + } bounce(collider?: Rectangle) { this._bounceAlgo(collider); } @@ -92,15 +101,6 @@ class Ball extends MovingRectangle { this._bounceWall(); } } - moveAndBounce(delta: number, colliderArr: Rectangle[]) { - this.move(delta); - let i = colliderArr.findIndex(this.collision, this); - if (i != -1) - { - this.bounce(colliderArr[i]); - this.move(delta); - } - } protected _bounceWall() { // Should be enough for Wall this.dir.y = this.dir.y * -1; } @@ -140,5 +140,3 @@ class Ball extends MovingRectangle { // console.log(`x: ${this.dir.x}, y: ${this.dir.y}`); } } - -export {Rectangle, MovingRectangle, Racket, Ball} diff --git a/src/shared_js/class/Vector.ts b/src/shared_js/class/Vector.ts index 025bca36..fbe121e5 100644 --- a/src/shared_js/class/Vector.ts +++ b/src/shared_js/class/Vector.ts @@ -1,5 +1,5 @@ -class Vector { +export class Vector { x: number; y: number; constructor(x: number = 0, y: number = 0) { @@ -16,13 +16,13 @@ class Vector { } } -class VectorInteger extends Vector { +export class VectorInteger extends Vector { // PLACEHOLDER // VectorInteger with set/get dont work (No draw on the screen). Why ? } /* -class VectorInteger { +export class VectorInteger { // private _x: number = 0; // private _y: number = 0; // constructor(x: number = 0, y: number = 0) { @@ -45,5 +45,3 @@ class VectorInteger { // } } */ - -export {Vector, VectorInteger} diff --git a/src/shared_js/class/interface.ts b/src/shared_js/class/interface.ts index 39753de1..544d54a8 100644 --- a/src/shared_js/class/interface.ts +++ b/src/shared_js/class/interface.ts @@ -1,21 +1,19 @@ import { Vector, VectorInteger } from "./Vector.js"; -interface Component { +export interface Component { pos: VectorInteger; } -interface GraphicComponent extends Component { +export interface GraphicComponent extends Component { ctx: CanvasRenderingContext2D; color: string; update: () => void; clear: (pos?: VectorInteger) => void; } -interface Moving { +export interface Moving { dir: Vector; speed: number; // pixel per second move(delta: number): void; } - -export {Component, GraphicComponent, Moving} diff --git a/src/shared_js/enums.ts b/src/shared_js/enums.ts index 33368ff8..108f3a66 100644 --- a/src/shared_js/enums.ts +++ b/src/shared_js/enums.ts @@ -1,5 +1,5 @@ -enum EventTypes { +export enum EventTypes { // Class Implemented gameUpdate = 1, scoreUpdate, @@ -22,27 +22,25 @@ enum EventTypes { } -enum InputEnum { +export enum InputEnum { noInput = 0, up = 1, down, } -enum PlayerSide { +export enum PlayerSide { left = 1, right } -enum ClientRole { +export enum ClientRole { player = 1, spectator } -enum MatchOptions { +export enum MatchOptions { // binary flags, can be mixed noOption = 0b0, multiBalls = 1 << 0, movingWalls = 1 << 1 } - -export {EventTypes, InputEnum, PlayerSide, ClientRole, MatchOptions} diff --git a/src/shared_js/utils.ts b/src/shared_js/utils.ts index e8f7bca3..6cba06d2 100644 --- a/src/shared_js/utils.ts +++ b/src/shared_js/utils.ts @@ -1,15 +1,15 @@ import { MovingRectangle } from "./class/Rectangle.js"; -function random(min: number = 0, max: number = 1) { +export function random(min: number = 0, max: number = 1) { return Math.random() * (max - min) + min; } -function sleep (ms: number) { +export function sleep (ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } -function clamp(n: number, min: number, max: number) : number +export function clamp(n: number, min: number, max: number) : number { if (n < min) n = min; @@ -19,9 +19,7 @@ function clamp(n: number, min: number, max: number) : number } // Typescript hack, unused -function assertMovingRectangle(value: unknown): asserts value is MovingRectangle { +export function assertMovingRectangle(value: unknown): asserts value is MovingRectangle { // if (value !== MovingRectangle) throw new Error("Not a MovingRectangle"); return; } - -export {random, sleep, clamp, assertMovingRectangle} diff --git a/src/shared_js/wallsMovement.ts b/src/shared_js/wallsMovement.ts index dbf3f558..0f6dbe58 100644 --- a/src/shared_js/wallsMovement.ts +++ b/src/shared_js/wallsMovement.ts @@ -3,7 +3,7 @@ import * as c from "./constants.js"; import { MovingRectangle } from "../shared_js/class/Rectangle.js"; import { GameComponents } from "./class/GameComponents.js"; -function wallsMovements(delta: number, gc: GameComponents) +export function wallsMovements(delta: number, gc: GameComponents) { const wallTop = gc.wallTop; const wallBottom = gc.wallBottom; @@ -16,5 +16,3 @@ function wallsMovements(delta: number, gc: GameComponents) wallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); wallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]); } - -export {wallsMovements}