Skip to content

Commit 0081a06

Browse files
committed
Refactor cache loaders into its own type.
1 parent 3600e07 commit 0081a06

File tree

6 files changed

+82
-67
lines changed

6 files changed

+82
-67
lines changed

src/mapviewer/MapViewer.ts

Lines changed: 7 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,8 @@ import { URLSearchParamsInit } from "react-router-dom";
33

44
import { OsrsMenuEntry } from "../components/rs/menu/OsrsMenu";
55
import { MenuTargetType } from "../rs/MenuEntry";
6-
import { CacheSystem } from "../rs/cache/CacheSystem";
7-
import { CacheLoaderFactory, getCacheLoaderFactory } from "../rs/cache/loader/CacheLoaderFactory";
8-
import { BasTypeLoader } from "../rs/config/bastype/BasTypeLoader";
9-
import { LocTypeLoader } from "../rs/config/loctype/LocTypeLoader";
10-
import { NpcTypeLoader } from "../rs/config/npctype/NpcTypeLoader";
11-
import { ObjTypeLoader } from "../rs/config/objtype/ObjTypeLoader";
12-
import { SeqTypeLoader } from "../rs/config/seqtype/SeqTypeLoader";
13-
import { VarManager } from "../rs/config/vartype/VarManager";
14-
import { MapFileIndex, getMapSquareId } from "../rs/map/MapFileIndex";
15-
import { SeqFrameLoader } from "../rs/model/seq/SeqFrameLoader";
6+
import { getMapSquareId } from "../rs/map/MapFileIndex";
167
import { Pathfinder } from "../rs/pathfinder/Pathfinder";
17-
import { TextureLoader } from "../rs/texture/TextureLoader";
188
import { isTouchDevice, isWallpaperEngine } from "../util/DeviceUtil";
199
import { CacheList, LoadedCache } from "../util/Caches";
2010
import { Camera, CameraView, ProjectionType } from "../renderer/Camera";
@@ -25,6 +15,7 @@ import { RendererType, createRenderer } from "../renderer/Renderers";
2515
import { NpcSpawn } from "../data/npc/NpcSpawn";
2616
import { ObjSpawn } from "../data/obj/ObjSpawn";
2717
import { RenderDataWorkerPool } from "../worker/RenderDataWorkerPool";
18+
import { CacheLoaders } from "../rs/cache/CacheLoaders";
2819

2920
const DEFAULT_RENDER_DISTANCE = isWallpaperEngine ? 512 : 128;
3021

