From 0906475729cfb7d048f884cad2ba76fb86f72bb3 Mon Sep 17 00:00:00 2001 From: scamiv <6170744+scamiv@users.noreply.github.com> Date: Sat, 9 May 2026 01:57:32 +0200 Subject: [PATCH] Restore world-stable name scaling --- src/client/graphics/layers/NameLayer.ts | 12 +++++++----- src/client/graphics/layers/NameLayerLayout.ts | 7 +++++++ tests/NameLayer.test.ts | 6 ++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/client/graphics/layers/NameLayer.ts b/src/client/graphics/layers/NameLayer.ts index d88a6082c..92717bb2c 100644 --- a/src/client/graphics/layers/NameLayer.ts +++ b/src/client/graphics/layers/NameLayer.ts @@ -25,8 +25,8 @@ import { NameLayerAssets } from "./NameLayerAssets"; import { computeNameLayerFontSize, computeNameLayerLayout, - computeNameLayerScale, computeNameLayerVisible, + computeNameLayerWorldScale, computeTraitorFlashAlpha, replaceUnsupportedNameGlyphs, } from "./NameLayerLayout"; @@ -347,11 +347,13 @@ export class NameLayer implements Layer { const screenPos = this.transformHandler.worldToCanvasCoordinates( render.location, ); - render.container.position.set( - Math.round(screenPos.x), - Math.round(screenPos.y), + render.container.position.set(screenPos.x, screenPos.y); + render.container.scale.set( + computeNameLayerWorldScale( + render.baseSize, + this.transformHandler.scale, + ), ); - render.container.scale.set(computeNameLayerScale(render.baseSize)); this.updateTraitorAlpha(render, now); } } diff --git a/src/client/graphics/layers/NameLayerLayout.ts b/src/client/graphics/layers/NameLayerLayout.ts index f0181fd33..959ad0c3b 100644 --- a/src/client/graphics/layers/NameLayerLayout.ts +++ b/src/client/graphics/layers/NameLayerLayout.ts @@ -63,6 +63,13 @@ export function computeNameLayerScale(baseSize: number): number { return Math.min(baseSize * 0.25, 3); } +export function computeNameLayerWorldScale( + baseSize: number, + transformScale: number, +): number { + return computeNameLayerScale(baseSize) * transformScale; +} + export function computeNameLayerFontSize(baseSize: number): number { return Math.max(4, Math.floor(baseSize * 0.4)); } diff --git a/tests/NameLayer.test.ts b/tests/NameLayer.test.ts index af22f397f..78c8a6192 100644 --- a/tests/NameLayer.test.ts +++ b/tests/NameLayer.test.ts @@ -4,6 +4,7 @@ import { } from "../src/client/graphics/PlayerIcons"; import { computeNameLayerLayout, + computeNameLayerWorldScale, computeTraitorFlashAlpha, computeTraitorFlashDurationSeconds, replaceUnsupportedNameGlyphs, @@ -96,6 +97,11 @@ describe("NameLayerLayout", () => { expect(layout.width).toBe(60); }); + test("combines local label scale with camera scale for world-stable labels", () => { + expect(computeNameLayerWorldScale(8, 2)).toBeCloseTo(4); + expect(computeNameLayerWorldScale(20, 2)).toBeCloseTo(6); + }); + test("matches traitor flash duration thresholds and alpha extrema", () => { expect(computeTraitorFlashDurationSeconds(156)).toBeNull(); expect(computeTraitorFlashDurationSeconds(150)).toBeCloseTo(1);