minor refactoring
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
import * as c from ".././constants.js"
|
import * as c from ".././constants.js"
|
||||||
|
|
||||||
class GameArea {
|
export class GameArea {
|
||||||
keys: string[] = [];
|
keys: string[] = [];
|
||||||
handleInputInterval: number = 0;
|
handleInputInterval: number = 0;
|
||||||
gameLoopInterval: number = 0;
|
gameLoopInterval: number = 0;
|
||||||
@@ -34,5 +34,3 @@ class GameArea {
|
|||||||
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {GameArea}
|
|
||||||
|
|||||||
@@ -62,8 +62,7 @@ class GameComponentsExtensionForClient extends GameComponents {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class GameComponentsClient extends GameComponentsExtensionForClient {
|
||||||
class GameComponentsClient extends GameComponentsExtensionForClient {
|
|
||||||
midLine: Line;
|
midLine: Line;
|
||||||
scoreLeft: TextNumericValue;
|
scoreLeft: TextNumericValue;
|
||||||
scoreRight: TextNumericValue;
|
scoreRight: TextNumericValue;
|
||||||
@@ -114,5 +113,3 @@ class GameComponentsClient extends GameComponentsExtensionForClient {
|
|||||||
this.h_grid_d1 = new RectangleClient(pos, c.gridSize, c.h, ctx, "darkgreen");
|
this.h_grid_d1 = new RectangleClient(pos, c.gridSize, c.h, ctx, "darkgreen");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {GameComponentsClient}
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import * as en from "../../shared_js/enums.js"
|
import * as en from "../../shared_js/enums.js"
|
||||||
import * as ev from "../../shared_js/class/Event.js"
|
import * as ev from "../../shared_js/class/Event.js"
|
||||||
|
|
||||||
class InputHistory {
|
export class InputHistory {
|
||||||
input: en.InputEnum;
|
input: en.InputEnum;
|
||||||
id: number;
|
id: number;
|
||||||
deltaTime: number;
|
deltaTime: number;
|
||||||
@@ -12,5 +12,3 @@ class InputHistory {
|
|||||||
this.deltaTime = deltaTime;
|
this.deltaTime = deltaTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {InputHistory}
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ function clearRectangle(this: RectangleClient, pos?: VectorInteger) {
|
|||||||
this.ctx.clearRect(this.pos.x, this.pos.y, this.width, this.height);
|
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;
|
ctx: CanvasRenderingContext2D;
|
||||||
color: string;
|
color: string;
|
||||||
update: () => void;
|
update: () => void;
|
||||||
@@ -31,19 +31,9 @@ class RectangleClient extends Rectangle implements GraphicComponent {
|
|||||||
this.update = updateRectangle;
|
this.update = updateRectangle;
|
||||||
this.clear = clearRectangle;
|
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;
|
ctx: CanvasRenderingContext2D;
|
||||||
color: string;
|
color: string;
|
||||||
update: () => void;
|
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;
|
ctx: CanvasRenderingContext2D;
|
||||||
color: string;
|
color: string;
|
||||||
update: () => void;
|
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;
|
ctx: CanvasRenderingContext2D;
|
||||||
color: string;
|
color: string;
|
||||||
update: () => void;
|
update: () => void;
|
||||||
@@ -93,10 +83,6 @@ class BallClient extends Ball implements GraphicComponent {
|
|||||||
this._bounceAlgo(collider);
|
this._bounceAlgo(collider);
|
||||||
soundPongArr[ Math.floor(random(0, soundPongArr.length)) ].play();
|
soundPongArr[ Math.floor(random(0, soundPongArr.length)) ].play();
|
||||||
}
|
}
|
||||||
/* protected _bounceRacket(collider: Racket) {
|
|
||||||
this._bounceRacketAlgo(collider);
|
|
||||||
soundRoblox.play();
|
|
||||||
} */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateLine(this: Line) {
|
function updateLine(this: Line) {
|
||||||
@@ -105,17 +91,20 @@ function updateLine(this: Line) {
|
|||||||
let i = 0;
|
let i = 0;
|
||||||
while (i < this.segmentCount)
|
while (i < this.segmentCount)
|
||||||
{
|
{
|
||||||
// for Horizontal Line
|
/* Horizontal Line */
|
||||||
// pos.y = this.pos.y;
|
// pos.y = this.pos.y;
|
||||||
// pos.x = this.pos.x + this.segmentWidth * i;
|
// pos.x = this.pos.x + this.segmentWidth * i;
|
||||||
|
|
||||||
|
/* Vertical Line */
|
||||||
pos.x = this.pos.x;
|
pos.x = this.pos.x;
|
||||||
pos.y = this.pos.y + this.segmentHeight * i;
|
pos.y = this.pos.y + this.segmentHeight * i;
|
||||||
|
|
||||||
this.ctx.fillRect(pos.x, pos.y, this.segmentWidth, this.segmentHeight);
|
this.ctx.fillRect(pos.x, pos.y, this.segmentWidth, this.segmentHeight);
|
||||||
i += 2;
|
i += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Line extends RectangleClient {
|
export class Line extends RectangleClient {
|
||||||
gapeCount: number = 0;
|
gapeCount: number = 0;
|
||||||
segmentCount: number;
|
segmentCount: number;
|
||||||
segmentWidth: number;
|
segmentWidth: number;
|
||||||
@@ -129,13 +118,12 @@ class Line extends RectangleClient {
|
|||||||
this.gapeCount = gapeCount;
|
this.gapeCount = gapeCount;
|
||||||
this.segmentCount = this.gapeCount * 2 + 1;
|
this.segmentCount = this.gapeCount * 2 + 1;
|
||||||
|
|
||||||
|
/* Vertical Line */
|
||||||
this.segmentWidth = this.width;
|
this.segmentWidth = this.width;
|
||||||
this.segmentHeight = this.height / this.segmentCount;
|
this.segmentHeight = this.height / this.segmentCount;
|
||||||
|
|
||||||
// for Horizontal Line
|
/* Horizontal Line */
|
||||||
// this.segmentWidth = this.width / this.segmentCount;
|
// this.segmentWidth = this.width / this.segmentCount;
|
||||||
// this.segmentHeight = this.height;
|
// this.segmentHeight = this.height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {RectangleClient, MovingRectangleClient, RacketClient, BallClient, Line}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Vector, VectorInteger } from "../../shared_js/class/Vector.js";
|
|||||||
import { Component } from "../../shared_js/class/interface.js";
|
import { Component } from "../../shared_js/class/interface.js";
|
||||||
|
|
||||||
// conflict with Text
|
// conflict with Text
|
||||||
class TextElem implements Component {
|
export class TextElem implements Component {
|
||||||
ctx: CanvasRenderingContext2D;
|
ctx: CanvasRenderingContext2D;
|
||||||
pos: VectorInteger;
|
pos: VectorInteger;
|
||||||
color: string;
|
color: string;
|
||||||
@@ -39,7 +39,7 @@ class TextElem implements Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TextNumericValue extends TextElem {
|
export class TextNumericValue extends TextElem {
|
||||||
private _value: number = 0;
|
private _value: number = 0;
|
||||||
constructor(pos: VectorInteger, size: number,
|
constructor(pos: VectorInteger, size: number,
|
||||||
ctx: CanvasRenderingContext2D, color: string, font?: string)
|
ctx: CanvasRenderingContext2D, color: string, font?: string)
|
||||||
@@ -54,5 +54,3 @@ class TextNumericValue extends TextElem {
|
|||||||
this.text = v.toString();
|
this.text = v.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {TextElem, TextNumericValue}
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
|
|
||||||
import { pong, gc } from "./global.js"
|
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";
|
import { gridDisplay } from "./handleInput.js";
|
||||||
|
|
||||||
function drawLoop()
|
export function drawLoop()
|
||||||
{
|
{
|
||||||
pong.clear();
|
pong.clear();
|
||||||
|
|
||||||
@@ -49,5 +47,3 @@ function drawGrid()
|
|||||||
gc.h_grid_u1.update();
|
gc.h_grid_u1.update();
|
||||||
gc.h_grid_d1.update();
|
gc.h_grid_d1.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
export {drawLoop}
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ let actual_time: number = Date.now();
|
|||||||
let last_time: number;
|
let last_time: number;
|
||||||
let delta_time: number;
|
let delta_time: number;
|
||||||
|
|
||||||
function gameLoop()
|
export function gameLoop()
|
||||||
{
|
{
|
||||||
/* last_time = actual_time;
|
/* last_time = actual_time;
|
||||||
actual_time = Date.now();
|
actual_time = Date.now();
|
||||||
@@ -45,5 +45,3 @@ function opponentInterpolation(delta: number)
|
|||||||
clientInfo.opponent.pos.y = clientInfo.opponentNextPos.y;
|
clientInfo.opponent.pos.y = clientInfo.opponentNextPos.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {gameLoop}
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const inputHistoryArr: InputHistory[] = [];
|
|||||||
socket.send(JSON.stringify(inputState));
|
socket.send(JSON.stringify(inputState));
|
||||||
} */
|
} */
|
||||||
|
|
||||||
function handleInput()
|
export function handleInput()
|
||||||
{
|
{
|
||||||
/* last_time = actual_time;
|
/* last_time = actual_time;
|
||||||
actual_time = Date.now();
|
actual_time = Date.now();
|
||||||
@@ -86,7 +86,7 @@ function playerMovePrediction(delta: number, input: en.InputEnum)
|
|||||||
racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]);
|
racket.moveAndCollide(delta, [gc.wallTop, gc.wallBottom]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function repeatInput(lastInputId: number)
|
export function repeatInput(lastInputId: number)
|
||||||
{
|
{
|
||||||
// server reconciliation
|
// server reconciliation
|
||||||
let i = inputHistoryArr.findIndex((value: InputHistory) => {
|
let i = inputHistoryArr.findIndex((value: InputHistory) => {
|
||||||
@@ -106,5 +106,3 @@ function repeatInput(lastInputId: number)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export {handleInput, repeatInput}
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
export * from "../shared_js/utils.js"
|
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);
|
console.log("countdown ", count);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
@@ -14,5 +14,3 @@ function countdown(count: number, callback?: (count: number) => void, endCallbac
|
|||||||
endCallback();
|
endCallback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {countdown}
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import { GameSession } from "./GameSession.js";
|
|||||||
import * as ev from "../../shared_js/class/Event.js"
|
import * as ev from "../../shared_js/class/Event.js"
|
||||||
import * as en from "../../shared_js/enums.js"
|
import * as en from "../../shared_js/enums.js"
|
||||||
|
|
||||||
class Client {
|
export class Client {
|
||||||
socket: WebSocket;
|
socket: WebSocket;
|
||||||
id: string; // Pas indispensable si "socket" a une copie de "id"
|
id: string; // same as "socket.id"
|
||||||
isAlive: boolean = true;
|
isAlive: boolean = true;
|
||||||
gameSession: GameSession = null;
|
gameSession: GameSession = null;
|
||||||
matchOptions: en.MatchOptions = 0;
|
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();
|
inputBuffer: ev.EventInput = new ev.EventInput();
|
||||||
lastInputId: number = 0;
|
lastInputId: number = 0;
|
||||||
racket: Racket;
|
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) {
|
constructor(socket: WebSocket, id: string) {
|
||||||
super(socket, id);
|
super(socket, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {Client, ClientPlayer, ClientSpectator}
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
import * as c from "../constants.js"
|
|
||||||
import * as en from "../../shared_js/enums.js"
|
import * as en from "../../shared_js/enums.js"
|
||||||
import { GameComponents } from "../../shared_js/class/GameComponents.js";
|
import { GameComponents } from "../../shared_js/class/GameComponents.js";
|
||||||
|
|
||||||
class GameComponentsServer extends GameComponents {
|
export class GameComponentsServer extends GameComponents {
|
||||||
scoreLeft: number = 0;
|
scoreLeft: number = 0;
|
||||||
scoreRight: number = 0;
|
scoreRight: number = 0;
|
||||||
constructor(options: en.MatchOptions)
|
constructor(options: en.MatchOptions)
|
||||||
@@ -11,5 +10,3 @@ class GameComponentsServer extends GameComponents {
|
|||||||
super(options);
|
super(options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {GameComponentsServer}
|
|
||||||
|
|||||||
@@ -10,10 +10,11 @@ import { Ball } from "../../shared_js/class/Rectangle.js";
|
|||||||
import { wallsMovements } from "../../shared_js/wallsMovement.js";
|
import { wallsMovements } from "../../shared_js/wallsMovement.js";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Arg "s: GameSession" replace "this: GameSession" for use with setTimeout(),
|
multiples methods of GameSession have parameter "s: GameSession".
|
||||||
because "this" is equal to "this: Timeout"
|
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 ?
|
id: string; // url ?
|
||||||
playersMap: Map<string, ClientPlayer> = new Map();
|
playersMap: Map<string, ClientPlayer> = new Map();
|
||||||
unreadyPlayersMap: Map<string, ClientPlayer> = new Map();
|
unreadyPlayersMap: Map<string, ClientPlayer> = new Map();
|
||||||
@@ -210,5 +211,3 @@ class GameSession {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {GameSession}
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
export * from "../shared_js/utils.js"
|
export * from "../shared_js/utils.js"
|
||||||
|
|
||||||
function shortId(id: string): string {
|
export function shortId(id: string): string {
|
||||||
return id.substring(0, id.indexOf("-"));
|
return id.substring(0, id.indexOf("-"));
|
||||||
}
|
}
|
||||||
|
|
||||||
export {shortId}
|
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
import * as en from "../enums.js"
|
import * as en from "../enums.js"
|
||||||
|
|
||||||
/* From Server */
|
/* From Server */
|
||||||
class ServerEvent {
|
export class ServerEvent {
|
||||||
type: en.EventTypes;
|
type: en.EventTypes;
|
||||||
constructor(type: en.EventTypes = 0) {
|
constructor(type: en.EventTypes = 0) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventAssignId extends ServerEvent {
|
export class EventAssignId extends ServerEvent {
|
||||||
id: string;
|
id: string;
|
||||||
constructor(id: string) {
|
constructor(id: string) {
|
||||||
super(en.EventTypes.assignId);
|
super(en.EventTypes.assignId);
|
||||||
@@ -17,7 +17,7 @@ class EventAssignId extends ServerEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventMatchmakingComplete extends ServerEvent {
|
export class EventMatchmakingComplete extends ServerEvent {
|
||||||
side: en.PlayerSide;
|
side: en.PlayerSide;
|
||||||
constructor(side: en.PlayerSide) {
|
constructor(side: en.PlayerSide) {
|
||||||
super(en.EventTypes.matchmakingComplete);
|
super(en.EventTypes.matchmakingComplete);
|
||||||
@@ -25,7 +25,7 @@ class EventMatchmakingComplete extends ServerEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventGameUpdate extends ServerEvent {
|
export class EventGameUpdate extends ServerEvent {
|
||||||
playerLeft = {
|
playerLeft = {
|
||||||
y: 0
|
y: 0
|
||||||
};
|
};
|
||||||
@@ -51,7 +51,7 @@ class EventGameUpdate extends ServerEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventScoreUpdate extends ServerEvent {
|
export class EventScoreUpdate extends ServerEvent {
|
||||||
scoreLeft: number;
|
scoreLeft: number;
|
||||||
scoreRight: number;
|
scoreRight: number;
|
||||||
constructor(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;
|
winner: en.PlayerSide;
|
||||||
forfeit: boolean;
|
forfeit: boolean;
|
||||||
constructor(winner: en.PlayerSide, forfeit = false) {
|
constructor(winner: en.PlayerSide, forfeit = false) {
|
||||||
@@ -73,14 +73,14 @@ class EventMatchEnd extends ServerEvent {
|
|||||||
|
|
||||||
|
|
||||||
/* From Client */
|
/* From Client */
|
||||||
class ClientEvent {
|
export class ClientEvent {
|
||||||
type: en.EventTypes; // readonly ?
|
type: en.EventTypes; // readonly ?
|
||||||
constructor(type: en.EventTypes = 0) {
|
constructor(type: en.EventTypes = 0) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClientAnnounce extends ClientEvent {
|
export class ClientAnnounce extends ClientEvent {
|
||||||
role: en.ClientRole;
|
role: en.ClientRole;
|
||||||
clientId: string;
|
clientId: string;
|
||||||
matchOptions: en.MatchOptions;
|
matchOptions: en.MatchOptions;
|
||||||
@@ -92,7 +92,7 @@ class ClientAnnounce extends ClientEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class EventInput extends ClientEvent {
|
export class EventInput extends ClientEvent {
|
||||||
input: en.InputEnum;
|
input: en.InputEnum;
|
||||||
id: number;
|
id: number;
|
||||||
constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) {
|
constructor(input: en.InputEnum = en.InputEnum.noInput, id: number = 0) {
|
||||||
@@ -101,9 +101,3 @@ class EventInput extends ClientEvent {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
|
||||||
ServerEvent, EventAssignId, EventMatchmakingComplete,
|
|
||||||
EventGameUpdate, EventScoreUpdate, EventMatchEnd,
|
|
||||||
ClientEvent, ClientAnnounce, EventInput
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { VectorInteger } from "./Vector.js";
|
|||||||
import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js";
|
import { Rectangle, MovingRectangle, Racket, Ball } from "./Rectangle.js";
|
||||||
import { random } from "../utils.js";
|
import { random } from "../utils.js";
|
||||||
|
|
||||||
class GameComponents {
|
export class GameComponents {
|
||||||
wallTop: Rectangle | MovingRectangle;
|
wallTop: Rectangle | MovingRectangle;
|
||||||
wallBottom: Rectangle | MovingRectangle;
|
wallBottom: Rectangle | MovingRectangle;
|
||||||
playerLeft: Racket;
|
playerLeft: Racket;
|
||||||
@@ -61,5 +61,3 @@ class GameComponents {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {GameComponents}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { Vector, VectorInteger } from "./Vector.js";
|
|||||||
import { Component, Moving } from "./interface.js";
|
import { Component, Moving } from "./interface.js";
|
||||||
import * as c from "../constants.js"
|
import * as c from "../constants.js"
|
||||||
|
|
||||||
class Rectangle implements Component {
|
export class Rectangle implements Component {
|
||||||
pos: VectorInteger;
|
pos: VectorInteger;
|
||||||
width: number;
|
width: number;
|
||||||
height: 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);
|
dir: Vector = new Vector(0,0);
|
||||||
speed: number;
|
speed: number;
|
||||||
readonly baseSpeed: 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) {
|
constructor(pos: VectorInteger, width: number, height: number, baseSpeed: number) {
|
||||||
super(pos, width, height, baseSpeed);
|
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;
|
readonly speedIncrease: number;
|
||||||
ballInPlay: boolean = false;
|
ballInPlay: boolean = false;
|
||||||
constructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) {
|
constructor(pos: VectorInteger, size: number, baseSpeed: number, speedIncrease: number) {
|
||||||
super(pos, size, size, baseSpeed);
|
super(pos, size, size, baseSpeed);
|
||||||
this.speedIncrease = speedIncrease;
|
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) {
|
bounce(collider?: Rectangle) {
|
||||||
this._bounceAlgo(collider);
|
this._bounceAlgo(collider);
|
||||||
}
|
}
|
||||||
@@ -92,15 +101,6 @@ class Ball extends MovingRectangle {
|
|||||||
this._bounceWall();
|
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
|
protected _bounceWall() { // Should be enough for Wall
|
||||||
this.dir.y = this.dir.y * -1;
|
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}`);
|
// console.log(`x: ${this.dir.x}, y: ${this.dir.y}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {Rectangle, MovingRectangle, Racket, Ball}
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
class Vector {
|
export class Vector {
|
||||||
x: number;
|
x: number;
|
||||||
y: number;
|
y: number;
|
||||||
constructor(x: number = 0, y: number = 0) {
|
constructor(x: number = 0, y: number = 0) {
|
||||||
@@ -16,13 +16,13 @@ class Vector {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class VectorInteger extends Vector {
|
export class VectorInteger extends Vector {
|
||||||
// PLACEHOLDER
|
// PLACEHOLDER
|
||||||
// VectorInteger with set/get dont work (No draw on the screen). Why ?
|
// VectorInteger with set/get dont work (No draw on the screen). Why ?
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
class VectorInteger {
|
export class VectorInteger {
|
||||||
// private _x: number = 0;
|
// private _x: number = 0;
|
||||||
// private _y: number = 0;
|
// private _y: number = 0;
|
||||||
// constructor(x: number = 0, y: number = 0) {
|
// constructor(x: number = 0, y: number = 0) {
|
||||||
@@ -45,5 +45,3 @@ class VectorInteger {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export {Vector, VectorInteger}
|
|
||||||
|
|||||||
@@ -1,21 +1,19 @@
|
|||||||
|
|
||||||
import { Vector, VectorInteger } from "./Vector.js";
|
import { Vector, VectorInteger } from "./Vector.js";
|
||||||
|
|
||||||
interface Component {
|
export interface Component {
|
||||||
pos: VectorInteger;
|
pos: VectorInteger;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GraphicComponent extends Component {
|
export interface GraphicComponent extends Component {
|
||||||
ctx: CanvasRenderingContext2D;
|
ctx: CanvasRenderingContext2D;
|
||||||
color: string;
|
color: string;
|
||||||
update: () => void;
|
update: () => void;
|
||||||
clear: (pos?: VectorInteger) => void;
|
clear: (pos?: VectorInteger) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Moving {
|
export interface Moving {
|
||||||
dir: Vector;
|
dir: Vector;
|
||||||
speed: number; // pixel per second
|
speed: number; // pixel per second
|
||||||
move(delta: number): void;
|
move(delta: number): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export {Component, GraphicComponent, Moving}
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
enum EventTypes {
|
export enum EventTypes {
|
||||||
// Class Implemented
|
// Class Implemented
|
||||||
gameUpdate = 1,
|
gameUpdate = 1,
|
||||||
scoreUpdate,
|
scoreUpdate,
|
||||||
@@ -22,27 +22,25 @@ enum EventTypes {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum InputEnum {
|
export enum InputEnum {
|
||||||
noInput = 0,
|
noInput = 0,
|
||||||
up = 1,
|
up = 1,
|
||||||
down,
|
down,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum PlayerSide {
|
export enum PlayerSide {
|
||||||
left = 1,
|
left = 1,
|
||||||
right
|
right
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ClientRole {
|
export enum ClientRole {
|
||||||
player = 1,
|
player = 1,
|
||||||
spectator
|
spectator
|
||||||
}
|
}
|
||||||
|
|
||||||
enum MatchOptions {
|
export enum MatchOptions {
|
||||||
// binary flags, can be mixed
|
// binary flags, can be mixed
|
||||||
noOption = 0b0,
|
noOption = 0b0,
|
||||||
multiBalls = 1 << 0,
|
multiBalls = 1 << 0,
|
||||||
movingWalls = 1 << 1
|
movingWalls = 1 << 1
|
||||||
}
|
}
|
||||||
|
|
||||||
export {EventTypes, InputEnum, PlayerSide, ClientRole, MatchOptions}
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
|
|
||||||
import { MovingRectangle } from "./class/Rectangle.js";
|
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;
|
return Math.random() * (max - min) + min;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sleep (ms: number) {
|
export function sleep (ms: number) {
|
||||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
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)
|
if (n < min)
|
||||||
n = min;
|
n = min;
|
||||||
@@ -19,9 +19,7 @@ function clamp(n: number, min: number, max: number) : number
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Typescript hack, unused
|
// 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");
|
// if (value !== MovingRectangle) throw new Error("Not a MovingRectangle");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
export {random, sleep, clamp, assertMovingRectangle}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import * as c from "./constants.js";
|
|||||||
import { MovingRectangle } from "../shared_js/class/Rectangle.js";
|
import { MovingRectangle } from "../shared_js/class/Rectangle.js";
|
||||||
import { GameComponents } from "./class/GameComponents.js";
|
import { GameComponents } from "./class/GameComponents.js";
|
||||||
|
|
||||||
function wallsMovements(delta: number, gc: GameComponents)
|
export function wallsMovements(delta: number, gc: GameComponents)
|
||||||
{
|
{
|
||||||
const wallTop = <MovingRectangle>gc.wallTop;
|
const wallTop = <MovingRectangle>gc.wallTop;
|
||||||
const wallBottom = <MovingRectangle>gc.wallBottom;
|
const wallBottom = <MovingRectangle>gc.wallBottom;
|
||||||
@@ -16,5 +16,3 @@ function wallsMovements(delta: number, gc: GameComponents)
|
|||||||
wallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);
|
wallTop.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);
|
||||||
wallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);
|
wallBottom.moveAndCollide(delta, [gc.playerLeft, gc.playerRight]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export {wallsMovements}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user