import React, { useContext, useCallback } from "react"; import "./Placard.css"; import { assetsPath } from "./Common"; import { GlobalContext } from "./GlobalContext"; type PlacardProps = { type?: string; disabled?: boolean; count?: number; buildActive?: boolean; setBuildActive?: (b: boolean) => void; className?: string; }; const Placard: React.FC = ({ type, disabled, count, buildActive, setBuildActive, className }) => { const { ws } = useContext(GlobalContext); const sendMessage = useCallback( (data: Record) => { ws.send(JSON.stringify(data)); }, [ws] ); const dismissClicked = () => { setBuildActive && setBuildActive(false); }; const buildClicked = () => { if (!type || !type.match(/^l.*/)) { if (!buildActive) { setBuildActive && setBuildActive(true); } } }; const roadClicked = () => { sendMessage({ type: "buy-road" }); setBuildActive && setBuildActive(false); }; const settlementClicked = () => { sendMessage({ type: "buy-settlement" }); setBuildActive && setBuildActive(false); }; const cityClicked = () => { sendMessage({ type: "buy-city" }); setBuildActive && setBuildActive(false); }; const developmentClicked = () => { sendMessage({ type: "buy-development" }); setBuildActive && setBuildActive(false); }; if (!type) return <>; let t = type; if (type === "B") t = "blue"; else if (type === "O") t = "orange"; else if (type === "R") t = "red"; else if (type === "W") t = "white"; let buttons: React.ReactNode = <>; if (!disabled && buildActive) { switch (t) { case "orange": case "red": case "white": case "blue": buttons = ( <>
); break; default: buttons = <>; } } const style = { backgroundImage: `url(${assetsPath}/gfx/placard-${t}.png)` }; if (!disabled) { return (
{buttons}
); } return (
{count &&
{count}
}
); }; export { Placard };