From 8ed5d84762e678599f2cce5a90f62b1cca7367be Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Sun, 27 Nov 2022 16:38:51 +0200 Subject: [PATCH] tweaks, redis url --- src/client/game.ts | 27 ++++++++++++++------------- src/client/object/canvas-utils.ts | 8 ++++---- src/client/object/chat.ts | 4 ++-- src/client/object/joystick.ts | 2 +- src/client/object/player-entity.ts | 12 ++++++------ src/common/types/socket.ts | 2 +- src/server/index.ts | 4 +++- 7 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/client/game.ts b/src/client/game.ts index 26c7bc8..91c0c8e 100644 --- a/src/client/game.ts +++ b/src/client/game.ts @@ -208,7 +208,7 @@ export class Game { this.chat.addMessage( `Welcome to Icy3D World Experiment, ${user.display_name}!`, - null, + undefined, { color: '#fbff4e', }, @@ -243,7 +243,7 @@ export class Game { const newplayer = PlayerEntity.fromUser(user, this.renderer.scene); newplayer.setHeightSource(this.world); - this.chat.addMessage(`${user.display_name} has joined the game.`, null, { + this.chat.addMessage(`${user.display_name} has joined the game.`, undefined, { color: '#fbff4e', }); this.players.push(newplayer); @@ -252,7 +252,7 @@ export class Game { this.socket.on('player.leave', (user) => { const findPlayer = this.players.find((item) => item.user.id === user.id); if (findPlayer) { - this.chat.addMessage(`${user.display_name} has left the game.`, null, { + this.chat.addMessage(`${user.display_name} has left the game.`, undefined, { color: '#fbff4e', }); @@ -262,21 +262,21 @@ export class Game { } }); - this.socket.on('player.list', (list: CompositePacket[]) => { - list.forEach((player) => { + this.socket.on('player.list', (list: Partial[]) => { + list?.forEach((player) => { if (player.id === this.me.id) { return; } - const newplayer = PlayerEntity.fromUser(player, this.renderer.scene); + const newplayer = PlayerEntity.fromUser(player as CompositePacket, this.renderer.scene); newplayer.setHeightSource(this.world); newplayer.addUncommittedChanges(player); this.players.push(newplayer); }); this.chat.addMessage( - `List of players: ${list.map((user) => user.display_name).join(', ')}`, - null, + `List of players: ${(list || []).map((user) => user.display_name).join(', ')}`, + undefined, { color: '#fbff4e', }, @@ -284,7 +284,8 @@ export class Game { }); this.socket.on('player.update', (data) => { - data.forEach((item: PositionUpdatePacket) => { + data.forEach((item?: PositionUpdatePacket) => { + if (!item) return; const player = this.players.find( (player) => player.user.id === item.id, ); @@ -327,7 +328,7 @@ export class Game { this.socket.on('disconnect', () => { this.chat.addMessage( `Disconnected from the server, reconnecting..`, - null, + undefined, { color: '#ff0000', }, @@ -402,9 +403,9 @@ export class Game { } if ( - !( - sender.display_name === this.me.display_name || - this.party.includes(sender.display_name) + !(sender.display_name && + (sender.display_name === this.me.display_name || + this.party.includes(sender.display_name)) ) ) { return; diff --git a/src/client/object/canvas-utils.ts b/src/client/object/canvas-utils.ts index ccacaeb..5fdcec5 100644 --- a/src/client/object/canvas-utils.ts +++ b/src/client/object/canvas-utils.ts @@ -90,11 +90,11 @@ export class CanvasUtils { fontSize = 16, padding = 4, ): { texture: CanvasTexture; width: number; height: number } { - const ctx = document.createElement('canvas').getContext('2d'); + const ctx = document.createElement('canvas').getContext('2d')!; const font = `${fontSize}px${bold ? ' bold' : ''} sans`; const lines = Array.isArray(text) ? text : [text]; - const lineWidths = []; + const lineWidths: number[] = []; let longestLine = 0; // Measure the text bounds @@ -176,7 +176,7 @@ export class CanvasUtils { public readPixelDataRGB(image: HTMLImageElement): number[] { const array = new Array(image.width * image.height); - const ctx = document.createElement('canvas').getContext('2d'); + const ctx = document.createElement('canvas').getContext('2d')!; ctx.canvas.width = image.width; ctx.canvas.height = image.height; ctx.drawImage(image, 0, 0, image.width, image.height); @@ -202,7 +202,7 @@ export class CanvasUtils { scale: number, ): number[] { const array = new Array(image.width * image.height); - const ctx = document.createElement('canvas').getContext('2d'); + const ctx = document.createElement('canvas').getContext('2d')!; ctx.canvas.width = image.width; ctx.canvas.height = image.height; ctx.drawImage(image, 0, 0, image.width, image.height); diff --git a/src/client/object/chat.ts b/src/client/object/chat.ts index 18b5dad..f83953e 100644 --- a/src/client/object/chat.ts +++ b/src/client/object/chat.ts @@ -61,7 +61,7 @@ export class Chat { this._sendFn(this._input.value); } - this._input.value = null; + this._input.value = ''; if (this._rehide) { this.hide(); @@ -69,7 +69,7 @@ export class Chat { } } else if (e.key === 'Escape') { this._input.blur(); - this._input.value = null; + this._input.value = ''; if (this._rehide) { this.hide(); diff --git a/src/client/object/joystick.ts b/src/client/object/joystick.ts index 7006f80..051ddb7 100644 --- a/src/client/object/joystick.ts +++ b/src/client/object/joystick.ts @@ -88,7 +88,7 @@ export class Joystick { } dispose() { - this.element.parentElement.removeChild(this.element); + this.element.parentElement?.removeChild(this.element); } show() { diff --git a/src/client/object/player-entity.ts b/src/client/object/player-entity.ts index fb92297..646a2d7 100644 --- a/src/client/object/player-entity.ts +++ b/src/client/object/player-entity.ts @@ -54,7 +54,7 @@ export class PlayerEntity extends PonyEntity { } public addChat(message: string): void { - const lines = []; + const lines: string[] = []; let truncated = message; while (truncated.length > 80) { @@ -74,7 +74,7 @@ export class PlayerEntity extends PonyEntity { }); this._chats.unshift(newChat); - newChat.tag.position.set(0, 1.8 + this.nameTag.tag.scale.y + 0.15, 0.5); + newChat.tag.position.set(0, 1.8 + this.nameTag!.tag.scale.y + 0.15, 0.5); this.container.add(newChat.tag); if (this._chats.length > 3) { @@ -122,13 +122,13 @@ export class PlayerEntity extends PonyEntity { private setFromPacket(packet: FullStatePacket | PositionUpdatePacket) { if ((packet as FullStatePacket).velocity) { this.setVelocity( - new Vector3().fromArray((packet as FullStatePacket).velocity), + new Vector3().fromArray((packet as FullStatePacket).velocity!), ); } if ((packet as FullStatePacket).angular) { this.setAngularVelocity( - new Vector3().fromArray((packet as FullStatePacket).angular), + new Vector3().fromArray((packet as FullStatePacket).angular!), ); } @@ -151,10 +151,10 @@ export class PlayerEntity extends PonyEntity { } for (let i = 0; i < this._updateQueue.length; ++i) { - this._updateQueue[i].time -= dt; + this._updateQueue[i].time! -= dt; } - while (this._updateQueue.length > 0 && this._updateQueue[0].time <= 0.0) { + while (this._updateQueue.length > 0 && this._updateQueue[0].time! <= 0.0) { this._lastFrame = { animState: this._targetFrame.animState, position: this.container.position.toArray(), diff --git a/src/common/types/socket.ts b/src/common/types/socket.ts index 0398108..4ea3018 100644 --- a/src/common/types/socket.ts +++ b/src/common/types/socket.ts @@ -9,7 +9,7 @@ import { IcyNetUser } from './user'; export interface ServerToClientEvents { 'set.me': (player: CompositePacket | null) => void; 'error.duplicate': () => void; - 'player.list': (players: Partial) => void; + 'player.list': (players: Partial[]) => void; 'player.chat': (data: { sender: Partial; message: string; diff --git a/src/server/index.ts b/src/server/index.ts index 4963016..e326b2b 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -19,7 +19,9 @@ import { Game } from './game'; import { InterServerEvents, SocketData } from './types/socket'; const RedisStore = connectRedis(session); -const redisClient = config.redis?.enabled ? redis.createClient() : undefined; +const redisClient = config.redis?.enabled ? redis.createClient({ + url: config.redis?.url || 'redis://localhost:6379', +}) : undefined; const sessionMiddleware = session({ secret: config.server.sessionSecret,