feature: multiple lock, pick min max

This commit is contained in:
Vick Scarlet
2026-08-12 17:30:28 +08:00
parent cd339c2103
commit 5a4821433a
20 changed files with 358 additions and 160 deletions
+26 -12
View File
@@ -1,7 +1,7 @@
import { useMemo } from 'react'
import { useSummary, useGameState } from '@remake/hooks'
import type { Properties } from '@remake/hooks'
import { judge, judgeGrade } from '@/config'
import type { Judges } from '@/config'
import { keys } from '@remake/vitex'
export interface Judge {
@@ -9,22 +9,36 @@ export interface Judge {
level: number
grade: number
}
export type JudgePropKeys = keyof Properties
export type JudgeKeys = 'summary' | JudgePropKeys
export type Judges = [JudgeKeys, Judge][]
function judges<T extends Judges, K extends keyof Record<T, number> = never>(
props: Record<T, number>,
filter?: K[],
) {
const judges: [Exclude<T, K>, Judge][] = []
for (const key of keys(props, filter)) {
const value = props[key]
const level = judge(key, value)
const grade = judgeGrade(key, level)
judges.push([key, { value, level, grade }])
}
return judges
}
export const useJudge = () => {
const state = useGameState()
if (!state) throw new Error('Game state is not set')
return useMemo(() => {
const result = judges(state.props.current, ['age'])
return result
}, [state.props.current])
}
export const useEndJudge = () => {
const summary = useSummary()
const state = useGameState()
if (!state) throw new Error('Game state is not set')
return useMemo(() => {
const props = { ...state.props.highest, summary }
const judges: Judges = []
for (const key of keys(props)) {
const value = props[key]
const level = judge(key, value)
const grade = judgeGrade(key, level)
judges.push([key, { value, level, grade }])
}
return judges
const result = judges(props)
return result
}, [state.props.highest, summary])
}