33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
export type StartBoostProp = "hourglass" | "rocket";
|
|
|
|
export interface StartBoostLoadout {
|
|
streak: number;
|
|
hourglass: boolean;
|
|
rocket: boolean;
|
|
spentHourglass?: boolean;
|
|
spentRocket?: boolean;
|
|
}
|
|
|
|
export function startBoostRewards(streak: number): { hourglass: number; rocket: number } {
|
|
return { hourglass: streak >= 3 ? 3 : streak > 0 ? 2 : 0,
|
|
rocket: streak >= 3 ? 2 : streak >= 2 ? 1 : 0 };
|
|
}
|
|
|
|
export function infiniteStartBoost(info: any, prop: StartBoostProp): boolean {
|
|
return Number(info[prop === "hourglass" ? "infiniteHourglassTime" : "infiniteRocketTime"]) > Date.now() / 1000;
|
|
}
|
|
|
|
export function canCarryStartBoost(info: any, prop: StartBoostProp): boolean {
|
|
return infiniteStartBoost(info, prop) || info[prop + "Amount"] > 0;
|
|
}
|
|
|
|
/** 原配置只在未开始的重开中复用;已使用的自选道具不重复扣。 */
|
|
export function consumeCarriedStartBoost(loadout: StartBoostLoadout, prop: StartBoostProp, info: any): boolean {
|
|
const spent = prop === "hourglass" ? "spentHourglass" : "spentRocket";
|
|
if (!loadout[prop] || loadout[spent]) return false;
|
|
loadout[spent] = true;
|
|
if (infiniteStartBoost(info, prop)) return false;
|
|
info[prop + "Amount"] = Math.max(0, (Number(info[prop + "Amount"]) || 0) - 1);
|
|
return true;
|
|
}
|