diff --git a/apps/game/src/systems/Lighting.ts b/apps/game/src/systems/Lighting.ts index 3ccd199..3068406 100644 --- a/apps/game/src/systems/Lighting.ts +++ b/apps/game/src/systems/Lighting.ts @@ -56,6 +56,12 @@ const HAZARD_SPOT_RADIUS = 1.6; const HAZARD_SPOT_ALPHA = 0.22; +/** + * Подъём центра лампы героя от ног к телу, в юнитах по обеим мировым осям + * (в изометрии это «вверх по экрану»: 0.5+0.5 юнита ≈ 8 px при tileH 16). + */ +const LAMP_LIFT = 0.5; + /** Кап тёмных пятен — под пул движка (maxDarkSpots, по умолчанию 16). */ const MAX_DARK_SPOTS = 16; @@ -255,10 +261,13 @@ // Лампа в тёмной области или ночью (вечерняя улица тоже темна). if (lamp && (isDarkAmbient(this.deps.area.lighting?.ambient) || night >= NIGHT_SOURCE_FACTOR)) { // Позиция героя уже в мировых юнитах: центры тайлов = tileToWorld(x+0.5), - // поэтому отнимаем 0.5 — источник ляжет ровно на героя. + // поэтому отнимаем 0.5 — источник встаёт на якорь героя (ноги). Спрайт + // героя рисуется выше якоря (16×24, низ = якорь), поэтому поднимаем + // центр лампы к телу: в изометрии «вверх по экрану» = минус по обеим + // мировым осям поровну (экранный Y = (x+y)·tileH/2). const hero = this.deps.heroPos(); - this.lampAt.x = hero.x - 0.5; - this.lampAt.y = hero.y - 0.5; + this.lampAt.x = hero.x - 0.5 - LAMP_LIFT; + this.lampAt.y = hero.y - 0.5 - LAMP_LIFT; const d = this.lampDef; d.radius = lamp.radius; d.color = lamp.color;