import { twc } from 'react-twc'; import { usePlayers } from '../../Hooks/usePlayers'; import { CommanderTax, Energy, Experience, PartnerTax, Poison, } from '../../Icons/generated'; import { CounterType, Player, Rotation } from '../../Types/Player'; import { RotationDivProps } from '../Buttons/CommanderDamage'; import ExtraCounter from '../Buttons/ExtraCounter'; const Container = twc.div((props) => [ 'flex', props.$rotation === Rotation.SideFlipped || props.$rotation === Rotation.Side ? 'h-full w-[8vmax]' : 'h-[20vmin] w-full', ]); export const ExtraCountersGrid = twc.div((props) => [ 'flex absolute flex-row flex-grow pointer-events-none', props.$rotation === Rotation.SideFlipped || props.$rotation === Rotation.Side ? 'flex-col-reverse h-full w-auto bottom-auto' : 'w-full bottom-0', ]); type ExtraCountersBarProps = { player: Player; }; const ExtraCountersBar = ({ player }: ExtraCountersBarProps) => { const { updatePlayer } = usePlayers(); const handleCounterChange = ( updatedCounterTotal: number, type: CounterType ) => { if (updatedCounterTotal < 0) { return; } const existingCounter = player.extraCounters.find( (counter) => counter.type === type ); if (!existingCounter) { const newCounter = { type, value: updatedCounterTotal, }; const updatedExtraCounters = [...player.extraCounters, newCounter]; const updatedPlayer = { ...player, extraCounters: updatedExtraCounters }; updatePlayer(updatedPlayer); return; } const updatedExtraCounters = player.extraCounters.map((counter) => { if (counter.type === type) { return { ...counter, value: updatedCounterTotal }; } return counter; }); const updatedPlayer = { ...player, extraCounters: updatedExtraCounters }; updatePlayer(updatedPlayer); }; const iconSize = player.settings.rotation === Rotation.SideFlipped || player.settings.rotation === Rotation.Side ? '5vmax' : '10vmin'; const { useCommanderDamage, usePartner, usePoison, useEnergy, useExperience, } = player.settings; const hasExtraCounters = useCommanderDamage || usePartner || usePoison || useEnergy || useExperience; if (!hasExtraCounters) { return null; } return ( {useCommanderDamage && ( } type={CounterType.CommanderTax} counterTotal={ player.extraCounters?.find( (counter) => counter.type === 'commanderTax' )?.value } setCounterTotal={handleCounterChange} playerIndex={player.index} /> )} {Boolean(useCommanderDamage && usePartner) && ( } type={CounterType.PartnerTax} counterTotal={ player.extraCounters?.find( (counter) => counter.type === 'partnerTax' )?.value } setCounterTotal={handleCounterChange} playerIndex={player.index} /> )} {usePoison && ( } type={CounterType.Poison} counterTotal={ player.extraCounters?.find((counter) => counter.type === 'poison') ?.value } setCounterTotal={handleCounterChange} playerIndex={player.index} /> )} {useEnergy && ( } type={CounterType.Energy} counterTotal={ player.extraCounters?.find((counter) => counter.type === 'energy') ?.value } setCounterTotal={handleCounterChange} playerIndex={player.index} /> )} {useExperience && ( } type={CounterType.Experience} counterTotal={ player.extraCounters?.find( (counter) => counter.type === 'experience' )?.value } setCounterTotal={handleCounterChange} playerIndex={player.index} /> )} ); }; export default ExtraCountersBar;