@@ -5882,6 +5882,7 @@ System.register("data/CsfFile", [], function (t, e) {
58825882 }
58835883 fromVirtualFile(e) {
58845884 let t = e.stream;
5885+ t.seek(0);
58855886 (t.readInt32(), t.readInt32());
58865887 var i = t.readInt32();
58875888 (t.readInt32(), t.readInt32(), (this.language = t.readInt32()));
@@ -65197,17 +65198,26 @@ System.register(
6519765198 timeStamp: t.timeStamp
6519865199 };
6519965200 }
65200- computeTouchPosition(e ) {
65201- let t = {
65202- x: (e.pageX - this.canvasMetrics.x) * (this.canvasMetrics.scaleX ?? 1),
65203- y: (e.pageY - this.canvasMetrics.y) * (this.canvasMetrics.scaleY ?? 1)
65201+ computeCanvasPosition(e, t ) {
65202+ let r = {
65203+ x: (e - this.canvasMetrics.x) * (this.canvasMetrics.scaleX ?? 1),
65204+ y: (t - this.canvasMetrics.y) * (this.canvasMetrics.scaleY ?? 1)
6520465205 };
6520565206 return (
65206- (t .x = i.clamp(t .x, 0, this.canvasMetrics.width - 1)),
65207- (t .y = i.clamp(t .y, 0, this.canvasMetrics.height - 1)),
65208- t
65207+ (r .x = i.clamp(r .x, 0, this.canvasMetrics.width - 1)),
65208+ (r .y = i.clamp(r .y, 0, this.canvasMetrics.height - 1)),
65209+ r
6520965210 );
6521065211 }
65212+ computeTouchPosition(e) {
65213+ return this.computeCanvasPosition(e.pageX, e.pageY);
65214+ }
65215+ computeMousePosition(e) {
65216+ var t = this.document?.defaultView,
65217+ r = "number" == typeof e.pageX ? e.pageX : (e.clientX ?? 0) + (t?.scrollX ?? 0),
65218+ s = "number" == typeof e.pageY ? e.pageY : (e.clientY ?? 0) + (t?.scrollY ?? 0);
65219+ return this.computeCanvasPosition(r, s);
65220+ }
6521165221 onMouseEvent(t, r) {
6521265222 let s = this.getPointerPosition(r);
6521365223 var a = this.findObjectUnderPointer(s);
@@ -65246,10 +65256,9 @@ System.register(
6524665256 getPointerPosition(e) {
6524765257 return this.document.pointerLockElement
6524865258 ? this.lockModePointer
65249- : {
65250- x: e.isTouch ? e.offsetX : e.offsetX * (this.canvasMetrics.scaleX ?? 1),
65251- y: e.isTouch ? e.offsetY : e.offsetY * (this.canvasMetrics.scaleY ?? 1)
65252- };
65259+ : e.isTouch
65260+ ? { x: e.offsetX, y: e.offsetY }
65261+ : this.computeMousePosition(e);
6525365262 }
6525465263 findObjectUnderPointer(t) {
6525565264 let r = this.renderer.getScenes(),
@@ -112380,16 +112389,20 @@ System.register(
112380112389 (G.ImageContext.cdnBaseUrl = this.gameResConfig.isCdn() ? this.gameResConfig.getCdnBaseUrl() : void 0),
112381112390 (G.ImageContext.vfs = u.Engine.vfs));
112382112391 try {
112383- let e = new X.CsfFile(u.Engine.vfs.openFile(u.Engine.getFileNameVariant("ra2.csf")));
112392+ let e,
112393+ n = u.Engine.getFileNameVariant("ra2.csf"),
112394+ o = this.getStringsFileLayers(n);
112395+ if (!o.length) throw new Error(`String file "${n}" not found in VFS`);
112396+ e = new X.CsfFile(this.resetVirtualFileStream(o[0].file));
112384112397 var l = e.getIsoLocale();
112385112398 if (void 0 !== l && l !== t)
112386112399 try {
112387112400 ((i = await this.loadTranslations(l)), (this.locale = l));
112388112401 } catch (e) {
112389112402 console.warn(`Failed to load translation ${l}. Falling back to ${t}.`, e);
112390112403 }
112391- ((r = this. strings = new R.Strings(e )),
112392- r.fromJson(i ),
112404+ (1 < o.length && console.info("[ strings] layered string sources", o.map((e) => e.archiveName )),
112405+ (r = this.strings = this.buildLayeredStrings(o, i) ),
112393112406 u.Engine.loadRules(),
112394112407 this.sentry?.configureScope((e) => {
112395112408 (e.setTag("mod", u.Engine.getActiveMod() || "<none>"),
@@ -112424,6 +112437,36 @@ System.register(
112424112437 }
112425112438 (await e, a.destroy(), (this.splashScreen = void 0), this.initRouting());
112426112439 }
112440+ resetVirtualFileStream(e) {
112441+ return (e?.stream?.seek?.(0), e);
112442+ }
112443+ getStringsFileLayers(e) {
112444+ let t = [],
112445+ i = u.Engine.vfs,
112446+ r = i?.archivesByPriority,
112447+ s = i?.allArchives;
112448+ if (!Array.isArray(r) || !s?.entries) return t;
112449+ let a = new Map();
112450+ for (var [n, o] of s.entries()) a.set(o, n);
112451+ for (var l of r)
112452+ try {
112453+ if (l?.containsFile?.(e)) {
112454+ var c = l.openFile(e);
112455+ (this.resetVirtualFileStream(c),
112456+ t.push({ archiveName: a.get(l) || "(unknown)", file: c }));
112457+ }
112458+ } catch (t) {
112459+ throw new Error(`Failed to read string file "${e}" from VFS archive "${a.get(l) || "(unknown)"}"`, {
112460+ cause: t
112461+ });
112462+ }
112463+ return t;
112464+ }
112465+ buildLayeredStrings(e, t) {
112466+ let i = new R.Strings();
112467+ for (var r of [...e].reverse()) i.fromCsf(new X.CsfFile(this.resetVirtualFileStream(r.file)));
112468+ return (i.fromJson(t), i);
112469+ }
112427112470 async loadTranslations(e) {
112428112471 return await new T.ResourceLoader(ie.resPath).loadJson(`locale/${e}.json?v=` + this.getVersion());
112429112472 }
0 commit comments