mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-08-19 18:43:53 +08:00
update: thanks
This commit is contained in:
@@ -9,6 +9,7 @@ import Alloc from '@/containers/Alloc'
|
|||||||
import Play from '@/containers/Play'
|
import Play from '@/containers/Play'
|
||||||
import Summary from '@/containers/Summary'
|
import Summary from '@/containers/Summary'
|
||||||
import Achv from '@/containers/Achv'
|
import Achv from '@/containers/Achv'
|
||||||
|
import Thanks from '@/containers/Thanks'
|
||||||
import './Game.css'
|
import './Game.css'
|
||||||
|
|
||||||
export function Container() {
|
export function Container() {
|
||||||
@@ -22,6 +23,7 @@ export function Container() {
|
|||||||
case Step.Play: return <Play />
|
case Step.Play: return <Play />
|
||||||
case Step.Summary: return <Summary />
|
case Step.Summary: return <Summary />
|
||||||
case Step.Achv: return <Achv />
|
case Step.Achv: return <Achv />
|
||||||
|
case Step.Thanks: return <Thanks />
|
||||||
default: return null
|
default: return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ if (import.meta.env.MODE === 'development') {
|
|||||||
dev[key] = value.split(',').map(v => Number(v))
|
dev[key] = value.split(',').map(v => Number(v))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//
|
||||||
|
export const Features = dev.features ?? 1
|
||||||
// 自动模式自动点击间隔
|
// 自动模式自动点击间隔
|
||||||
export const AutoInterval = dev.interval ?? 500
|
export const AutoInterval = dev.interval ?? 500
|
||||||
// 可锁定的天赋数量
|
// 可锁定的天赋数量
|
||||||
@@ -119,6 +120,7 @@ export const UniquePropWeight = wg(0, 10)
|
|||||||
export const UniqueTalentWeight = wg(1, 5)
|
export const UniqueTalentWeight = wg(1, 5)
|
||||||
|
|
||||||
export const config: Config = {
|
export const config: Config = {
|
||||||
|
features: Features,
|
||||||
lock: LockLimit,
|
lock: LockLimit,
|
||||||
mode: ModeLimit,
|
mode: ModeLimit,
|
||||||
max: PickMax,
|
max: PickMax,
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
> ul {
|
> ul {
|
||||||
flex: 1 0;
|
flex: 1 0;
|
||||||
display: grid;
|
display: grid;
|
||||||
flex-direction: column;
|
|
||||||
grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
|
||||||
gap: 0.5rem;
|
gap: 0.5rem;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
import { useRemake, useGoAchv } from '@remake/hooks'
|
import { useRemake, useFeatures, useGoAchv, useGoThanks } from '@remake/hooks'
|
||||||
import { TextSvg } from '@/components/TextSvg'
|
import { TextSvg } from '@/components/TextSvg'
|
||||||
import { ThemeToggle } from '@/components/ThemeToggle'
|
import { ThemeToggle } from '@/components/ThemeToggle'
|
||||||
import './Home.css'
|
import './Home.css'
|
||||||
|
|
||||||
export default function Home() {
|
export default function Home() {
|
||||||
const remake = useRemake()
|
const remake = useRemake()
|
||||||
|
const features = useFeatures()
|
||||||
const goAchv = useGoAchv()
|
const goAchv = useGoAchv()
|
||||||
|
const goThanks = useGoThanks()
|
||||||
return (
|
return (
|
||||||
<div className="screen home">
|
<div className="screen home">
|
||||||
<div className="title">
|
<div className="title">
|
||||||
@@ -18,14 +20,16 @@ export default function Home() {
|
|||||||
立即重开
|
立即重开
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
{features && (
|
||||||
<div>
|
<div>
|
||||||
<button className="secondary" onClick={goAchv}>
|
<button className="secondary" onClick={goAchv}>
|
||||||
成就
|
成就
|
||||||
</button>
|
</button>
|
||||||
<button className="secondary" onClick={goAchv}>
|
<button className="secondary" onClick={goThanks}>
|
||||||
感谢
|
感谢
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<ThemeToggle />
|
<ThemeToggle />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -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;}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 (
|
||||||
|
<li
|
||||||
|
className="person"
|
||||||
|
style={
|
||||||
|
{
|
||||||
|
'--custom-color': item.color,
|
||||||
|
} as React.CSSProperties
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<span className="name">{item.name}</span>
|
||||||
|
{item.comment && <span className="comment">{item.comment}</span>}
|
||||||
|
</li>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function Thanks() {
|
||||||
|
const goHome = useGoHome()
|
||||||
|
const group1 = shuffle(groups.get(Group.G1) ?? [])
|
||||||
|
const group2 = shuffle(groups.get(Group.G2) ?? [])
|
||||||
|
return (
|
||||||
|
<div className="screen thanks">
|
||||||
|
<button className="primary" onClick={goHome}>
|
||||||
|
返回
|
||||||
|
</button>
|
||||||
|
<ul className="group group-1 hide-scrollbar">
|
||||||
|
{group1.map((item, index) => (
|
||||||
|
<Person key={index} item={item} />
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
<ul className="group group-2 hide-scrollbar">
|
||||||
|
{group2.map((item, index) => (
|
||||||
|
<Person key={index} item={item} />
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
export default Thanks
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
color-scheme: light dark;
|
color-scheme: light dark;
|
||||||
--base-text-color: light-dark(#121314, #f9fafb);
|
--base-text-color: light-dark(#121314, #f9fafb);
|
||||||
--base-background-color: light-dark(#f7f7f7, #121314);
|
--base-background-color: light-dark(#f7f7f7, #121314);
|
||||||
|
--base-shadow: light-dark(#00000010, #23456710);
|
||||||
|
|
||||||
--color-grade-0: light-dark(#4e5052, #f9fafb);
|
--color-grade-0: light-dark(#4e5052, #f9fafb);
|
||||||
--color-grade-1: light-dark(#4aa8da, #afe3ff);
|
--color-grade-1: light-dark(#4aa8da, #afe3ff);
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
/** 特别鸣谢分组 */
|
/** 特别鸣谢分组 */
|
||||||
export type SpecialThanksGroup = 1 | 2
|
export enum SpecialThanksGroup {
|
||||||
|
G1 = 1,
|
||||||
|
G2 = 2,
|
||||||
|
}
|
||||||
|
|
||||||
/** 特别鸣谢 */
|
/** 特别鸣谢 */
|
||||||
export type SpecialThanks = {
|
export type SpecialThanks = {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import { useCallback } from 'react'
|
|||||||
import { atom, useSetAtom, useAtomValue } from 'jotai'
|
import { atom, useSetAtom, useAtomValue } from 'jotai'
|
||||||
import type { PullOptions, PullCharaOpt, UniqueGenCfg } from '@remake/core'
|
import type { PullOptions, PullCharaOpt, UniqueGenCfg } from '@remake/core'
|
||||||
export interface Config {
|
export interface Config {
|
||||||
|
/** 功能锁 */
|
||||||
|
features: number
|
||||||
/** 游戏锁定天赋数量 */
|
/** 游戏锁定天赋数量 */
|
||||||
lock: number
|
lock: number
|
||||||
/** 游戏可选天赋数量 */
|
/** 游戏可选天赋数量 */
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export enum Step {
|
|||||||
Play = 'play',
|
Play = 'play',
|
||||||
Summary = 'summary',
|
Summary = 'summary',
|
||||||
Achv = 'achv',
|
Achv = 'achv',
|
||||||
|
Thanks = 'thanks',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Mode {
|
export enum Mode {
|
||||||
@@ -192,3 +193,14 @@ export const useGoHome = () => {
|
|||||||
const setStep = useSetAtom(stepAtom)
|
const setStep = useSetAtom(stepAtom)
|
||||||
return useCallback(() => setStep(Step.Idle), [setStep])
|
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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user