From 35c1cac6918b8ae559866019b278403292a2cbc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20R=C3=A5dberg?= <66582202+Vikeo@users.noreply.github.com> Date: Sun, 22 Sep 2024 09:57:02 +0200 Subject: [PATCH] Add Monarch support (#37) * wip * cleanup * monarch button * use monarch button * last cleanup * fix lint * fix lint --- src/Components/Dialogs/InfoDialog.tsx | 4 ++ src/Components/LifeCounter/Health.tsx | 33 +++++++---- src/Components/LifeCounter/LifeCounter.tsx | 1 + src/Components/Misc/IconCheckbox.tsx | 2 +- src/Components/Misc/MonarchCrown.tsx | 67 ++++++++++++++++++++++ src/Components/Players/PlayerMenu.tsx | 32 +++++++++++ src/Data/getInitialPlayers.ts | 1 + src/Icons/generated/Monarch.tsx | 34 +++++++++++ src/Icons/generated/index.ts | 1 + src/Icons/svgs/Monarch.svg | 3 + src/Providers/GlobalSettingsProvider.tsx | 26 ++++----- src/Types/Player.ts | 1 + src/Types/Settings.ts | 3 + tailwind.config.ts | 1 + 14 files changed, 183 insertions(+), 26 deletions(-) create mode 100644 src/Components/Misc/MonarchCrown.tsx create mode 100644 src/Icons/generated/Monarch.tsx create mode 100644 src/Icons/svgs/Monarch.svg diff --git a/src/Components/Dialogs/InfoDialog.tsx b/src/Components/Dialogs/InfoDialog.tsx index eb15913..2ab38e6 100644 --- a/src/Components/Dialogs/InfoDialog.tsx +++ b/src/Components/Dialogs/InfoDialog.tsx @@ -3,6 +3,7 @@ import { CommanderTax, Energy, Experience, + Monarch, PartnerTax, Poison, } from '../../Icons/generated'; @@ -108,6 +109,9 @@ export const InfoDialog = ({
  • - Experience
  • +
  • + - Monarch +
  • Other functionality

    diff --git a/src/Components/LifeCounter/Health.tsx b/src/Components/LifeCounter/Health.tsx index 427dd93..4807a2d 100644 --- a/src/Components/LifeCounter/Health.tsx +++ b/src/Components/LifeCounter/Health.tsx @@ -1,8 +1,10 @@ import { useEffect, useRef, useState } from 'react'; import { twc } from 'react-twc'; +import { useGlobalSettings } from '../../Hooks/useGlobalSettings'; import { Player, Rotation } from '../../Types/Player'; import { RotationDivProps } from '../Buttons/CommanderDamage'; import LifeCounterButton from '../Buttons/LifeCounterButton'; +import { MonarchCrown } from '../Misc/MonarchCrown'; import { OutlinedText } from '../Misc/OutlinedText'; const LifeContainer = twc.div((props) => [ @@ -33,7 +35,7 @@ const RecentDifference = twc.div` absolute min-w-[20vmin] drop-shadow-none text-center bg-interface-recentDifference-background tabular-nums rounded-full p-[6px 12px] text-[8vmin] text-interface-recentDifference-text animate-fadeOut top-1/4 left-[50%] -translate-x-1/2 - data-[isSide=true]:top-1/3 data-[isSide=true]:translate-x-1/4 data-[isSide=true]:translate-y-1/2 data-[isSide=true]:rotate-[270deg] data-[isSide=true]:left-auto + data-[is-side=true]:top-1/3 data-[is-side=true]:translate-x-1/4 data-[is-side=true]:translate-y-1/2 data-[is-side=true]:rotate-[270deg] data-[is-side=true]:left-auto `; type HealthProps = { @@ -53,6 +55,8 @@ const Health = ({ const [fontSize, setFontSize] = useState(16); const textContainerRef = useRef(null); + const { settings } = useGlobalSettings(); + useEffect(() => { if (!textContainerRef.current) { return; @@ -104,6 +108,8 @@ const Health = ({ return ( + {settings.useMonarch && } + - {player.name && isSide ? ( -
    -
    +
    + {player.name && isSide ? ( +
    {player.name}
    -
    - ) : ( -
    + ) : (
    {player.name}
    -
    - )} + )} +
    {recentDifference !== 0 && ( - + {recentDifference > 0 ? '+' : ''} {recentDifference} diff --git a/src/Components/LifeCounter/LifeCounter.tsx b/src/Components/LifeCounter/LifeCounter.tsx index 5568228..b9247c3 100644 --- a/src/Components/LifeCounter/LifeCounter.tsx +++ b/src/Components/LifeCounter/LifeCounter.tsx @@ -238,6 +238,7 @@ const LifeCounter = ({ player, opponents }: LifeCounterProps) => { recentDifference={recentDifference} handleLifeChange={handleLifeChange} /> + { return ( -
    +
    +
    + + } + checkedIcon={ + + } + onChange={(e) => { + analytics.trackEvent('toggle_monarch', { + checked: e.target.checked, + }); + setSettings({ ...settings, useMonarch: e.target.checked }); + }} + aria-checked={settings.useMonarch} + aria-label="Monarch" + /> +