react-incremental-library
Version:
A React library for incremental, idle, and clicker games. Build high-performance, engaging experiences with minimal setup.
334 lines (308 loc) • 10.3 kB
TypeScript
interface GameLoopOptions {
tickRate?: number;
startPaused?: boolean;
maxTickTime?: number;
catchupThreshold?: number;
onTick?: (delta: number) => void;
debugMode?: boolean;
}
interface GameLoopReturn {
tick: number;
deltaTime: number;
isPaused: boolean;
fps: number;
togglePause: () => void;
pause: () => void;
resume: () => void;
resetTick: () => void;
}
declare function useGameLoop(options?: GameLoopOptions): GameLoopReturn;
type UpgradeStatic = {
cost: number;
onUpgrade: () => void;
onBuy: () => void;
onBuyAll: () => void;
onBuyCustom: (amount: number) => void;
onSell: () => void;
onSellAll: () => void;
onSellCustom: (amount: number) => void;
};
type UpgradeSellable = {
isSellable: true;
};
type UpgradeNonSellable = {
isSellable: false;
};
interface UseTickProps {
interval: number;
onTick: () => void;
startImmediately?: boolean;
}
type Notation = 'compact' | 'standard' | 'scientific' | 'engineering';
type UseTickPropsWithEnabled = Omit<UseTickProps, 'onTick'> & {
callback: () => void;
enabled?: boolean;
};
declare const useTick: ({ interval, callback, enabled, }: UseTickPropsWithEnabled) => void;
interface UseAutoIncrementProps {
interval: number;
increaseBy: number;
onPause?: () => void;
onResume?: () => void;
onAutoIncrement?: (amount: number) => void;
options?: {
startPaused?: boolean;
};
}
/**
* Hook to automatically increase currency by `increaseBy` every `interval` ms.
*
* @param {UseAutoIncrementProps} props
* @param {number} props.interval - The interval in milliseconds.
* @param {number} props.increaseBy - The amount to increase the currency by each interval.
* @param {object} [props.options] - Additional configuration.
* @param {boolean} [props.options.startPaused] - If true, starts in a paused state.
* @param {Function} [props.onPause] - Called when the timer is paused.
* @param {Function} [props.onResume] - Called when the timer is resumed.
* @param {Function} [props.onAutoIncrement] - Called when the timer increments the currency.
* @returns {{ pause: () => boolean, resume: () => void, isPaused: boolean }}
* An object with control methods and the paused state.
*/
declare const useAutoIncrement: ({ interval, increaseBy, onPause, onResume, onAutoIncrement, options, }: UseAutoIncrementProps) => {
pause: () => boolean;
resume: () => void;
isPaused: boolean;
};
interface UseIdleProgressProps {
resourcePerSecond: number;
}
declare const useIdleProgress: ({ resourcePerSecond, }: UseIdleProgressProps) => {
idleGain: number;
};
declare const useOfflineProgress: () => {
maxOfflineTime: number;
offlineMultiplier: number;
setMaxOfflineTime: (time: number) => void;
setOfflineMultiplier: (multiplier: number) => void;
registerOfflineCallback: (callback: (elapsedTime: number) => void) => void;
};
interface UseAchievementProps {
name: string;
condition: boolean;
onUnlock?: () => void;
progress?: number;
progressCurrent?: number;
progressTarget?: number;
category?: string;
description?: string;
icon?: string;
hidden?: boolean;
}
declare const useAchievement: ({ name, condition, onUnlock, progress, progressCurrent, progressTarget, category, description, icon, hidden, }: UseAchievementProps) => {
unlocked: boolean;
progress: number;
category: string;
description: string;
icon: string | undefined;
hidden: boolean;
};
interface Achievement {
name: string;
condition: boolean;
onUnlock?: () => void;
category?: string;
description?: string;
icon?: string;
hidden?: boolean;
progress?: number;
progressTarget?: number;
progressCurrent?: number;
}
interface UseAchievementsOptions {
persistenceKey?: string;
onAchievementUnlocked?: (achievementName: string) => void;
}
interface UseAchievementsReturn {
allAchievements: {
name: string;
unlocked: boolean;
category: string;
description: string;
icon?: string;
hidden: boolean;
progress: number;
}[];
getAchievement: (name: string) => {
name: string;
unlocked: boolean;
category: string;
description: string;
icon?: string;
hidden: boolean;
progress: number;
};
getAchievementsByCategory: (category: string) => {
name: string;
unlocked: boolean;
category: string;
description: string;
icon?: string;
hidden: boolean;
progress: number;
}[];
categories: string[];
completionPercentage: number;
}
declare const useAchievements: (achievementsList: Achievement[], options?: UseAchievementsOptions) => UseAchievementsReturn;
declare const usePrestige: () => {
prestigePoints: number;
prestigeMultiplier: number;
prestigeThreshold: number;
canPrestige: boolean;
prestige: () => void;
setPrestigeThreshold: (threshold: number) => void;
registerResetCallback: (callback: () => void) => void;
reset: () => void;
};
type UseUpgradeProps = UpgradeStatic & (UpgradeSellable | UpgradeNonSellable);
declare const useUpgrade: (props: UseUpgradeProps) => {
handleUpgrade: () => void;
handleBuy: () => void;
handleBuyAll: () => void;
handleBuyCustom: (amount: number) => void;
handleSell: () => void;
handleSellAll: () => void;
handleSellCustom: (amount: number) => void;
owned: number;
};
interface UseCooldownProps {
duration: number;
autoReset?: boolean;
}
declare const useCooldown: ({ duration, autoReset, }: UseCooldownProps) => {
isCoolingDown: boolean;
remainingTime: number;
startCooldown: () => void;
resetCooldown: () => void;
};
interface UseCurrencyOptions {
/**
* Custom formatter for currency display
* @param value The currency value to format
* @returns Formatted string representation of the currency
*/
formatter?: (value: number) => string;
/**
* Number of decimal places to display
* @default 2
*/
precision?: number;
/**
* Initial currency name
*/
initialName?: string;
}
/**
* Hook for managing game currency with formatting options
* @param options Configuration options for the currency
* @returns Currency state and methods
*/
declare const useCurrency: (options?: UseCurrencyOptions) => {
currency: number;
increase: (by: number) => void;
decrease: (by: number) => void;
currencyName: string;
reset: () => void;
setCurrencyName: (name: string) => void;
setPrecision: (precision: number) => void;
setFormat: (formatter: ((value: number) => string) | undefined) => void;
getFormatted: () => string;
getValue: () => number;
setMaxValue: (max: number | undefined) => void;
setMinValue: (min: number | undefined) => void;
};
interface Producer {
id: string;
name: string;
baseCost: number;
baseProduction: number;
costScaling: number;
count: number;
dependencies?: {
producerId: string;
requiredCount: number;
}[];
}
declare const useProduction: () => {
addProducer: (producer: Omit<Producer, "count">) => void;
buyProducer: (producerId: string) => boolean;
updateProduction: (deltaTime: number) => void;
getProducerCost: (producerId: string) => number;
getProducerProduction: (producerId: string) => number;
canBuyProducer: (producerId: string) => boolean;
reset: () => void;
producers: Record<string, Producer>;
lastUpdate: number;
};
interface UseResourceCapProps {
initialValue: number;
max: number;
}
declare const useResourceCap: ({ initialValue, max }: UseResourceCapProps) => {
resource: number;
addResource: (amount: number) => void;
removeResource: (amount: number) => void;
};
interface UseMultiplierProps {
baseValue: number;
initialMultiplier?: number;
}
declare const useMultiplier: ({ baseValue, initialMultiplier, }: UseMultiplierProps) => {
multiplier: number;
applyMultiplier: () => number;
increaseMultiplier: (by: number) => void;
resetMultiplier: () => void;
};
interface UseClickerProps {
initialValue?: number;
onClick?: (newValue: number) => void;
}
declare const useClicker: ({ initialValue, onClick }: UseClickerProps) => {
count: number;
handleClick: () => void;
};
type HotKeyType = 'keydown' | 'keyup';
type KeyCombination = string[];
interface UseHotKeyProps {
/** Single key or combination of keys that trigger the callback */
keys: string | KeyCombination;
/** Function to call when the hotkey is triggered */
callback: (event: KeyboardEvent) => void;
/** Type of keyboard event to listen for */
eventType?: HotKeyType;
/** Whether to prevent the default browser behavior */
preventDefault?: boolean;
/** Whether to stop the event propagation */
stopPropagation?: boolean;
/** Whether the hotkey is currently disabled */
disabled?: boolean;
/** Minimum time (in ms) between callback executions */
debounceMs?: number;
/** Whether keys must be pressed in the exact order specified */
requireExactOrder?: boolean;
/** Whether to allow key repeat events */
allowRepeat?: boolean;
}
declare const useHotKey: ({ keys, callback, eventType, preventDefault, stopPropagation, disabled, debounceMs, requireExactOrder, allowRepeat }: UseHotKeyProps) => null;
declare const useNotation: (number: string | number, notation: Notation, locale?: string) => string | number;
declare const useLoadSaveGame: <T>() => T;
interface UseSaveGameProps<T> {
data: T;
onSave?: () => void;
onDiscard?: () => void;
}
declare const useSaveGame: <T>(props: UseSaveGameProps<T>) => {
data: T;
};
export { useAchievement, useAchievements, useAutoIncrement, useClicker, useCooldown, useCurrency, useGameLoop, useHotKey, useIdleProgress, useLoadSaveGame, useMultiplier, useNotation, useOfflineProgress, usePrestige, useProduction, useResourceCap, useSaveGame, useTick, useUpgrade };
export type { Achievement, UseAchievementProps, UseAchievementsOptions, UseAchievementsReturn };