diff --git a/my-app/src/App.tsx b/my-app/src/App.tsx index 3adf5e2..c59e66e 100644 --- a/my-app/src/App.tsx +++ b/my-app/src/App.tsx @@ -60,10 +60,10 @@ const initialPlayers: Player[] = [ color: '#808080', settings: { useCommanderDamage: true, - usePartner: true, - useEnergy: true, - useExperience: true, - usePoison: true, + usePartner: false, + useEnergy: false, + useExperience: false, + usePoison: false, flipped: true, }, }, @@ -74,9 +74,9 @@ const initialPlayers: Player[] = [ settings: { useCommanderDamage: true, usePartner: false, - useEnergy: true, - useExperience: true, - usePoison: true, + useEnergy: false, + useExperience: false, + usePoison: false, flipped: true, }, }, @@ -87,9 +87,9 @@ const initialPlayers: Player[] = [ settings: { useCommanderDamage: true, usePartner: false, - useEnergy: true, - useExperience: true, - usePoison: true, + useEnergy: false, + useExperience: false, + usePoison: false, flipped: false, }, }, @@ -100,9 +100,9 @@ const initialPlayers: Player[] = [ settings: { useCommanderDamage: true, usePartner: false, - useEnergy: true, - useExperience: true, - usePoison: true, + useEnergy: false, + useExperience: false, + usePoison: false, flipped: false, }, }, diff --git a/my-app/src/Components/Buttons/CommanderTaxButton.tsx b/my-app/src/Components/Buttons/CommanderTaxButton.tsx index 329b93c..d0a0cc6 100644 --- a/my-app/src/Components/Buttons/CommanderTaxButton.tsx +++ b/my-app/src/Components/Buttons/CommanderTaxButton.tsx @@ -1,5 +1,6 @@ import { useRef, useState } from 'react'; import CommanderTaxIcon from '../../Icons/CommanderTaxIcon'; +import PoisonIcon from '../../Icons/PoisonIcon'; import styled from 'styled-components'; export const StyledCommanderTaxButton = styled.button` diff --git a/my-app/src/Components/Buttons/EnergyButton.tsx b/my-app/src/Components/Buttons/EnergyButton.tsx new file mode 100644 index 0000000..1291ac6 --- /dev/null +++ b/my-app/src/Components/Buttons/EnergyButton.tsx @@ -0,0 +1,67 @@ +import { useRef, useState } from 'react'; +import styled from 'styled-components'; +import EnergyIcon from '../../Icons/EnergyIcon'; + +export const StyledEnergyButton = styled.button` + flex-grow: 1; + border: none; + outline: none; + cursor: pointer; + background-color: transparent; + user-select: none; +`; + +const EnergyButton = () => { + const [energyCount, setEnergyCount] = useState(0); + + const timeoutRef = useRef(undefined); + const [timeoutFinished, setTimeoutFinished] = useState(false); + const [hasPressedDown, setHasPressedDown] = useState(false); + + const handleEnergyCountChange = (increment: number) => { + setEnergyCount(energyCount + increment); + }; + + const handleDownInput = () => { + setTimeoutFinished(false); + setHasPressedDown(true); + timeoutRef.current = setTimeout(() => { + setTimeoutFinished(true); + handleEnergyCountChange(-1); + }, 500); + }; + + const handleUpInput = () => { + if (!(hasPressedDown && !timeoutFinished)) { + return; + } + clearTimeout(timeoutRef.current); + handleEnergyCountChange(1); + setHasPressedDown(false); + }; + + const handleLeaveInput = () => { + setTimeoutFinished(true); + clearTimeout(timeoutRef.current); + setHasPressedDown(false); + }; + + return ( + ) => { + e.preventDefault(); + }} + > + + + ); +}; + +export default EnergyButton; diff --git a/my-app/src/Components/Buttons/ExperienceButton.tsx b/my-app/src/Components/Buttons/ExperienceButton.tsx new file mode 100644 index 0000000..834f625 --- /dev/null +++ b/my-app/src/Components/Buttons/ExperienceButton.tsx @@ -0,0 +1,67 @@ +import { useRef, useState } from 'react'; +import styled from 'styled-components'; +import ExperienceIcon from '../../Icons/ExperienceIcon'; + +export const StyledExperienceButton = styled.button` + flex-grow: 1; + border: none; + outline: none; + cursor: pointer; + background-color: transparent; + user-select: none; +`; + +const ExperienceButton = () => { + const [experienceCount, setExperienceCount] = useState(0); + + const timeoutRef = useRef(undefined); + const [timeoutFinished, setTimeoutFinished] = useState(false); + const [hasPressedDown, setHasPressedDown] = useState(false); + + const handleExperienceCountChange = (increment: number) => { + setExperienceCount(experienceCount + increment); + }; + + const handleDownInput = () => { + setTimeoutFinished(false); + setHasPressedDown(true); + timeoutRef.current = setTimeout(() => { + setTimeoutFinished(true); + handleExperienceCountChange(-1); + }, 500); + }; + + const handleUpInput = () => { + if (!(hasPressedDown && !timeoutFinished)) { + return; + } + clearTimeout(timeoutRef.current); + handleExperienceCountChange(1); + setHasPressedDown(false); + }; + + const handleLeaveInput = () => { + setTimeoutFinished(true); + clearTimeout(timeoutRef.current); + setHasPressedDown(false); + }; + + return ( + ) => { + e.preventDefault(); + }} + > + + + ); +}; + +export default ExperienceButton; diff --git a/my-app/src/Components/Buttons/PoisonButton.tsx b/my-app/src/Components/Buttons/PoisonButton.tsx new file mode 100644 index 0000000..e477f51 --- /dev/null +++ b/my-app/src/Components/Buttons/PoisonButton.tsx @@ -0,0 +1,68 @@ +import { useRef, useState } from 'react'; +import CommanderTaxIcon from '../../Icons/CommanderTaxIcon'; +import PoisonIcon from '../../Icons/PoisonIcon'; +import styled from 'styled-components'; + +export const StyledPoisonButton = styled.button` + flex-grow: 1; + border: none; + outline: none; + cursor: pointer; + background-color: transparent; + user-select: none; +`; + +const PoisonButton = () => { + const [poisonCount, setPoisonCount] = useState(0); + + const timeoutRef = useRef(undefined); + const [timeoutFinished, setTimeoutFinished] = useState(false); + const [hasPressedDown, setHasPressedDown] = useState(false); + + const handlePoisonCountChange = (increment: number) => { + setPoisonCount(poisonCount + increment); + }; + + const handleDownInput = () => { + setTimeoutFinished(false); + setHasPressedDown(true); + timeoutRef.current = setTimeout(() => { + setTimeoutFinished(true); + handlePoisonCountChange(-1); + }, 500); + }; + + const handleUpInput = () => { + if (!(hasPressedDown && !timeoutFinished)) { + return; + } + clearTimeout(timeoutRef.current); + handlePoisonCountChange(1); + setHasPressedDown(false); + }; + + const handleLeaveInput = () => { + setTimeoutFinished(true); + clearTimeout(timeoutRef.current); + setHasPressedDown(false); + }; + + return ( + ) => { + e.preventDefault(); + }} + > + + + ); +}; + +export default PoisonButton; diff --git a/my-app/src/Components/LifeCounter/LifeCounter.tsx b/my-app/src/Components/LifeCounter/LifeCounter.tsx index 2a1b26d..bd13bcd 100644 --- a/my-app/src/Components/LifeCounter/LifeCounter.tsx +++ b/my-app/src/Components/LifeCounter/LifeCounter.tsx @@ -8,6 +8,9 @@ import AddLifeButton from '../Buttons/AddLifeButton'; import SubtractLifeButton from '../Buttons/SubtractLifeButton'; import CommanderDamageBar from '../Buttons/CommanderDamageBar'; import PlayerMenu from '../PlayerMenu/PlayerMenu'; +import PoisonButton from '../Buttons/PoisonButton'; +import EnergyButton from '../Buttons/EnergyButton'; +import ExperienceButton from '../Buttons/ExperienceButton'; type LifeCounterProps = { player: Player; @@ -60,6 +63,9 @@ const LifeCounter = ({ {Boolean( player.settings.useCommanderDamage && player.settings.usePartner ) && } + {player.settings.usePoison && } + {player.settings.useEnergy && } + {player.settings.useExperience && } diff --git a/my-app/src/Components/PlayerMenu/Settings.tsx b/my-app/src/Components/PlayerMenu/Settings.tsx index 40dbd3b..d818f29 100644 --- a/my-app/src/Components/PlayerMenu/Settings.tsx +++ b/my-app/src/Components/PlayerMenu/Settings.tsx @@ -49,6 +49,8 @@ const Settings = ({ player, onChange }: SettingsProps) => { checked={player.settings.useCommanderDamage} onChange={handleSettingsChange} /> + + + + + +