mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-10 12:44:47 -05:00
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { useSearchParams } from "@remix-run/react";
|
|
import { type MainWeaponId } from "../in-game-lists";
|
|
import { calculateDamage } from "./objectDamage";
|
|
import { buildStats } from "./stats";
|
|
import { possibleApValues, validatedWeaponIdFromSearchParams } from "./utils";
|
|
|
|
const ABILITY_POINTS_SP_KEY = "ap";
|
|
|
|
export function useObjectDamage() {
|
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
|
|
const mainWeaponId = validatedWeaponIdFromSearchParams(searchParams);
|
|
const abilityPoints = validatedAbilityPointsFromSearchParams(searchParams);
|
|
|
|
const handleChange = ({
|
|
newMainWeaponId = mainWeaponId,
|
|
abilityPoints = 0,
|
|
}: {
|
|
newMainWeaponId?: MainWeaponId;
|
|
abilityPoints?: number;
|
|
}) => {
|
|
setSearchParams(
|
|
{
|
|
weapon: String(newMainWeaponId),
|
|
[ABILITY_POINTS_SP_KEY]: String(abilityPoints),
|
|
},
|
|
{ replace: true, state: { scroll: false } }
|
|
);
|
|
};
|
|
|
|
const analyzed = buildStats({
|
|
weaponSplId: mainWeaponId,
|
|
});
|
|
|
|
return {
|
|
mainWeaponId,
|
|
subWeaponId: analyzed.weapon.subWeaponSplId,
|
|
handleChange,
|
|
damagesToReceivers: calculateDamage({
|
|
abilityPoints: new Map([
|
|
["BRU", { ap: abilityPoints, apBeforeTacticooler: abilityPoints }],
|
|
["SPU", { ap: abilityPoints, apBeforeTacticooler: abilityPoints }],
|
|
]),
|
|
analyzed,
|
|
mainWeaponId,
|
|
}),
|
|
abilityPoints: String(abilityPoints),
|
|
};
|
|
}
|
|
|
|
export function validatedAbilityPointsFromSearchParams(
|
|
searchParams: URLSearchParams
|
|
) {
|
|
const abilityPoints = Number(searchParams.get(ABILITY_POINTS_SP_KEY));
|
|
|
|
return (
|
|
possibleApValues().find((possibleAp) => possibleAp === abilityPoints) ?? 0
|
|
);
|
|
}
|