From b41ba4493bb73440b410e3c847b8d3506665fb9a Mon Sep 17 00:00:00 2001 From: Lncvrt Date: Sat, 4 Oct 2025 12:59:37 -0700 Subject: [PATCH] Update leaderboards --- src/app/assets/berries/AntiBerry.png | Bin 0 -> 4228 bytes src/app/assets/berries/BerryNoColor.png | Bin 0 -> 2133 bytes src/app/componets/RandomBerry.tsx | 49 ++++++++++++++++++++++++ src/app/leaderboards/Leaderboards.css | 4 +- src/app/leaderboards/page.tsx | 37 ++++++++++++++++++ 5 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/app/assets/berries/AntiBerry.png create mode 100644 src/app/assets/berries/BerryNoColor.png create mode 100644 src/app/componets/RandomBerry.tsx diff --git a/src/app/assets/berries/AntiBerry.png b/src/app/assets/berries/AntiBerry.png new file mode 100644 index 0000000000000000000000000000000000000000..ad727c22c87e8deb2b0c279afc03beec09f9cb86 GIT binary patch literal 4228 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 Wv1U^&%orFL7(8A5T-G@yGywoYqW!4= literal 0 HcmV?d00001 diff --git a/src/app/assets/berries/BerryNoColor.png b/src/app/assets/berries/BerryNoColor.png new file mode 100644 index 0000000000000000000000000000000000000000..3447a1a2faf9ab2e0357aabaa8cf13758a409bd2 GIT binary patch literal 2133 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 WBdw!k)A`Cl^_!=wpUXO@geCx<4r>Ge literal 0 HcmV?d00001 diff --git a/src/app/componets/RandomBerry.tsx b/src/app/componets/RandomBerry.tsx new file mode 100644 index 0000000..4657eeb --- /dev/null +++ b/src/app/componets/RandomBerry.tsx @@ -0,0 +1,49 @@ +import { useEffect, useRef } from 'react' +import Image from 'next/image' +import BerryNoColor from '../assets/berries/BerryNoColor.png' + +export default function RandomBerry () { + const canvasRef = useRef(null) + const imgRef = useRef(document.createElement('img')) + + useEffect(() => { + imgRef.current.src = BerryNoColor.src + const canvas = canvasRef.current + const ctx = canvas?.getContext('2d') + if (!canvas || !ctx) return + + canvas.width = 24 + canvas.height = 24 + + let frame: number + const frequency = 5 + + const update = () => { + const t = (performance.now() / 1000) * frequency + + ctx.clearRect(0, 0, canvas.width, canvas.height) + ctx.drawImage(imgRef.current, 0, 0, canvas.width, canvas.height) + + const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height) + const data = imageData.data + + for (let i = 0; i < data.length; i += 4) { + const gray = data[i] + const r = (Math.sin(t) * 0.5 + 0.5) * 255 * (gray / 255) + const g = (Math.sin(t + 2) * 0.5 + 0.5) * 255 * (gray / 255) + const b = (Math.sin(t + 4) * 0.5 + 0.5) * 255 * (gray / 255) + data[i] = r + data[i + 1] = g + data[i + 2] = b + } + + ctx.putImageData(imageData, 0, 0) + frame = requestAnimationFrame(update) + } + + imgRef.current.onload = () => update() + return () => cancelAnimationFrame(frame) + }, []) + + return +} diff --git a/src/app/leaderboards/Leaderboards.css b/src/app/leaderboards/Leaderboards.css index c5081fa..f0f7b03 100644 --- a/src/app/leaderboards/Leaderboards.css +++ b/src/app/leaderboards/Leaderboards.css @@ -29,7 +29,7 @@ } .dropdown-menu { - @apply absolute bottom-full mb-2 w-45 bg-[#242424] border border-[#484848] rounded-md shadow-lg hidden z-50; + @apply absolute bottom-full mb-2 w-55 bg-[#242424] border border-[#484848] rounded-md shadow-lg hidden z-50; } .dropdown-left .dropdown-menu { @@ -37,7 +37,7 @@ } .dropdown-right .dropdown-menu { - @apply right-0 w-40; + @apply right-0 w-42; } .dropdown-menu.open { diff --git a/src/app/leaderboards/page.tsx b/src/app/leaderboards/page.tsx index 4f12ff0..9c44105 100644 --- a/src/app/leaderboards/page.tsx +++ b/src/app/leaderboards/page.tsx @@ -19,6 +19,8 @@ import SlowBerry from '../assets/berries/SlowBerry.png' import UltraBerry from '../assets/berries/UltraBerry.png' import SpeedyBerry from '../assets/berries/SpeedyBerry.png' import CoinBerry from '../assets/berries/CoinBerry.png' +import RainbowBerry from '../componets/RandomBerry' +import AntiBerry from '../assets/berries/AntiBerry.png' export default function Leaderboards () { const [leaderboardData, setLeaderboardData] = @@ -178,6 +180,17 @@ export default function Leaderboards () { > Legacy Leaderboard + @@ -315,6 +328,30 @@ export default function Leaderboards () { Coin Berry + +