@
fix(pet-sprite): уникальные id градиентов спрайта — фикс «пропадающего» тела uid градиента питомца строился детерминированно (pg+level+mood+colorKey), поэтому два питомца с одинаковыми параметрами на одной странице получали совпадающие id. url(#id) заливки тела резолвился в чужой градиент (часто в display:none-вьюхе) → тело без заливки, видны только контур/усики/аура. Проявлялось «случайно» — только при совпадении параметров (нарратор на карте vs на экране победы в /quantik). Теперь uid — глобальный счётчик (pg1, pg2, …), коллизий нет. Чинит и /pet, и /dashboard, и игру. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> @
This commit is contained in:
@@ -5,6 +5,10 @@
|
||||
* dashboard.html используют window.PetSprite.render(...) — без дублей.
|
||||
*/
|
||||
(function () {
|
||||
// Счётчик для УНИКАЛЬНЫХ id градиентов/клипов спрайта. Иначе два питомца с
|
||||
// одинаковыми level/mood/colorKey дают совпадающие id, и url(#id) заливки тела
|
||||
// резолвится в чужой (возможно display:none) градиент → тело без заливки.
|
||||
let _petUidSeq = 0;
|
||||
const PET_PALETTES = {
|
||||
purple:'#9B5DE5', cyan:'#06D6E0', gold:'#F9C74F',
|
||||
red:'#F94144', green:'#38D95A', blue:'#4A90D9',
|
||||
@@ -24,7 +28,7 @@
|
||||
const col = PET_PALETTES[colorKey] || '#9B5DE5';
|
||||
const dark = shadeColor(col, -45);
|
||||
const light = shadeColor(col, 52);
|
||||
const uid = `pg${level}${mood[0]}${colorKey[0]}`;
|
||||
const uid = `pg${(++_petUidSeq).toString(36)}`;
|
||||
|
||||
const bodyPath = 'M55,22 C70,22 86,37 87,56 C89,75 78,94 55,97 C32,94 21,75 23,56 C24,37 40,22 55,22 Z';
|
||||
const eyeY = 52, eyeX1 = 40, eyeX2 = 70;
|
||||
|
||||
Reference in New Issue
Block a user