mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-22 06:59:05 -05:00
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { useSearchParams } from "@remix-run/react";
|
|
import { type MainWeaponId } from "../in-game-lists";
|
|
import { damageTypeToWeaponType } from "./constants";
|
|
import { damageTypeToMultipliers, fallbackRates } from "./damageMultipliers";
|
|
import { buildStats } from "./stats";
|
|
import { validatedWeaponIdFromSearchParams } from "./utils";
|
|
|
|
export function useObjectDamage() {
|
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
|
|
const mainWeaponId = validatedWeaponIdFromSearchParams(searchParams);
|
|
|
|
const handleChange = ({
|
|
newMainWeaponId = mainWeaponId,
|
|
}: {
|
|
newMainWeaponId?: MainWeaponId;
|
|
}) => {
|
|
setSearchParams(
|
|
{
|
|
weapon: String(newMainWeaponId),
|
|
},
|
|
{ replace: true, state: { scroll: false } }
|
|
);
|
|
};
|
|
|
|
const analyzed = buildStats({
|
|
weaponSplId: mainWeaponId,
|
|
});
|
|
|
|
const multipliers = Object.fromEntries(
|
|
analyzed.stats.damages.map((damage) => {
|
|
const weaponType = damageTypeToWeaponType[damage.type];
|
|
const weaponId: any =
|
|
weaponType === "MAIN"
|
|
? mainWeaponId
|
|
: weaponType === "SUB"
|
|
? analyzed.weapon.subWeaponSplId
|
|
: analyzed.weapon.specialWeaponSplId;
|
|
|
|
return [
|
|
damage.type,
|
|
fallbackRates(
|
|
damageTypeToMultipliers({
|
|
type: damage.type,
|
|
weapon: { type: weaponType, id: weaponId },
|
|
})
|
|
),
|
|
];
|
|
})
|
|
);
|
|
|
|
return {
|
|
mainWeaponId,
|
|
handleChange,
|
|
multipliers,
|
|
};
|
|
}
|