22 lines
686 B
TypeScript
22 lines
686 B
TypeScript
export type CardAwakeningState = {
|
|
owned?: boolean;
|
|
awakening?: number;
|
|
};
|
|
|
|
function normalizeAwakening(value: unknown): number {
|
|
return Math.max(0, Math.min(5, Number.isFinite(value) ? Math.round(Number(value)) : 0));
|
|
}
|
|
|
|
/**
|
|
* 현재 보유 상태에서 목표 개화까지 필요한 횟수.
|
|
* 미보유 카드를 처음 획득하는 과정은 1회의 개화로 계산한다.
|
|
*/
|
|
export function additionalAwakeningsRequired(
|
|
state: CardAwakeningState | undefined,
|
|
targetAwakening: number
|
|
): number {
|
|
const target = normalizeAwakening(targetAwakening);
|
|
if (state?.owned !== true) return target + 1;
|
|
return Math.max(0, target - normalizeAwakening(state.awakening));
|
|
}
|