diff --git a/src/Web/Map/Scripts/livemap/Attack.ts b/src/Web/Map/Scripts/livemap/Attack.ts index f96d1d36d..1aede9814 100644 --- a/src/Web/Map/Scripts/livemap/Attack.ts +++ b/src/Web/Map/Scripts/livemap/Attack.ts @@ -44,6 +44,14 @@ export class Attacks extends THREE.Points { public update(): void { } + /** + * Releases the geometry and material of the attack particles. + */ + public dispose(): void { + this.geometry.dispose(); + this.material.dispose(); + } + public addAttack(attacker: GameObject, target: GameObject): void { if (this.freeAttackIndexes.peek() === null) { return; diff --git a/src/Web/Map/Scripts/livemap/Attackable.ts b/src/Web/Map/Scripts/livemap/Attackable.ts index 9e94cbf89..09714be30 100644 --- a/src/Web/Map/Scripts/livemap/Attackable.ts +++ b/src/Web/Map/Scripts/livemap/Attackable.ts @@ -12,12 +12,19 @@ export class Attackable extends THREE.Mesh implements public material: THREE.Material; public readonly nameLabel: NameLabel; - private moveTween: TWEEN.Tween; + /* + * All tweens of the current movement - the tween of the first step and the + * step tweens which are chained to it. They are all kept, because stopping + * the first tween doesn't stop the chained ones anymore as soon as it finished. + */ + private moveTweens: TWEEN.Tween[] = []; + private rotateTween: TWEEN.Tween | null = null; + private scaleTween: TWEEN.Tween | null = null; + private fadeTween: TWEEN.Tween | null = null; constructor(data: TData, geometry: THREE.Geometry, material: THREE.Material) { super(geometry, material); this.data = data; - this.moveTween = null; this.nameLabel = new NameLabel(); this.nameLabel.position.z = NAME_LABEL_Z_POSITION; this.add(this.nameLabel); @@ -31,14 +38,26 @@ export class Attackable extends THREE.Mesh implements this.nameLabel.hide(); } + /** + * Stops all running animations and releases the resources of this object. + * The geometry is not disposed, because it's shared between all objects of the same type. + */ + public dispose(): void { + this.stopTweens(); + this.remove(this.nameLabel); + this.nameLabel.dispose(); + this.material.dispose(); + } + public gotKilled(): void { // we fade the color out const fadeOutDurationMs = 1000; const startingOpacity = 1; const fadedOutOpacity = 0.1; - + + this.fadeTween?.stop(); const state = { opacity: startingOpacity }; - const tween = new TWEEN.Tween(state) + this.fadeTween = new TWEEN.Tween(state) .to({ opacity: fadedOutOpacity }, fadeOutDurationMs) .onUpdate(() => this.material.opacity = state.opacity) .easing(TWEEN.Easing.Circular.Out) @@ -49,8 +68,12 @@ export class Attackable extends THREE.Mesh implements const scaleUpDurationMs = 500; this.data = newData; this.material.opacity = 1.0; + + this.fadeTween?.stop(); + this.fadeTween = null; + this.scaleTween?.stop(); const state = { scale: 0 }; - const tween = new TWEEN.Tween(state) + this.scaleTween = new TWEEN.Tween(state) .to({ scale: 1 }, scaleUpDurationMs) .onUpdate(() => this.scale.setScalar(state.scale)) .easing(TWEEN.Easing.Back.Out) @@ -61,38 +84,41 @@ export class Attackable extends THREE.Mesh implements public moveTo(newX: number, newY: number, moveType: any, walkDelay: number, steps: Step[]): void { const state = { x: this.data.x, y: this.data.y }; - this.data = this.data = Object.assign({}, this.data, { x: newX, y: newY }); + this.data = Object.assign({}, this.data, { x: newX, y: newY }); - if (this.moveTween !== null) { - this.moveTween.stop(); - } - - this.moveTween = new TWEEN.Tween(state) - .onUpdate(() => this.setObjectPositionOnMap(state.x, state.y)); + this.stopMoveTweens(); - if (moveType === "Instant" || moveType === 1) { + const isWalking = moveType !== "Instant" && moveType !== 1 + && steps !== undefined && steps !== null && steps.length > 0; + if (!isWalking) { const moveDurationMs = 300; - this.moveTween = this.moveTween.easing(TWEEN.Easing.Elastic.Out) - .to({ x: newX, y: newY }, moveDurationMs); - } else { - for (const i in steps) { - if (steps.hasOwnProperty(i)) { - const step = steps[i]; - const stepTween = new TWEEN.Tween(state) - .to({ x: step.x, y: step.y }, walkDelay) - .onStart(() => this.rotateTo(step.direction)) - .onUpdate(() => this.setObjectPositionOnMap(state.x, state.y)); - this.moveTween.chain(stepTween); - } - } + const moveTween = new TWEEN.Tween(state) + .to({ x: newX, y: newY }, moveDurationMs) + .onUpdate(() => this.setObjectPositionOnMap(state.x, state.y)) + .easing(TWEEN.Easing.Elastic.Out); + this.moveTweens.push(moveTween); + moveTween.start(); + return; + } + + // Each step tween is chained to its predecessor, so that the steps are walked one after another. + let previousTween: TWEEN.Tween | null = null; + for (const step of steps) { + const stepTween = new TWEEN.Tween(state) + .to({ x: step.x, y: step.y }, walkDelay) + .onStart(() => this.rotateTo(step.direction)) + .onUpdate(() => this.setObjectPositionOnMap(state.x, state.y)); + previousTween?.chain(stepTween); + previousTween = stepTween; + this.moveTweens.push(stepTween); } - this.moveTween.start(); + this.moveTweens[0].start(); } public rotateTo(rotation: Direction): void { if (this.data !== undefined) { - this.data = Object.assign({}, this.data, rotation); + this.data = Object.assign({}, this.data, { direction: rotation }); } const degreesOfOneTurn = 360; @@ -100,14 +126,34 @@ export class Attackable extends THREE.Mesh implements const targetAngle = THREE.Math.degToRad((rotation * degreesOfOneTurn) / numberOfDirectionValues); const rotateDurationMs = 200; + this.rotateTween?.stop(); const state = { z: this.rotation.z }; - new TWEEN.Tween(state) + this.rotateTween = new TWEEN.Tween(state) .to({ z: targetAngle }, rotateDurationMs) .onUpdate(() => this.rotation.z = state.z) .easing(TWEEN.Easing.Quadratic.Out) .start(); } + private stopTweens(): void { + this.stopMoveTweens(); + + this.rotateTween?.stop(); + this.rotateTween = null; + this.scaleTween?.stop(); + this.scaleTween = null; + this.fadeTween?.stop(); + this.fadeTween = null; + } + + private stopMoveTweens(): void { + for (const moveTween of this.moveTweens) { + moveTween.stop(); + } + + this.moveTweens = []; + } + private setRotation(value: Direction): void { const degreesOfOneTurn = 360; const numberOfDirectionValues = 8; diff --git a/src/Web/Map/Scripts/livemap/Debug.ts b/src/Web/Map/Scripts/livemap/Debug.ts new file mode 100644 index 000000000..e83e7e1d8 --- /dev/null +++ b/src/Web/Map/Scripts/livemap/Debug.ts @@ -0,0 +1,33 @@ +/* + * Debug logging for the live map. + * + * The per-object messages are disabled by default: the browser console keeps + * live references to everything which is logged to it, so a message for every + * added, updated and removed object would pin each object which ever appeared + * on the map for the lifetime of the console buffer. + * + * To enable them, set 'liveMapDebugLogging' to true on the window object, + * e.g. by entering 'liveMapDebugLogging = true' in the browser console. + */ + +interface DebugWindow extends Window { + liveMapDebugLogging?: boolean; +} + +/** + * Gets a value indicating whether the verbose debug logging is enabled. + */ +export function isDebugLoggingEnabled(): boolean { + return (window as DebugWindow).liveMapDebugLogging === true; +} + +/** + * Writes a debug message to the console, if the debug logging is enabled. + * @param message - The message. + * @param parameters - The additional parameters which are logged with the message. + */ +export function logDebug(message: string, ...parameters: any[]): void { + if (isDebugLoggingEnabled()) { + console.debug(message, ...parameters); + } +} diff --git a/src/Web/Map/Scripts/livemap/GameObject.ts b/src/Web/Map/Scripts/livemap/GameObject.ts index 4fa77da70..5139436eb 100644 --- a/src/Web/Map/Scripts/livemap/GameObject.ts +++ b/src/Web/Map/Scripts/livemap/GameObject.ts @@ -7,4 +7,10 @@ export interface GameObject extends THREE.Object3D { moveTo(newX: number, newY: number, moveType: any, walkDelay: number, steps: Step[]): void; rotateTo(rotation: Direction): void; gotKilled(): void; + + /** + * Stops all running animations and releases the resources (materials, textures) + * which are exclusively used by this object. + */ + dispose(): void; } diff --git a/src/Web/Map/Scripts/livemap/MapApp.ts b/src/Web/Map/Scripts/livemap/MapApp.ts index e17430138..916a311e0 100644 --- a/src/Web/Map/Scripts/livemap/MapApp.ts +++ b/src/Web/Map/Scripts/livemap/MapApp.ts @@ -18,6 +18,7 @@ export class MapApp { private lastHighlightedId: number | null = null; private isDisposing: boolean = false; private isDisposed: boolean = false; + private animationFrameId: number | null = null; private resizeEventListener: () => void; private readonly onPickObjectHandler: (data: ObjectData) => void; @@ -62,7 +63,6 @@ export class MapApp { } }, (data) => this.onObjectHovered(data)); - this.container.appendChild(this.renderer.domElement); this.animate(); //starts the rendering loop } @@ -102,15 +102,31 @@ export class MapApp { this.isDisposing = true; window.removeEventListener("resize", this.resizeEventListener); - const webGlRenderer = this.renderer as THREE.WebGLRenderer; - if (webGlRenderer != null) { - webGlRenderer.dispose(); + if (this.animationFrameId !== null) { + cancelAnimationFrame(this.animationFrameId); + this.animationFrameId = null; } + this.picker.dispose(); + this.scene.remove(this.world); this.world.dispose(); this.world = null; + const canvas = this.renderer.domElement; + const webGlRenderer = this.renderer as THREE.WebGLRenderer; + if (webGlRenderer != null) { + webGlRenderer.dispose(); + + // Releases the WebGL context. Browsers only allow a limited number of them, + // so we don't want to keep it until it's garbage collected. + webGlRenderer.forceContextLoss(); + } + + if (canvas.parentNode !== null) { + canvas.parentNode.removeChild(canvas); + } + this.renderer = null; this.isDisposing = false; this.isDisposed = true; @@ -122,7 +138,8 @@ export class MapApp { return; } - requestAnimationFrame(() => this.animate(time)); // request the next frame to be rendered + // request the next frame to be rendered, with the timestamp of that frame + this.animationFrameId = requestAnimationFrame((frameTime) => this.animate(frameTime)); this.stats?.update(); // updates the stats (fps and frametimes) TWEEN.update(time); // updates all existing Tweens this.world.update(); // update world and it's objects diff --git a/src/Web/Map/Scripts/livemap/NameLabel.ts b/src/Web/Map/Scripts/livemap/NameLabel.ts index 95f15a5db..9ae51ddf7 100644 --- a/src/Web/Map/Scripts/livemap/NameLabel.ts +++ b/src/Web/Map/Scripts/livemap/NameLabel.ts @@ -1,6 +1,5 @@ import * as THREE from "three"; -const CANVAS_WIDTH = 512; const CANVAS_HEIGHT = 64; const LABEL_SCALE_X = 40; const LABEL_SCALE_Y = 6; @@ -8,29 +7,23 @@ const LABEL_SCALE_Z = 1; const CLEAR_X = 0; const CLEAR_Y = 0; const SCALE_MULTIPLIER = 8; +const EMPTY_CANVAS_SIZE = 0; export class NameLabel extends THREE.Sprite { - private readonly canvas: HTMLCanvasElement; - private readonly context: CanvasRenderingContext2D; - private readonly texture: THREE.CanvasTexture; - private isVisible: boolean = false; + /* + * A shared material for labels which were never shown. It's never rendered + * (the label is invisible until 'show' is called) and therefore never + * allocates any resources in the renderer. + */ + private static readonly hiddenMaterial: THREE.SpriteMaterial = new THREE.SpriteMaterial(); + + private canvas: HTMLCanvasElement | null = null; + private context: CanvasRenderingContext2D | null = null; + private texture: THREE.CanvasTexture | null = null; + private labelMaterial: THREE.SpriteMaterial | null = null; constructor() { - const canvas = document.createElement("canvas"); - canvas.width = CANVAS_WIDTH; - canvas.height = CANVAS_HEIGHT; - const context = canvas.getContext("2d"); - if (!context) { - throw new Error("Failed to get 2D context"); - } - const texture = new THREE.CanvasTexture(canvas); - const material = new THREE.SpriteMaterial({ map: texture, transparent: true }); - - super(material); - - this.canvas = canvas; - this.context = context; - this.texture = texture; + super(NameLabel.hiddenMaterial); this.scale.set(LABEL_SCALE_X, LABEL_SCALE_Y, LABEL_SCALE_Z); this.visible = false; @@ -41,19 +34,74 @@ export class NameLabel extends THREE.Sprite { } public show(name: string): void { + this.createCanvasIfRequired(); this.renderLabel(name); this.visible = true; - this.isVisible = true; } public hide(): void { this.visible = false; - this.isVisible = false; + } + + /** + * Releases the canvas, texture and material of this label. + * They are created again when the label is shown the next time. + */ + public dispose(): void { + this.visible = false; + this.material = NameLabel.hiddenMaterial; + + if (this.labelMaterial !== null) { + this.labelMaterial.dispose(); + this.labelMaterial = null; + } + + if (this.texture !== null) { + this.texture.dispose(); + this.texture = null; + } + + if (this.canvas !== null) { + // Releases the backing store of the canvas, which is by far the biggest part of a label. + this.canvas.width = EMPTY_CANVAS_SIZE; + this.canvas.height = EMPTY_CANVAS_SIZE; + this.canvas = null; + } + + this.context = null; + } + + /* + * Creates the canvas, texture and material of this label, if that didn't happen yet. + * They are created lazily, because most objects on the map are never hovered + * and a canvas costs a few hundred kilobytes each. + */ + private createCanvasIfRequired(): void { + if (this.canvas !== null) { + return; + } + + const canvas = document.createElement("canvas"); + canvas.height = CANVAS_HEIGHT; + const context = canvas.getContext("2d"); + if (!context) { + throw new Error("Failed to get 2D context"); + } + + this.canvas = canvas; + this.context = context; + this.texture = new THREE.CanvasTexture(canvas); + this.labelMaterial = new THREE.SpriteMaterial({ map: this.texture, transparent: true }); + this.material = this.labelMaterial; } private renderLabel(name: string): void { const ctx = this.context; const canvas = this.canvas; + const texture = this.texture; + if (ctx === null || canvas === null || texture === null) { + return; + } ctx.font = "bold 28px Consolas, monospace"; const textWidth = ctx.measureText(name).width; @@ -95,7 +143,7 @@ export class NameLabel extends THREE.Sprite { ctx.fillText(name, canvas.width / 2, canvas.height / 2); - this.texture.needsUpdate = true; + texture.needsUpdate = true; } private nextPowerOfTwo(value: number): number { diff --git a/src/Web/Map/Scripts/livemap/Queue.ts b/src/Web/Map/Scripts/livemap/Queue.ts index 2bc696edf..7501afa7c 100644 --- a/src/Web/Map/Scripts/livemap/Queue.ts +++ b/src/Web/Map/Scripts/livemap/Queue.ts @@ -1,43 +1,54 @@ -export class Queue { - private _oldestIndex: number; - private _newestIndex: number; - private _storage: T[]; +const INITIAL_HEAD_INDEX = 0; + +export class Queue { + private storage: T[]; + private headIndex: number; constructor() { - this._oldestIndex = 1; - this._newestIndex = 1; - this._storage = []; + this.storage = []; + this.headIndex = INITIAL_HEAD_INDEX; } public size(): number { - return this._newestIndex - this._oldestIndex; + return this.storage.length - this.headIndex; } public enqueue(data: T): void { - this._storage[this._newestIndex] = data; - this._newestIndex++; + this.storage.push(data); } public dequeue(): T { - const oldestIndex = this._oldestIndex; - const newestIndex = this._newestIndex; + if (this.size() === 0) { + return null; + } - if (oldestIndex !== newestIndex) { - const deletedData = this._storage[oldestIndex]; - delete this._storage[oldestIndex]; - this._oldestIndex++; + const data = this.storage[this.headIndex]; + this.headIndex++; - return deletedData; - } + this.compactIfRequired(); - return null; + return data; } public peek(): T { - if (this._oldestIndex !== this._newestIndex) { - return this._storage[this._oldestIndex]; + if (this.size() === 0) { + return null; } - return null; + return this.storage[this.headIndex]; + } + + /* + * Removes the already dequeued entries from the front of the storage, as soon as + * they take up half of it. Without that, the storage would grow indefinitely and + * degrade into a slow dictionary-like array. Because it just happens when half of + * the entries are dequeued, the costs are amortized constant per dequeued entry. + */ + private compactIfRequired(): void { + const compactionThresholdDivisor = 2; + if (this.headIndex >= this.storage.length / compactionThresholdDivisor) { + this.storage = this.storage.slice(this.headIndex); + this.headIndex = INITIAL_HEAD_INDEX; + } } } diff --git a/src/Web/Map/Scripts/livemap/TerrainShader.ts b/src/Web/Map/Scripts/livemap/TerrainShader.ts index 71d408072..e65b8f61f 100644 --- a/src/Web/Map/Scripts/livemap/TerrainShader.ts +++ b/src/Web/Map/Scripts/livemap/TerrainShader.ts @@ -1,40 +1,49 @@ import * as THREE from "three"; +const fragmentShader = [ + "uniform sampler2D tColor;", + "uniform float tPixelSize;", + "varying vec2 vUv;", + "void main() {", + "vec4 texel = texture2D( tColor, vUv );", + "float multi = 0.1;", + "for(float x = -1.0; x <= 1.0; x++) {", + "for (float y = -1.0; y <= 1.0; y++) {", + "if (x == 0.0 && y == 0.0) continue;", + "vec4 neighborcolor = texture2D(tColor, vUv + vec2(x/256.0, y/256.0) * tPixelSize);", + "if (neighborcolor != texel) { multi = 1.0; }", + "}", + "}", + "gl_FragColor = texel * multi;", + "}" +].join("\n"); + +const vertexShader = [ + "varying vec2 vUv;", + "void main() {", + "vUv = vec2(uv.x, uv.y);", + "gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", + "}" +].join("\n"); + /* - * A shader for the terrain of the map. It highlights the edges - * (detected by color changes in nearby pixels) of the map texture. + * Creates the parameters for a shader for the terrain of the map. It highlights + * the edges (detected by color changes in nearby pixels) of the map texture. + * + * Each map needs its own parameters, because the uniforms hold the texture and + * the pixel size of exactly one map. */ -export const terrainShader: THREE.ShaderMaterialParameters = { - fragmentShader: [ - "uniform sampler2D tColor;", - "uniform float tPixelSize;", - "varying vec2 vUv;", - "void main() {", - "vec4 texel = texture2D( tColor, vUv );", - "float multi = 0.1;", - "for(float x = -1.0; x <= 1.0; x++) {", - "for (float y = -1.0; y <= 1.0; y++) {", - "if (x == 0.0 && y == 0.0) continue;", - "vec4 neighborcolor = texture2D(tColor, vUv + vec2(x/256.0, y/256.0) * tPixelSize);", - "if (neighborcolor != texel) { multi = 1.0; }", - "}", - "}", - "gl_FragColor = texel * multi;", - "}" - ].join("\n"), +export function createTerrainShader(): THREE.ShaderMaterialParameters { + return { + fragmentShader, - side: THREE.DoubleSide, + side: THREE.DoubleSide, - uniforms: { - tColor: { type: "t", value: 0 }, - tPixelSize: { type: "f", value: 0.3 }, - }, + uniforms: { + tColor: { type: "t", value: 0 }, + tPixelSize: { type: "f", value: 0.3 }, + }, - vertexShader: [ - "varying vec2 vUv;", - "void main() {", - "vUv = vec2(uv.x, uv.y);", - "gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", - "}" - ].join("\n"), -}; + vertexShader, + }; +} diff --git a/src/Web/Map/Scripts/livemap/World.ts b/src/Web/Map/Scripts/livemap/World.ts index 3891aaf83..246d359b5 100644 --- a/src/Web/Map/Scripts/livemap/World.ts +++ b/src/Web/Map/Scripts/livemap/World.ts @@ -1,11 +1,12 @@ import * as THREE from "three"; import { Attacks } from "./Attack"; -import { terrainShader } from "./TerrainShader"; +import { createTerrainShader } from "./TerrainShader"; import { Player } from "./Player"; import { Attackable, attackableAlphaMapTexture } from "./Attackable"; import { GameObject } from "./GameObject"; import { NonPlayerCharacter as NPC } from "./NonPlayerCharacter"; +import { logDebug } from "./Debug"; import { NpcData, PlayerData, ObjectData, Step } from "./Types"; @@ -18,7 +19,11 @@ export class World extends THREE.Object3D { [id: number]: GameObject, }; private attacks: Attacks; + private terrainMesh: THREE.Mesh; + private terrainMaterial: THREE.ShaderMaterial; + private terrainTexture: THREE.Texture | null = null; private lastLabelObjectId: number | null = null; + private isDisposed: boolean = false; /** * Constructs a new World object. Automatically initializes and updates @@ -37,15 +42,22 @@ export class World extends THREE.Object3D { const segments = 1; - const planeMesh = new THREE.Mesh( + this.terrainMaterial = new THREE.ShaderMaterial(createTerrainShader()); + this.terrainMesh = new THREE.Mesh( new THREE.PlaneGeometry(World.sideLength, World.sideLength, segments, segments), - new THREE.ShaderMaterial(terrainShader)); - this.add(planeMesh); + this.terrainMaterial); + this.add(this.terrainMesh); const textureLoader = new THREE.TextureLoader(); textureLoader.load("terrain/" + serverId + "/" + mapId, (texture: THREE.Texture) => { + if (this.isDisposed) { + texture.dispose(); + return; + } + texture.magFilter = THREE.NearestFilter; - terrainShader.uniforms.tColor.value = texture; + this.terrainTexture = texture; + this.terrainMaterial.uniforms.tColor.value = texture; }); } @@ -77,10 +89,10 @@ export class World extends THREE.Object3D { await new Promise((resolve) => setTimeout(resolve, waitTimeMs)); } - console.debug("Adding npc", npcData); + logDebug("Adding npc", npcData); this.addNpc(npcData); } else { - console.debug("Updating npc", npcData); + logDebug("Updating npc", npcData); obj.respawn(npcData); } } @@ -97,10 +109,10 @@ export class World extends THREE.Object3D { await new Promise((resolve) => setTimeout(resolve, waitTimeMs)); } - console.debug("Adding player", playerData); + logDebug("Adding player", playerData); this.addPlayer(playerData); } else { - console.debug("Updating player", playerData, obj.data); + logDebug("Updating player", playerData, obj.data); obj.respawn(playerData); } } @@ -188,7 +200,31 @@ export class World extends THREE.Object3D { * Cleans up all objects and releases resources. */ public dispose(): void { - delete this.objects; + if (this.isDisposed) { + return; + } + + this.isDisposed = true; + this.lastLabelObjectId = null; + + for (const id in this.objects) { + if (this.objects.hasOwnProperty(id)) { + const object = this.objects[id]; + this.remove(object); + object.dispose(); + } + } + + this.objects = {}; + + this.remove(this.attacks); + this.attacks.dispose(); + + this.remove(this.terrainMesh); + this.terrainMesh.geometry.dispose(); + this.terrainMaterial.dispose(); + this.terrainTexture?.dispose(); + this.terrainTexture = null; } /** @@ -260,7 +296,7 @@ export class World extends THREE.Object3D { * @param newSize - The new render size in pixels. */ public onSizeChanged(newSize: number): void { - terrainShader.uniforms.tPixelSize.value = World.sideLength / newSize; + this.terrainMaterial.uniforms.tPixelSize.value = World.sideLength / newSize; } /** @@ -268,6 +304,10 @@ export class World extends THREE.Object3D { * @param data - The NPC data. */ public addNpc(data: NpcData): void { + if (this.isDisposed) { + return; + } + const npc = new NPC(data); this.addObjectMesh(npc); npc.respawn(data); @@ -278,6 +318,10 @@ export class World extends THREE.Object3D { * @param data - The player data. */ public addPlayer(data: PlayerData): void { + if (this.isDisposed) { + return; + } + const player = new Player(data); this.addObjectMesh(player); player.respawn(data); @@ -293,9 +337,14 @@ export class World extends THREE.Object3D { return; } - console.debug("Removing object", mesh.data); + logDebug("Removing object", mesh.data); this.remove(mesh as THREE.Object3D); delete this.objects[objectId]; + if (this.lastLabelObjectId === objectId) { + this.lastLabelObjectId = null; + } + + mesh.dispose(); } /** diff --git a/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js b/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js index 9c430430c..a45e9cfc7 100644 --- a/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js +++ b/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js @@ -1,3 +1,4 @@ +"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || @@ -13,6 +14,15 @@ var __extends = (this && this.__extends) || (function () { d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { @@ -62,40 +72,44 @@ var __generator = (this && this.__generator) || function (thisArg, body) { }; System.register("Queue", [], function (exports_1, context_1) { "use strict"; - var Queue; + var INITIAL_HEAD_INDEX, Queue; var __moduleName = context_1 && context_1.id; return { setters: [], execute: function () { + INITIAL_HEAD_INDEX = 0; Queue = (function () { function Queue() { - this._oldestIndex = 1; - this._newestIndex = 1; - this._storage = []; + this.storage = []; + this.headIndex = INITIAL_HEAD_INDEX; } Queue.prototype.size = function () { - return this._newestIndex - this._oldestIndex; + return this.storage.length - this.headIndex; }; Queue.prototype.enqueue = function (data) { - this._storage[this._newestIndex] = data; - this._newestIndex++; + this.storage.push(data); }; Queue.prototype.dequeue = function () { - var oldestIndex = this._oldestIndex; - var newestIndex = this._newestIndex; - if (oldestIndex !== newestIndex) { - var deletedData = this._storage[oldestIndex]; - delete this._storage[oldestIndex]; - this._oldestIndex++; - return deletedData; + if (this.size() === 0) { + return null; } - return null; + var data = this.storage[this.headIndex]; + this.headIndex++; + this.compactIfRequired(); + return data; }; Queue.prototype.peek = function () { - if (this._oldestIndex !== this._newestIndex) { - return this._storage[this._oldestIndex]; + if (this.size() === 0) { + return null; + } + return this.storage[this.headIndex]; + }; + Queue.prototype.compactIfRequired = function () { + var compactionThresholdDivisor = 2; + if (this.headIndex >= this.storage.length / compactionThresholdDivisor) { + this.storage = this.storage.slice(this.headIndex); + this.headIndex = INITIAL_HEAD_INDEX; } - return null; }; return Queue; }()); @@ -182,6 +196,10 @@ System.register("Attack", ["three", "tween", "Queue"], function (exports_4, cont } Attacks.prototype.update = function () { }; + Attacks.prototype.dispose = function () { + this.geometry.dispose(); + this.material.dispose(); + }; Attacks.prototype.addAttack = function (attacker, target) { var _this = this; if (this.freeAttackIndexes.peek() === null) { @@ -225,7 +243,7 @@ System.register("Attack", ["three", "tween", "Queue"], function (exports_4, cont }); System.register("NameLabel", ["three"], function (exports_5, context_5) { "use strict"; - var THREE, CANVAS_WIDTH, CANVAS_HEIGHT, LABEL_SCALE_X, LABEL_SCALE_Y, LABEL_SCALE_Z, CLEAR_X, CLEAR_Y, SCALE_MULTIPLIER, NameLabel; + var THREE, CANVAS_HEIGHT, LABEL_SCALE_X, LABEL_SCALE_Y, LABEL_SCALE_Z, CLEAR_X, CLEAR_Y, SCALE_MULTIPLIER, EMPTY_CANVAS_SIZE, NameLabel; var __moduleName = context_5 && context_5.id; return { setters: [ @@ -234,7 +252,6 @@ System.register("NameLabel", ["three"], function (exports_5, context_5) { } ], execute: function () { - CANVAS_WIDTH = 512; CANVAS_HEIGHT = 64; LABEL_SCALE_X = 40; LABEL_SCALE_Y = 6; @@ -242,24 +259,15 @@ System.register("NameLabel", ["three"], function (exports_5, context_5) { CLEAR_X = 0; CLEAR_Y = 0; SCALE_MULTIPLIER = 8; + EMPTY_CANVAS_SIZE = 0; NameLabel = (function (_super) { __extends(NameLabel, _super); function NameLabel() { - var _this = this; - var canvas = document.createElement("canvas"); - canvas.width = CANVAS_WIDTH; - canvas.height = CANVAS_HEIGHT; - var context = canvas.getContext("2d"); - if (!context) { - throw new Error("Failed to get 2D context"); - } - var texture = new THREE.CanvasTexture(canvas); - var material = new THREE.SpriteMaterial({ map: texture, transparent: true }); - _this = _super.call(this, material) || this; - _this.isVisible = false; - _this.canvas = canvas; - _this.context = context; - _this.texture = texture; + var _this = _super.call(this, NameLabel.hiddenMaterial) || this; + _this.canvas = null; + _this.context = null; + _this.texture = null; + _this.labelMaterial = null; _this.scale.set(LABEL_SCALE_X, LABEL_SCALE_Y, LABEL_SCALE_Z); _this.visible = false; return _this; @@ -267,17 +275,54 @@ System.register("NameLabel", ["three"], function (exports_5, context_5) { NameLabel.prototype.raycast = function () { }; NameLabel.prototype.show = function (name) { + this.createCanvasIfRequired(); this.renderLabel(name); this.visible = true; - this.isVisible = true; }; NameLabel.prototype.hide = function () { this.visible = false; - this.isVisible = false; + }; + NameLabel.prototype.dispose = function () { + this.visible = false; + this.material = NameLabel.hiddenMaterial; + if (this.labelMaterial !== null) { + this.labelMaterial.dispose(); + this.labelMaterial = null; + } + if (this.texture !== null) { + this.texture.dispose(); + this.texture = null; + } + if (this.canvas !== null) { + this.canvas.width = EMPTY_CANVAS_SIZE; + this.canvas.height = EMPTY_CANVAS_SIZE; + this.canvas = null; + } + this.context = null; + }; + NameLabel.prototype.createCanvasIfRequired = function () { + if (this.canvas !== null) { + return; + } + var canvas = document.createElement("canvas"); + canvas.height = CANVAS_HEIGHT; + var context = canvas.getContext("2d"); + if (!context) { + throw new Error("Failed to get 2D context"); + } + this.canvas = canvas; + this.context = context; + this.texture = new THREE.CanvasTexture(canvas); + this.labelMaterial = new THREE.SpriteMaterial({ map: this.texture, transparent: true }); + this.material = this.labelMaterial; }; NameLabel.prototype.renderLabel = function (name) { var ctx = this.context; var canvas = this.canvas; + var texture = this.texture; + if (ctx === null || canvas === null || texture === null) { + return; + } ctx.font = "bold 28px Consolas, monospace"; var textWidth = ctx.measureText(name).width; var padding = 12; @@ -308,11 +353,12 @@ System.register("NameLabel", ["three"], function (exports_5, context_5) { ctx.textAlign = "center"; ctx.textBaseline = "middle"; ctx.fillText(name, canvas.width / 2, canvas.height / 2); - this.texture.needsUpdate = true; + texture.needsUpdate = true; }; NameLabel.prototype.nextPowerOfTwo = function (value) { return Math.pow(2, Math.ceil(Math.log2(value))); }; + NameLabel.hiddenMaterial = new THREE.SpriteMaterial(); return NameLabel; }(THREE.Sprite)); exports_5("NameLabel", NameLabel); @@ -342,8 +388,11 @@ System.register("Attackable", ["three", "tween", "NameLabel"], function (exports __extends(Attackable, _super); function Attackable(data, geometry, material) { var _this = _super.call(this, geometry, material) || this; + _this.moveTweens = []; + _this.rotateTween = null; + _this.scaleTween = null; + _this.fadeTween = null; _this.data = data; - _this.moveTween = null; _this.nameLabel = new NameLabel_1.NameLabel(); _this.nameLabel.position.z = NAME_LABEL_Z_POSITION; _this.add(_this.nameLabel); @@ -355,13 +404,21 @@ System.register("Attackable", ["three", "tween", "NameLabel"], function (exports Attackable.prototype.hideLabel = function () { this.nameLabel.hide(); }; + Attackable.prototype.dispose = function () { + this.stopTweens(); + this.remove(this.nameLabel); + this.nameLabel.dispose(); + this.material.dispose(); + }; Attackable.prototype.gotKilled = function () { var _this = this; + var _a; var fadeOutDurationMs = 1000; var startingOpacity = 1; var fadedOutOpacity = 0.1; + (_a = this.fadeTween) === null || _a === void 0 ? void 0 : _a.stop(); var state = { opacity: startingOpacity }; - var tween = new tween_2.default.Tween(state) + this.fadeTween = new tween_2.default.Tween(state) .to({ opacity: fadedOutOpacity }, fadeOutDurationMs) .onUpdate(function () { return _this.material.opacity = state.opacity; }) .easing(tween_2.default.Easing.Circular.Out) @@ -369,11 +426,15 @@ System.register("Attackable", ["three", "tween", "NameLabel"], function (exports }; Attackable.prototype.respawn = function (newData) { var _this = this; + var _a, _b; var scaleUpDurationMs = 500; this.data = newData; this.material.opacity = 1.0; + (_a = this.fadeTween) === null || _a === void 0 ? void 0 : _a.stop(); + this.fadeTween = null; + (_b = this.scaleTween) === null || _b === void 0 ? void 0 : _b.stop(); var state = { scale: 0 }; - var tween = new tween_2.default.Tween(state) + this.scaleTween = new tween_2.default.Tween(state) .to({ scale: 1 }, scaleUpDurationMs) .onUpdate(function () { return _this.scale.setScalar(state.scale); }) .easing(tween_2.default.Easing.Back.Out) @@ -384,51 +445,72 @@ System.register("Attackable", ["three", "tween", "NameLabel"], function (exports Attackable.prototype.moveTo = function (newX, newY, moveType, walkDelay, steps) { var _this = this; var state = { x: this.data.x, y: this.data.y }; - this.data = this.data = Object.assign({}, this.data, { x: newX, y: newY }); - if (this.moveTween !== null) { - this.moveTween.stop(); - } - this.moveTween = new tween_2.default.Tween(state) - .onUpdate(function () { return _this.setObjectPositionOnMap(state.x, state.y); }); - if (moveType === "Instant" || moveType === 1) { + this.data = Object.assign({}, this.data, { x: newX, y: newY }); + this.stopMoveTweens(); + var isWalking = moveType !== "Instant" && moveType !== 1 + && steps !== undefined && steps !== null && steps.length > 0; + if (!isWalking) { var moveDurationMs = 300; - this.moveTween = this.moveTween.easing(tween_2.default.Easing.Elastic.Out) - .to({ x: newX, y: newY }, moveDurationMs); + var moveTween = new tween_2.default.Tween(state) + .to({ x: newX, y: newY }, moveDurationMs) + .onUpdate(function () { return _this.setObjectPositionOnMap(state.x, state.y); }) + .easing(tween_2.default.Easing.Elastic.Out); + this.moveTweens.push(moveTween); + moveTween.start(); + return; } - else { - var _loop_1 = function (i) { - if (steps.hasOwnProperty(i)) { - var step_1 = steps[i]; - var stepTween = new tween_2.default.Tween(state) - .to({ x: step_1.x, y: step_1.y }, walkDelay) - .onStart(function () { return _this.rotateTo(step_1.direction); }) - .onUpdate(function () { return _this.setObjectPositionOnMap(state.x, state.y); }); - this_1.moveTween.chain(stepTween); - } - }; - var this_1 = this; - for (var i in steps) { - _loop_1(i); - } + var previousTween = null; + var _loop_1 = function (step) { + var stepTween = new tween_2.default.Tween(state) + .to({ x: step.x, y: step.y }, walkDelay) + .onStart(function () { return _this.rotateTo(step.direction); }) + .onUpdate(function () { return _this.setObjectPositionOnMap(state.x, state.y); }); + previousTween === null || previousTween === void 0 ? void 0 : previousTween.chain(stepTween); + previousTween = stepTween; + this_1.moveTweens.push(stepTween); + }; + var this_1 = this; + for (var _i = 0, steps_1 = steps; _i < steps_1.length; _i++) { + var step = steps_1[_i]; + _loop_1(step); } - this.moveTween.start(); + this.moveTweens[0].start(); }; Attackable.prototype.rotateTo = function (rotation) { var _this = this; + var _a; if (this.data !== undefined) { - this.data = Object.assign({}, this.data, rotation); + this.data = Object.assign({}, this.data, { direction: rotation }); } var degreesOfOneTurn = 360; var numberOfDirectionValues = 8; var targetAngle = THREE.Math.degToRad((rotation * degreesOfOneTurn) / numberOfDirectionValues); var rotateDurationMs = 200; + (_a = this.rotateTween) === null || _a === void 0 ? void 0 : _a.stop(); var state = { z: this.rotation.z }; - new tween_2.default.Tween(state) + this.rotateTween = new tween_2.default.Tween(state) .to({ z: targetAngle }, rotateDurationMs) .onUpdate(function () { return _this.rotation.z = state.z; }) .easing(tween_2.default.Easing.Quadratic.Out) .start(); }; + Attackable.prototype.stopTweens = function () { + var _a, _b, _c; + this.stopMoveTweens(); + (_a = this.rotateTween) === null || _a === void 0 ? void 0 : _a.stop(); + this.rotateTween = null; + (_b = this.scaleTween) === null || _b === void 0 ? void 0 : _b.stop(); + this.scaleTween = null; + (_c = this.fadeTween) === null || _c === void 0 ? void 0 : _c.stop(); + this.fadeTween = null; + }; + Attackable.prototype.stopMoveTweens = function () { + for (var _i = 0, _a = this.moveTweens; _i < _a.length; _i++) { + var moveTween = _a[_i]; + moveTween.stop(); + } + this.moveTweens = []; + }; Attackable.prototype.setRotation = function (value) { var degreesOfOneTurn = 360; var numberOfDirectionValues = 8; @@ -448,10 +530,45 @@ System.register("Attackable", ["three", "tween", "NameLabel"], function (exports } }; }); -System.register("TerrainShader", ["three"], function (exports_7, context_7) { +System.register("Debug", [], function (exports_7, context_7) { "use strict"; - var THREE, terrainShader; var __moduleName = context_7 && context_7.id; + function isDebugLoggingEnabled() { + return window.liveMapDebugLogging === true; + } + exports_7("isDebugLoggingEnabled", isDebugLoggingEnabled); + function logDebug(message) { + var parameters = []; + for (var _i = 1; _i < arguments.length; _i++) { + parameters[_i - 1] = arguments[_i]; + } + if (isDebugLoggingEnabled()) { + console.debug.apply(console, __spreadArray([message], parameters, false)); + } + } + exports_7("logDebug", logDebug); + return { + setters: [], + execute: function () { + } + }; +}); +System.register("TerrainShader", ["three"], function (exports_8, context_8) { + "use strict"; + var THREE, fragmentShader, vertexShader; + var __moduleName = context_8 && context_8.id; + function createTerrainShader() { + return { + fragmentShader: fragmentShader, + side: THREE.DoubleSide, + uniforms: { + tColor: { type: "t", value: 0 }, + tPixelSize: { type: "f", value: 0.3 }, + }, + vertexShader: vertexShader, + }; + } + exports_8("createTerrainShader", createTerrainShader); return { setters: [ function (THREE_4) { @@ -459,44 +576,37 @@ System.register("TerrainShader", ["three"], function (exports_7, context_7) { } ], execute: function () { - exports_7("terrainShader", terrainShader = { - fragmentShader: [ - "uniform sampler2D tColor;", - "uniform float tPixelSize;", - "varying vec2 vUv;", - "void main() {", - "vec4 texel = texture2D( tColor, vUv );", - "float multi = 0.1;", - "for(float x = -1.0; x <= 1.0; x++) {", - "for (float y = -1.0; y <= 1.0; y++) {", - "if (x == 0.0 && y == 0.0) continue;", - "vec4 neighborcolor = texture2D(tColor, vUv + vec2(x/256.0, y/256.0) * tPixelSize);", - "if (neighborcolor != texel) { multi = 1.0; }", - "}", - "}", - "gl_FragColor = texel * multi;", - "}" - ].join("\n"), - side: THREE.DoubleSide, - uniforms: { - tColor: { type: "t", value: 0 }, - tPixelSize: { type: "f", value: 0.3 }, - }, - vertexShader: [ - "varying vec2 vUv;", - "void main() {", - "vUv = vec2(uv.x, uv.y);", - "gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", - "}" - ].join("\n"), - }); + fragmentShader = [ + "uniform sampler2D tColor;", + "uniform float tPixelSize;", + "varying vec2 vUv;", + "void main() {", + "vec4 texel = texture2D( tColor, vUv );", + "float multi = 0.1;", + "for(float x = -1.0; x <= 1.0; x++) {", + "for (float y = -1.0; y <= 1.0; y++) {", + "if (x == 0.0 && y == 0.0) continue;", + "vec4 neighborcolor = texture2D(tColor, vUv + vec2(x/256.0, y/256.0) * tPixelSize);", + "if (neighborcolor != texel) { multi = 1.0; }", + "}", + "}", + "gl_FragColor = texel * multi;", + "}" + ].join("\n"); + vertexShader = [ + "varying vec2 vUv;", + "void main() {", + "vUv = vec2(uv.x, uv.y);", + "gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);", + "}" + ].join("\n"); } }; }); -System.register("Player", ["three", "Attackable"], function (exports_8, context_8) { +System.register("Player", ["three", "Attackable"], function (exports_9, context_9) { "use strict"; var THREE, Attackable_1, Player; - var __moduleName = context_8 && context_8.id; + var __moduleName = context_9 && context_9.id; return { setters: [ function (THREE_5) { @@ -536,15 +646,15 @@ System.register("Player", ["three", "Attackable"], function (exports_8, context_ Player.defaultGeometry = new THREE.BoxGeometry(Player.size, Player.size, Player.size); return Player; }(Attackable_1.Attackable)); - exports_8("Player", Player); + exports_9("Player", Player); ; } }; }); -System.register("NonPlayerCharacter", ["three", "Attackable"], function (exports_9, context_9) { +System.register("NonPlayerCharacter", ["three", "Attackable"], function (exports_10, context_10) { "use strict"; var THREE, Attackable_2, NpcObjectKind, NpcColors, NonPlayerCharacter; - var __moduleName = context_9 && context_9.id; + var __moduleName = context_10 && context_10.id; return { setters: [ function (THREE_6) { @@ -591,15 +701,15 @@ System.register("NonPlayerCharacter", ["three", "Attackable"], function (exports NonPlayerCharacter.defaultGeometry = new THREE.BoxGeometry(NonPlayerCharacter.size, NonPlayerCharacter.size, NonPlayerCharacter.size); return NonPlayerCharacter; }(Attackable_2.Attackable)); - exports_9("NonPlayerCharacter", NonPlayerCharacter); + exports_10("NonPlayerCharacter", NonPlayerCharacter); ; } }; }); -System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attackable", "NonPlayerCharacter"], function (exports_10, context_10) { +System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attackable", "NonPlayerCharacter", "Debug"], function (exports_11, context_11) { "use strict"; - var THREE, Attack_1, TerrainShader_1, Player_1, Attackable_3, NonPlayerCharacter_1, World; - var __moduleName = context_10 && context_10.id; + var THREE, Attack_1, TerrainShader_1, Player_1, Attackable_3, NonPlayerCharacter_1, Debug_1, World; + var __moduleName = context_11 && context_11.id; return { setters: [ function (THREE_7) { @@ -619,6 +729,9 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka }, function (NonPlayerCharacter_1_1) { NonPlayerCharacter_1 = NonPlayerCharacter_1_1; + }, + function (Debug_1_1) { + Debug_1 = Debug_1_1; } ], execute: function () { @@ -626,19 +739,27 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka __extends(World, _super); function World(serverId, mapId) { var _this = _super.call(this) || this; + _this.terrainTexture = null; _this.lastLabelObjectId = null; + _this.isDisposed = false; _this.objects = {}; var attacksZ = 100; _this.attacks = new Attack_1.Attacks(); _this.attacks.position.z = attacksZ; _this.add(_this.attacks); var segments = 1; - var planeMesh = new THREE.Mesh(new THREE.PlaneGeometry(World.sideLength, World.sideLength, segments, segments), new THREE.ShaderMaterial(TerrainShader_1.terrainShader)); - _this.add(planeMesh); + _this.terrainMaterial = new THREE.ShaderMaterial(TerrainShader_1.createTerrainShader()); + _this.terrainMesh = new THREE.Mesh(new THREE.PlaneGeometry(World.sideLength, World.sideLength, segments, segments), _this.terrainMaterial); + _this.add(_this.terrainMesh); var textureLoader = new THREE.TextureLoader(); textureLoader.load("terrain/" + serverId + "/" + mapId, function (texture) { + if (_this.isDisposed) { + texture.dispose(); + return; + } texture.magFilter = THREE.NearestFilter; - TerrainShader_1.terrainShader.uniforms.tColor.value = texture; + _this.terrainTexture = texture; + _this.terrainMaterial.uniforms.tColor.value = texture; }); return _this; } @@ -671,11 +792,11 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka _a.sent(); return [3, 1]; case 3: - console.debug("Adding npc", npcData); + Debug_1.logDebug("Adding npc", npcData); this.addNpc(npcData); return [3, 5]; case 4: - console.debug("Updating npc", npcData); + Debug_1.logDebug("Updating npc", npcData); obj.respawn(npcData); _a.label = 5; case 5: return [2]; @@ -700,11 +821,11 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka _a.sent(); return [3, 1]; case 3: - console.debug("Adding player", playerData); + Debug_1.logDebug("Adding player", playerData); this.addPlayer(playerData); return [3, 5]; case 4: - console.debug("Updating player", playerData, obj.data); + Debug_1.logDebug("Updating player", playerData, obj.data); obj.respawn(playerData); _a.label = 5; case 5: return [2]; @@ -749,7 +870,27 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka } }; World.prototype.dispose = function () { - delete this.objects; + var _a; + if (this.isDisposed) { + return; + } + this.isDisposed = true; + this.lastLabelObjectId = null; + for (var id in this.objects) { + if (this.objects.hasOwnProperty(id)) { + var object = this.objects[id]; + this.remove(object); + object.dispose(); + } + } + this.objects = {}; + this.remove(this.attacks); + this.attacks.dispose(); + this.remove(this.terrainMesh); + this.terrainMesh.geometry.dispose(); + this.terrainMaterial.dispose(); + (_a = this.terrainTexture) === null || _a === void 0 ? void 0 : _a.dispose(); + this.terrainTexture = null; }; World.prototype.highlightPlayerByName = function (playerName) { for (var id in this.objects) { @@ -791,14 +932,20 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka } }; World.prototype.onSizeChanged = function (newSize) { - TerrainShader_1.terrainShader.uniforms.tPixelSize.value = World.sideLength / newSize; + this.terrainMaterial.uniforms.tPixelSize.value = World.sideLength / newSize; }; World.prototype.addNpc = function (data) { + if (this.isDisposed) { + return; + } var npc = new NonPlayerCharacter_1.NonPlayerCharacter(data); this.addObjectMesh(npc); npc.respawn(data); }; World.prototype.addPlayer = function (data) { + if (this.isDisposed) { + return; + } var player = new Player_1.Player(data); this.addObjectMesh(player); player.respawn(data); @@ -808,9 +955,13 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka if (mesh === undefined || mesh === null) { return; } - console.debug("Removing object", mesh.data); + Debug_1.logDebug("Removing object", mesh.data); this.remove(mesh); delete this.objects[objectId]; + if (this.lastLabelObjectId === objectId) { + this.lastLabelObjectId = null; + } + mesh.dispose(); }; World.prototype.getObjectById = function (objectId) { return this.objects[objectId]; @@ -823,14 +974,14 @@ System.register("World", ["three", "Attack", "TerrainShader", "Player", "Attacka World.rotationAnimationId = 122; return World; }(THREE.Object3D)); - exports_10("World", World); + exports_11("World", World); } }; }); -System.register("WorldObjectPicker", ["three"], function (exports_11, context_11) { +System.register("WorldObjectPicker", ["three"], function (exports_12, context_12) { "use strict"; var THREE, isGameObject, WorldObjectPicker; - var __moduleName = context_11 && context_11.id; + var __moduleName = context_12 && context_12.id; return { setters: [ function (THREE_8) { @@ -909,14 +1060,14 @@ System.register("WorldObjectPicker", ["three"], function (exports_11, context_11 WorldObjectPicker.hoverThresholdSquared = 16; return WorldObjectPicker; }()); - exports_11("WorldObjectPicker", WorldObjectPicker); + exports_12("WorldObjectPicker", WorldObjectPicker); } }; }); -System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], function (exports_12, context_12) { +System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], function (exports_13, context_13) { "use strict"; var THREE, tween_3, WorldObjectPicker_1, World_1, MapApp; - var __moduleName = context_12 && context_12.id; + var __moduleName = context_13 && context_13.id; return { setters: [ function (THREE_9) { @@ -939,6 +1090,7 @@ System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], func this.lastHighlightedId = null; this.isDisposing = false; this.isDisposed = false; + this.animationFrameId = null; this.stats = stats; this.container = mapContainer; this.onPickObjectHandler = onPickObjectHandler; @@ -967,7 +1119,6 @@ System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], func hideInfo(); } }, function (data) { return _this.onObjectHovered(data); }); - this.container.appendChild(this.renderer.domElement); this.animate(); } MapApp.prototype.highlightByName = function (playerName) { @@ -994,13 +1145,23 @@ System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], func } this.isDisposing = true; window.removeEventListener("resize", this.resizeEventListener); - var webGlRenderer = this.renderer; - if (webGlRenderer != null) { - webGlRenderer.dispose(); + if (this.animationFrameId !== null) { + cancelAnimationFrame(this.animationFrameId); + this.animationFrameId = null; } + this.picker.dispose(); this.scene.remove(this.world); this.world.dispose(); this.world = null; + var canvas = this.renderer.domElement; + var webGlRenderer = this.renderer; + if (webGlRenderer != null) { + webGlRenderer.dispose(); + webGlRenderer.forceContextLoss(); + } + if (canvas.parentNode !== null) { + canvas.parentNode.removeChild(canvas); + } this.renderer = null; this.isDisposing = false; this.isDisposed = true; @@ -1011,7 +1172,7 @@ System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], func if (this.isDisposing || this.isDisposed) { return; } - requestAnimationFrame(function () { return _this.animate(time); }); + this.animationFrameId = requestAnimationFrame(function (frameTime) { return _this.animate(frameTime); }); (_a = this.stats) === null || _a === void 0 ? void 0 : _a.update(); tween_3.default.update(time); this.world.update(); @@ -1052,7 +1213,7 @@ System.register("MapApp", ["three", "tween", "WorldObjectPicker", "World"], func }; return MapApp; }()); - exports_12("MapApp", MapApp); + exports_13("MapApp", MapApp); } }; }); diff --git a/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js.map b/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js.map index b673d52fe..1857a5b70 100644 --- a/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js.map +++ b/src/Web/Map/wwwroot/js/MUnique.OpenMU.Web.Map.js.map @@ -1 +1 @@ -{"version":3,"file":"MUnique.OpenMU.Web.Map.js","sourceRoot":"","sources":["../../Scripts/livemap/Queue.ts","../../Scripts/livemap/Types.ts","../../Scripts/livemap/GameObject.ts","../../Scripts/livemap/Attack.ts","../../Scripts/livemap/NameLabel.ts","../../Scripts/livemap/Attackable.ts","../../Scripts/livemap/TerrainShader.ts","../../Scripts/livemap/Player.ts","../../Scripts/livemap/NonPlayerCharacter.ts","../../Scripts/livemap/World.ts","../../Scripts/livemap/WorldObjectPicker.ts","../../Scripts/livemap/MapApp.ts","../../Scripts/livemap/Stats.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"MUnique.OpenMU.Web.Map.js","sourceRoot":"","sources":["../../Scripts/livemap/Stats.ts","../../Scripts/livemap/Queue.ts","../../Scripts/livemap/Types.ts","../../Scripts/livemap/GameObject.ts","../../Scripts/livemap/Attack.ts","../../Scripts/livemap/NameLabel.ts","../../Scripts/livemap/Attackable.ts","../../Scripts/livemap/Debug.ts","../../Scripts/livemap/TerrainShader.ts","../../Scripts/livemap/Player.ts","../../Scripts/livemap/NonPlayerCharacter.ts","../../Scripts/livemap/World.ts","../../Scripts/livemap/WorldObjectPicker.ts","../../Scripts/livemap/MapApp.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/Web/Map/wwwroot/js/map-launcher.js b/src/Web/Map/wwwroot/js/map-launcher.js index 4fe51fbeb..a06c7320a 100644 --- a/src/Web/Map/wwwroot/js/map-launcher.js +++ b/src/Web/Map/wwwroot/js/map-launcher.js @@ -2,6 +2,11 @@ window.mapApps = {}; +// Keeps track of the created maps, so that their loading can be cancelled when +// the page is left before the MapApp module resolved, and so that the stats +// element can be removed again when the map is disposed. +window.mapAppRegistrations = {}; + function CreateMap(serverId, mapId, containerId, appId) { console.debug("Creating map; serverId: ", serverId, ", mapId: ", mapId, ", containerId: ", containerId, ", appId: ", appId); @@ -12,9 +17,19 @@ function CreateMap(serverId, mapId, containerId, appId) { document.getElementById(containerId).after(stats.domElement); } + const registration = { isCancelled: false, stats: stats }; + window.mapAppRegistrations[appId] = registration; + System.import("MapApp") .then((module) => { - console.log('MapApp module resolved'); + console.debug('MapApp module resolved'); + if (registration.isCancelled) { + // The map was disposed before the module was loaded. Creating the + // MapApp now would start a rendering loop which never stops. + console.debug('MapApp creation was cancelled'); + return; + } + window.mapApps[serverId] = window.mapApps[serverId] || {}; window.mapApps[serverId][mapId] = new module.MapApp(stats, serverId, mapId, document.getElementById(containerId), (data) => { const info = document.getElementById("selected_info"); @@ -42,6 +57,15 @@ function CreateMap(serverId, mapId, containerId, appId) { function DisposeMap(identifier) { console.debug("Disposing map; containerId: ", identifier); + const registration = window.mapAppRegistrations[identifier]; + if (registration) { + // If the MapApp module didn't resolve yet, this prevents the creation of a + // MapApp which would never be disposed. + registration.isCancelled = true; + delete window.mapAppRegistrations[identifier]; + RemoveStatsElement(registration.stats); + } + let map = window[identifier]; if (map) { map.dispose(); @@ -58,6 +82,13 @@ function DisposeMap(identifier) { } } +function RemoveStatsElement(stats) { + const element = stats && stats.domElement; + if (element && element.parentNode) { + element.parentNode.removeChild(element); + } +} + function HighlightFollowedPlayer(serverId, mapId, playerName) { var app = window.mapApps && window.mapApps[serverId] && window.mapApps[serverId][mapId]; if (app && app.highlightByName) {