diff --git a/apps/web/src/Game.tsx b/apps/web/src/Game.tsx index 839efaf..2439e15 100644 --- a/apps/web/src/Game.tsx +++ b/apps/web/src/Game.tsx @@ -9,6 +9,7 @@ import Alloc from '@/containers/Alloc' import Play from '@/containers/Play' import Summary from '@/containers/Summary' import Achv from '@/containers/Achv' +import Thanks from '@/containers/Thanks' import './Game.css' export function Container() { @@ -22,6 +23,7 @@ export function Container() { case Step.Play: return case Step.Summary: return case Step.Achv: return + case Step.Thanks: return default: return null } } diff --git a/apps/web/src/config.ts b/apps/web/src/config.ts index f24e072..8b1393d 100644 --- a/apps/web/src/config.ts +++ b/apps/web/src/config.ts @@ -8,7 +8,8 @@ if (import.meta.env.MODE === 'development') { dev[key] = value.split(',').map(v => Number(v)) }) } - +// +export const Features = dev.features ?? 1 // 自动模式自动点击间隔 export const AutoInterval = dev.interval ?? 500 // 可锁定的天赋数量 @@ -119,6 +120,7 @@ export const UniquePropWeight = wg(0, 10) export const UniqueTalentWeight = wg(1, 5) export const config: Config = { + features: Features, lock: LockLimit, mode: ModeLimit, max: PickMax, diff --git a/apps/web/src/containers/Achv.css b/apps/web/src/containers/Achv.css index 4d6f077..1196e2e 100644 --- a/apps/web/src/containers/Achv.css +++ b/apps/web/src/containers/Achv.css @@ -63,7 +63,6 @@ > ul { flex: 1 0; display: grid; - flex-direction: column; grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); gap: 0.5rem; box-sizing: border-box; diff --git a/apps/web/src/containers/Home.tsx b/apps/web/src/containers/Home.tsx index 8d45d79..9c49cea 100644 --- a/apps/web/src/containers/Home.tsx +++ b/apps/web/src/containers/Home.tsx @@ -1,11 +1,13 @@ -import { useRemake, useGoAchv } from '@remake/hooks' +import { useRemake, useFeatures, useGoAchv, useGoThanks } from '@remake/hooks' import { TextSvg } from '@/components/TextSvg' import { ThemeToggle } from '@/components/ThemeToggle' import './Home.css' export default function Home() { const remake = useRemake() + const features = useFeatures() const goAchv = useGoAchv() + const goThanks = useGoThanks() return (
@@ -18,14 +20,16 @@ export default function Home() { 立即重开
-
- - -
+ {features && ( +
+ + +
+ )}
diff --git a/apps/web/src/containers/Thanks.css b/apps/web/src/containers/Thanks.css new file mode 100644 index 0000000..a0c6d4c --- /dev/null +++ b/apps/web/src/containers/Thanks.css @@ -0,0 +1,94 @@ +.screen.thanks { + height: calc(100dvh - 2rem); + gap: 1rem; + .person { + --style-color: var(--custom-color, var(--base-text-color)); + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 0.5rem; + color: var(--style-color); + background: var(--base-background-color); + transition: background 0.2s ease-in-out, color 0.2s ease-in-out; + > .name { + display: flex; + text-wrap: wrap; + word-break: break-all; + min-height: 2.5rem; + width: 12rem; + font-weight: bold; + font-size: 1.2rem; + align-items: center; + text-shadow: + -0.0625rem -0.0625rem 0.0625rem var(--base-shadow), + 0.0625rem -0.0625rem 0.0625rem var(--base-shadow), + -0.0625rem 0.0625rem 0.0625rem var(--base-shadow), + 0.0625rem 0.0625rem 0.0625rem var(--base-shadow), + 0 -0.0625rem 0.0625rem var(--base-shadow), + 0 0.0625rem 0.0625rem var(--base-shadow), + -0.0625rem 0 0.0625rem var(--base-shadow), + 0.0625rem 0 0.0625rem var(--base-shadow); + } + > .comment { + word-break: break-all; + white-space: pre-wrap; + min-height: 2.5rem; + flex: 1 0; + display: flex; + align-items: center; + text-shadow: + -0.0625rem -0.0625rem 0.0625rem var(--base-shadow), + 0.0625rem -0.0625rem 0.0625rem var(--base-shadow), + -0.0625rem 0.0625rem 0.0625rem var(--base-shadow), + 0.0625rem 0.0625rem 0.0625rem var(--base-shadow), + 0 -0.0625rem 0.0625rem var(--base-shadow), + 0 0.0625rem 0.0625rem var(--base-shadow), + -0.0625rem 0 0.0625rem var(--base-shadow), + 0.0625rem 0 0.0625rem var(--base-shadow); + } + } + > .group { flex: 1 0; } + > .group-1 { + display: flex; + flex-direction: column; + gap: 0.5rem; + border: 0.0625rem solid var(--base-text-color); + box-sizing: border-box; + padding: 0.5rem 0; + + > .person { + margin: 0 0.5rem; + padding: 0 0.5rem; + display: flex; + border: 0.0625rem solid var(--style-color); + box-sizing: border-box; + > .comment { + word-break: break-all; + white-space: pre-wrap; + min-height: 2.5rem; + flex: 1 0; + padding: 0 0.5rem; + display: flex; + align-items: center; + } + + } + } + > .group-2 { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr)); + gap: 0.5rem; + border: 0.0625rem solid var(--base-text-color); + > .person { + display: flex; + justify-content: center; + align-items: center; + text-wrap: wrap; + word-break: break-all; + text-align: center; + margin-right: 0.0625rem; + > .name { justify-content: center; } + > .comment {display: none;} + } + } +} \ No newline at end of file diff --git a/apps/web/src/containers/Thanks.tsx b/apps/web/src/containers/Thanks.tsx new file mode 100644 index 0000000..9539cae --- /dev/null +++ b/apps/web/src/containers/Thanks.tsx @@ -0,0 +1,47 @@ +import { useGoHome } from '@remake/hooks' +import { specialThanks, SpecialThanksGroup as Group } from '@remake/data' +import type { SpecialThanks } from '@remake/data' +import { shuffle } from '@remake/vitex' +import './Thanks.css' + +const groups = Map.groupBy(specialThanks, item => item.group) + +export function Person({ item }: { item: SpecialThanks }) { + return ( +
  • + {item.name} + {item.comment && {item.comment}} +
  • + ) +} + +export function Thanks() { + const goHome = useGoHome() + const group1 = shuffle(groups.get(Group.G1) ?? []) + const group2 = shuffle(groups.get(Group.G2) ?? []) + return ( +
    + +
      + {group1.map((item, index) => ( + + ))} +
    +
      + {group2.map((item, index) => ( + + ))} +
    +
    + ) +} +export default Thanks diff --git a/apps/web/src/styles/colors.css b/apps/web/src/styles/colors.css index 93d3ea3..e4be3b1 100644 --- a/apps/web/src/styles/colors.css +++ b/apps/web/src/styles/colors.css @@ -2,6 +2,7 @@ color-scheme: light dark; --base-text-color: light-dark(#121314, #f9fafb); --base-background-color: light-dark(#f7f7f7, #121314); + --base-shadow: light-dark(#00000010, #23456710); --color-grade-0: light-dark(#4e5052, #f9fafb); --color-grade-1: light-dark(#4aa8da, #afe3ff); diff --git a/packages/data/src/specialthanks.types.ts b/packages/data/src/specialthanks.types.ts index 1e582ed..d87fca3 100644 --- a/packages/data/src/specialthanks.types.ts +++ b/packages/data/src/specialthanks.types.ts @@ -1,5 +1,8 @@ /** 特别鸣谢分组 */ -export type SpecialThanksGroup = 1 | 2 +export enum SpecialThanksGroup { + G1 = 1, + G2 = 2, +} /** 特别鸣谢 */ export type SpecialThanks = { diff --git a/packages/hooks/src/config.ts b/packages/hooks/src/config.ts index 3195cbf..5466622 100644 --- a/packages/hooks/src/config.ts +++ b/packages/hooks/src/config.ts @@ -2,6 +2,8 @@ import { useCallback } from 'react' import { atom, useSetAtom, useAtomValue } from 'jotai' import type { PullOptions, PullCharaOpt, UniqueGenCfg } from '@remake/core' export interface Config { + /** 功能锁 */ + features: number /** 游戏锁定天赋数量 */ lock: number /** 游戏可选天赋数量 */ diff --git a/packages/hooks/src/play.ts b/packages/hooks/src/play.ts index 72e3671..9c38362 100644 --- a/packages/hooks/src/play.ts +++ b/packages/hooks/src/play.ts @@ -15,6 +15,7 @@ export enum Step { Play = 'play', Summary = 'summary', Achv = 'achv', + Thanks = 'thanks', } export enum Mode { @@ -192,3 +193,14 @@ export const useGoHome = () => { const setStep = useSetAtom(stepAtom) return useCallback(() => setStep(Step.Idle), [setStep]) } + +export const useGoThanks = () => { + const setStep = useSetAtom(stepAtom) + return useCallback(() => setStep(Step.Thanks), [setStep]) +} + +export const useFeatures = () => { + const { features } = useConfig() + const [{ times }] = useProfile() + return times >= features +}