65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
export const targetStatOptions = [
|
|
"HP",
|
|
"ATK",
|
|
"DEF",
|
|
"EM",
|
|
"ER",
|
|
"CRIT RATE",
|
|
"CRIT DAMAGE",
|
|
] as const;
|
|
|
|
export type TargetStat = (typeof targetStatOptions)[number];
|
|
|
|
export const targetStatDefaults: Array<{ stat: TargetStat; value: string }> = [
|
|
{ stat: "HP", value: "" },
|
|
{ stat: "ATK", value: "" },
|
|
{ stat: "DEF", value: "" },
|
|
{ stat: "EM", value: "" },
|
|
{ stat: "ER", value: "100%" },
|
|
{ stat: "CRIT RATE", value: "5%" },
|
|
{ stat: "CRIT DAMAGE", value: "50%" },
|
|
];
|
|
|
|
const legacyTargetStatNames: Record<string, TargetStat> = {
|
|
"CRIT Rate": "CRIT RATE",
|
|
"CRIT DMG": "CRIT DAMAGE",
|
|
};
|
|
|
|
export function normalizeTargetStat(value: string): TargetStat | null {
|
|
const normalized = legacyTargetStatNames[value] ?? value;
|
|
return targetStatOptions.includes(normalized as TargetStat)
|
|
? (normalized as TargetStat)
|
|
: null;
|
|
}
|
|
|
|
export function targetStatIconName(value: string): string | null {
|
|
const stat = normalizeTargetStat(value);
|
|
if (!stat) return null;
|
|
return stat === "CRIT RATE"
|
|
? "critrate"
|
|
: stat === "CRIT DAMAGE"
|
|
? "critdmg"
|
|
: stat.toLowerCase();
|
|
}
|
|
|
|
export function recommendedStatIconName(value: string): string | null {
|
|
if (value === "CRIT Rate%/CRIT DMG%") return "critrate";
|
|
if (value === "Healing Bonus%") return "healing-bonus";
|
|
if (value.endsWith(" DMG%")) return "elemental-bonus";
|
|
|
|
const base = value.replace(/%$/, "").toLowerCase();
|
|
return ["hp", "atk", "def", "em", "er"].includes(base) ? base : null;
|
|
}
|
|
|
|
export function statPriorityColorClass(index: number): string {
|
|
return index === 0
|
|
? "text-tier-gold"
|
|
: index === 1
|
|
? "text-tier-silver"
|
|
: "text-tier-copper";
|
|
}
|
|
|
|
export function statPriorityColor(index: number): string {
|
|
return index === 0 ? "#e0b35f" : index === 1 ? "#c7cbd3" : "#bd8055";
|
|
}
|