sendou.ink/app/modules/analyzer/useObjectDamage.ts

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,
};
}