import { useEffect, useState } from "react"; import amogus from "/img/amogus.png"; import imposter from "/img/imposter.png"; import style from "./style.module.css"; type Amogus = { isImposter: boolean; posX: number; posY: number; speedX: number; speedY: number; }; const getImage = (sus: Amogus) => (sus.isImposter ? imposter : amogus); const initialCrewmates: Amogus[] = [ { key: "a", isImposter: true, posX: 10, posY: 20, speedX: 10, speedY: 30 }, { key: "b", isImposter: false, posX: 400, posY: 200, speedX: 10, speedY: -20, }, { key: "c", isImposter: false, posX: 900, posY: 200, speedX: -20, speedY: 10, }, ]; const makeCrewmate = (crewmate: Amogus) => { const image = getImage(crewmate); return (
Amogus
); }; const stepCrewmates = (list: Amogus[]) => { const { innerWidth: width, innerHeight: height } = window; const newCrewmates = list.slice(); for (const c of newCrewmates) { let newX = c.posX + c.speedX; let newY = c.posY + c.speedY; if (newX > width - 90) { newX = width - 90; c.speedX *= -1; } if (newX < 0) { newX = 0; c.speedX *= -1; } if (newY > height - 120) { newY = height - 120; c.speedY *= -1; } if (newY < 0) { newY = 0; c.speedY *= -1; } c.posX = newX; c.posY = newY; } return newCrewmates; }; export default function Amogus() { const [crewmates, setCrewmates] = useState(initialCrewmates); useEffect(() => { const timer = setInterval(() => { const c = crewmates; setCrewmates(stepCrewmates(c)); }, 100); return () => { clearInterval(timer); }; }, [crewmates]); return <>{crewmates.map((c) => makeCrewmate(c))}; }