@@ -38,24 +29,8 @@ export class MapViewer {
3829

3930
renderer: MapViewerRenderer;
4031

41-
// Cache
4232
loadedCache!: LoadedCache;
43-
cacheSystem!: CacheSystem;
44-
loaderFactory!: CacheLoaderFactory;
45-
46-
textureLoader!: TextureLoader;
47-
seqTypeLoader!: SeqTypeLoader;
48-
seqFrameLoader!: SeqFrameLoader;
49-
50-
locTypeLoader!: LocTypeLoader;
51-
objTypeLoader!: ObjTypeLoader;
52-
npcTypeLoader!: NpcTypeLoader;
53-
54-
basTypeLoader!: BasTypeLoader;
55-
56-
varManager!: VarManager;
57-
58-
mapFileIndex!: MapFileIndex;
33+
cacheLoaders: CacheLoaders;
5934

6035
isNewTextureAnim: boolean = false;
6136

@@ -98,7 +73,10 @@ export class MapViewer {
9873
rendererType: RendererType,
9974
cache: LoadedCache,
10075
) {
76+
this.loadedCache = cache;
77+
this.cacheLoaders = new CacheLoaders(cache);
10178
this.renderer = createRenderer(rendererType, this);
79+
this.isNewTextureAnim = cache.info.game === "runescape" && cache.info.revision >= 681;
10280
this.initCache(cache);
10381
}
10482

@@ -178,29 +156,9 @@ export class MapViewer {
178156
}
179157

180158
initCache(cache: LoadedCache): void {
181-
this.loadedCache = cache;
182-
this.cacheSystem = CacheSystem.fromFiles(cache.type, cache.files);
183-
this.loaderFactory = getCacheLoaderFactory(cache.info, this.cacheSystem);
184159
this.workerPool.initCache(cache, this.objSpawns, this.npcSpawns);
185160
this.clearMapImageUrls();
186161

187-
this.textureLoader = this.loaderFactory.getTextureLoader();
188-
this.seqTypeLoader = this.loaderFactory.getSeqTypeLoader();
189-
this.seqFrameLoader = this.loaderFactory.getSeqFrameLoader();
190-
this.locTypeLoader = this.loaderFactory.getLocTypeLoader();
191-
this.objTypeLoader = this.loaderFactory.getObjTypeLoader();
192-
this.npcTypeLoader = this.loaderFactory.getNpcTypeLoader();
193-
this.basTypeLoader = this.loaderFactory.getBasTypeLoader();
194-
195-
this.varManager = new VarManager(this.loaderFactory.getVarBitTypeLoader());
196-
const questTypeLoader = this.loaderFactory.getQuestTypeLoader();
197-
if (questTypeLoader) {
198-
this.varManager.setQuestsCompleted(questTypeLoader);
199-
}
200-
201-
const mapFileLoader = this.loaderFactory.getMapFileLoader();
202-
this.mapFileIndex = mapFileLoader.mapFileIndex;
203-
204162
this.isNewTextureAnim = cache.info.game === "runescape" && cache.info.revision >= 681;
205163

206164
this.renderer.initCache();
@@ -277,7 +235,7 @@ export class MapViewer {
277235
};
278236

279237
updateVars(): void {
280-
this.workerPool.setVars(this.varManager.values);
238+
this.workerPool.setVars(this.cacheLoaders.varManager.values);
281239
}
282240

283241
static getCachedMapImageUrl(mapX: number, mapY: number): string {

src/mapviewer/MapViewerControls.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ export const MapViewerControls = memo(
363363
onChange: setVarValue,
364364
},
365365
Set: button(() => {
366-
const varManager = mapViewer.varManager;
366+
const varManager = mapViewer.cacheLoaders.varManager;
367367
let updated = false;
368368
if (varType === VarType.VARP) {
369369
updated = varManager.setVarp(varId, varValue);
@@ -376,7 +376,7 @@ export const MapViewerControls = memo(
376376
}
377377
}),
378378
Clear: button(() => {
379-
mapViewer.varManager.clear();
379+
mapViewer.cacheLoaders.varManager.clear();
380380
mapViewer.updateVars();
381381
mapViewer.renderer.mapManager.clearMaps();
382382
}),

src/mapviewer/MapViewerRenderer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export abstract class MapViewerRenderer<T extends MapSquare = MapSquare> extends
3030

3131
initCache(): void {
3232
this.mapManager.init(
33-
this.mapViewer.mapFileIndex,
33+
this.mapViewer.cacheLoaders.mapFileIndex,
3434
SceneBuilder.fillEmptyTerrain(this.mapViewer.loadedCache.info),
3535
);
3636
this.mapManager.update(

src/renderer/webgl/WebGLRenderer.ts

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
createMainProgram,
3737
createNpcProgram,
3838
} from "./shaders/Shaders";
39+
import { CacheLoaders } from "../../rs/cache/CacheLoaders";
3940

4041
const MAX_TEXTURES = 2048;
4142
const TEXTURE_SIZE = 128;
@@ -78,6 +79,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
7879
type: RendererType = WEBGL;
7980

8081
dataLoader = new SdMapDataLoader();
82+
cacheLoaders: CacheLoaders;
8183

8284
app!: PicoApp;
8385
gl!: WebGL2RenderingContext;
@@ -164,6 +166,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
164166

165167
constructor(public mapViewer: MapViewer) {
166168
super(mapViewer);
169+
this.cacheLoaders = mapViewer.cacheLoaders;
167170
this.interactions = new Array(INTERACT_BUFFER_COUNT);
168171
for (let i = 0; i < INTERACT_BUFFER_COUNT; i++) {
169172
this.interactions[i] = new Interactions(INTERACTION_RADIUS);
@@ -324,7 +327,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
324327
}
325328

326329
initTextures(): void {
327-
const textureLoader = this.mapViewer.textureLoader;
330+
const textureLoader = this.cacheLoaders.textureLoader;
328331

329332
const allTextureIds = textureLoader.getTextureIds();
330333

@@ -366,7 +369,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
366369
for (let i = 0; i < Math.min(textureCount, maxPreloadTextures); i++) {
367370
const textureId = this.textureIds[i];
368371
try {
369-
const texturePixels = this.mapViewer.textureLoader.getPixelsArgb(
372+
const texturePixels = this.cacheLoaders.textureLoader.getPixelsArgb(
370373
textureId,
371374
TEXTURE_SIZE,
372375
true,
@@ -492,7 +495,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
492495
for (let i = 0; i < this.textureIds.length; i++) {
493496
const id = this.textureIds[i];
494497
try {
495-
const material = this.mapViewer.textureLoader.getMaterial(id);
498+
const material = this.cacheLoaders.textureLoader.getMaterial(id);
496499

497500
const index = (i + 1) * 4;
498501
data[index] = material.animU;
@@ -674,9 +677,9 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
674677
mapX,
675678
mapY,
676679
WebGLMapSquare.load(
677-
this.mapViewer.seqTypeLoader,
678-
this.mapViewer.npcTypeLoader,
679-
this.mapViewer.basTypeLoader,
680+
this.cacheLoaders.seqTypeLoader,
681+
this.cacheLoaders.npcTypeLoader,
682+
this.cacheLoaders.basTypeLoader,
680683
this.app,
681684
mainProgram,
682685
mainAlphaProgram,
@@ -987,8 +990,8 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
987990
tickPass(time: number, ticksElapsed: number, clientTicksElapsed: number): void {
988991
const cycle = time / 0.02;
989992

990-
const seqFrameLoader = this.mapViewer.seqFrameLoader;
991-
const seqTypeLoader = this.mapViewer.seqTypeLoader;
993+
const seqFrameLoader = this.cacheLoaders.seqFrameLoader;
994+
const seqTypeLoader = this.cacheLoaders.seqTypeLoader;
992995

993996
const pathfinder = this.mapViewer.pathfinder;
994997

@@ -1298,7 +1301,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
12981301
const interactId = this.interactBuffer[index];
12991302
const interactType = this.interactBuffer[index + 2];
13001303
if (interactType === InteractType.LOC) {
1301-
const locType = this.mapViewer.locTypeLoader.load(interactId);
1304+
const locType = this.cacheLoaders.locTypeLoader.load(interactId);
13021305
if (locType.name === "null" && !this.mapViewer.debugId) {
13031306
continue;
13041307
}
@@ -1330,7 +1333,7 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
13301333
onClick: this.mapViewer.onExamine,
13311334
});
13321335
} else if (interactType === InteractType.OBJ) {
1333-
const objType = this.mapViewer.objTypeLoader.load(interactId);
1336+
const objType = this.cacheLoaders.objTypeLoader.load(interactId);
13341337
if (objType.name === "null" && !this.mapViewer.debugId) {
13351338
continue;
13361339
}
@@ -1362,11 +1365,11 @@ export class WebGLRenderer extends MapViewerRenderer<WebGLMapSquare> {
13621365
onClick: this.mapViewer.onExamine,
13631366
});
13641367
} else if (interactType === InteractType.NPC) {
1365-
let npcType = this.mapViewer.npcTypeLoader.load(interactId);
1368+
let npcType = this.cacheLoaders.npcTypeLoader.load(interactId);
13661369
if (npcType.transforms) {
13671370
const transformed = npcType.transform(
1368-
this.mapViewer.varManager,
1369-
this.mapViewer.npcTypeLoader,
1371+
this.cacheLoaders.varManager,
1372+
this.cacheLoaders.npcTypeLoader,
13701373
);
13711374
if (!transformed) {
13721375
continue;

src/renderer/webgpu/WebGPURenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export class WebGPURenderer extends MapViewerRenderer {
121121
}
122122

123123
initTextures(): void {
124-
const textureLoader = this.mapViewer.textureLoader;
124+
const textureLoader = this.mapViewer.cacheLoaders.textureLoader;
125125

126126
const textureIds = textureLoader
127127
.getTextureIds()
@@ -149,7 +149,7 @@ export class WebGPURenderer extends MapViewerRenderer {
149149
for (let i = 0; i < textureIds.length; i++) {
150150
const textureId = textureIds[i];
151151
try {
152-
const texturePixels = this.mapViewer.textureLoader.getPixelsArgb(
152+
const texturePixels = this.mapViewer.cacheLoaders.textureLoader.getPixelsArgb(
153153
textureId,
154154
textureSize,
155155
true,

src/rs/cache/CacheLoaders.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { CacheSystem } from "./CacheSystem";
2+
import { CacheLoaderFactory, getCacheLoaderFactory } from "./loader/CacheLoaderFactory";
3+
import { BasTypeLoader } from "../config/bastype/BasTypeLoader";
4+
import { LocTypeLoader } from "../config/loctype/LocTypeLoader";
5+
import { NpcTypeLoader } from "../config/npctype/NpcTypeLoader";
6+
import { ObjTypeLoader } from "../config/objtype/ObjTypeLoader";
7+
import { SeqTypeLoader } from "../config/seqtype/SeqTypeLoader";
8+
import { VarManager } from "../config/vartype/VarManager";
9+
import { MapFileIndex } from "../map/MapFileIndex";
10+
import { SeqFrameLoader } from "../model/seq/SeqFrameLoader";
11+
import { TextureLoader } from "../texture/TextureLoader";
12+
import { LoadedCache } from "../../util/Caches";
13+
14+
export class CacheLoaders {
15+
// Cache
16+
cacheSystem!: CacheSystem;
17+
loaderFactory!: CacheLoaderFactory;
18+
19+
textureLoader!: TextureLoader;
20+
seqTypeLoader!: SeqTypeLoader;
21+
seqFrameLoader!: SeqFrameLoader;
22+
23+
locTypeLoader!: LocTypeLoader;
24+
objTypeLoader!: ObjTypeLoader;
25+
npcTypeLoader!: NpcTypeLoader;
26+
27+
basTypeLoader!: BasTypeLoader;
28+
29+
varManager!: VarManager;
30+
31+
mapFileIndex!: MapFileIndex;
32+
33+
constructor(cache: LoadedCache) {
34+
this.cacheSystem = CacheSystem.fromFiles(cache.type, cache.files);
35+
this.loaderFactory = getCacheLoaderFactory(cache.info, this.cacheSystem);
36+
37+
this.textureLoader = this.loaderFactory.getTextureLoader();
38+
this.seqTypeLoader = this.loaderFactory.getSeqTypeLoader();
39+
this.seqFrameLoader = this.loaderFactory.getSeqFrameLoader();
40+
this.locTypeLoader = this.loaderFactory.getLocTypeLoader();
41+
this.objTypeLoader = this.loaderFactory.getObjTypeLoader();
42+
this.npcTypeLoader = this.loaderFactory.getNpcTypeLoader();
43+
this.basTypeLoader = this.loaderFactory.getBasTypeLoader();
44+
45+
this.varManager = new VarManager(this.loaderFactory.getVarBitTypeLoader());
46+
const questTypeLoader = this.loaderFactory.getQuestTypeLoader();
47+
if (questTypeLoader) {
48+
this.varManager.setQuestsCompleted(questTypeLoader);
49+
}
50+
51+
const mapFileLoader = this.loaderFactory.getMapFileLoader();
52+
this.mapFileIndex = mapFileLoader.mapFileIndex;
53+
}
54+
}

0 commit comments

Comments
 (0)