From 2448815113c4fa9ce25b766d4930cb769d3af76a Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 5 Sep 2026 12:04:05 +0500 Subject: [PATCH] feat: update logos, add logo background --- .../src/lib/components/duck/DuckAvatar.svelte | 42 ++++- apps/web/src/lib/duck/logos.ts | 158 +++++++++++------- apps/web/src/lib/duck/wardrobe.ts | 14 +- 3 files changed, 144 insertions(+), 70 deletions(-) diff --git a/apps/web/src/lib/components/duck/DuckAvatar.svelte b/apps/web/src/lib/components/duck/DuckAvatar.svelte index d58fbdf..855f023 100644 --- a/apps/web/src/lib/components/duck/DuckAvatar.svelte +++ b/apps/web/src/lib/components/duck/DuckAvatar.svelte @@ -2,11 +2,27 @@ import { outfit, duckState } from '$lib/duck/state.svelte'; import { capById, teeById, TEE_LOGO } from '$lib/duck/wardrobe'; import { playQuack } from '$lib/duck/quack'; + import { logoById, logoBackdrop } from '$lib/duck/logos'; import Logo from './Logo.svelte'; const cap = $derived(capById(outfit.cap)); const tee = $derived(teeById(outfit.tee)); + // фактический цвет логотипа и подложка-«стикер», если он сливается с тканью + const teeLogoDef = $derived(logoById(outfit.teeLogo)); + const capLogoDef = $derived(logoById(outfit.capLogo)); + const capMonoColor = $derived(cap.dark ? '#f8fafc' : '#0f172a'); + const teeBackdrop = $derived.by(() => { + if (!tee.img || !teeLogoDef) return null; + const colors = teeLogoDef.mono ? [tee.mono] : teeLogoDef.tints; + return logoBackdrop(tee.color, colors, TEE_LOGO.x, TEE_LOGO.y, TEE_LOGO.s); + }); + const capBackdrop = $derived.by(() => { + if (cap.id === 'none' || !capLogoDef) return null; + const colors = capLogoDef.mono ? [capMonoColor] : capLogoDef.tints; + return logoBackdrop(cap.color, colors, cap.logo.x, cap.logo.y, cap.logo.s); + }); + let quacking = $state(false); function poke() { @@ -31,6 +47,18 @@ {/if}