"use client"; import { useEffect, useState } from "react"; const TRAIN_ASCII = ` ==== ________ ___________ _D _| |_______/ \\__I_I_____===__|_________| |(_)--- | H\\________/ | | =|___ ___| _________________ _________________ _________________ _________________ _________________ _________________ / | | H | | | | ||_| |_|| _| \\_____| \\_____| \\_____| \\_____| \\_____| \\_____A | | | H |__--------------------| [___] | =| | | | | | | | ________|___H__/__|_____/[][]~\\_______| | -| | | | | | | |/ | |-----------I_____I [][] [] D |=======|____|________________________|_______________________|_______________________|_______________________|_______________________|_______________________|_ __/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_______________________|_______________________|_______________________|_______________________|_______________________| |/-=|___|= || || || |_____/~\\___/ |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| |_D__D__D_| \\_/ \\O=====O=====O=====O_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \\_/`; export default function SlBackground() { const [pos, setPos] = useState(150); useEffect(() => { let animationFrameId: number; let lastTime = 0; const animate = (timestamp: number) => { if (!lastTime) lastTime = timestamp; const delta = timestamp - lastTime; // Update position every ~30ms to create a retro sliding terminal refresh feel if (delta > 45) { setPos((prev) => { if (prev <= -150) return 150; return prev - 1.5; }); lastTime = timestamp; } animationFrameId = requestAnimationFrame(animate); }; animationFrameId = requestAnimationFrame(animate); return () => cancelAnimationFrame(animationFrameId); }, []); return ( <>
          {TRAIN_ASCII}
        
); }