Browse Source

feat: add Storage and MathUtils utilities

master
npmrun 3 weeks ago
parent
commit
86f7d97392
  1. 46
      src/utils/MathUtils.ts
  2. 49
      src/utils/Storage.ts

46
src/utils/MathUtils.ts

@ -0,0 +1,46 @@
export function clamp(value: number, min: number, max: number): number {
return Math.min(max, Math.max(min, value));
}
export function lerp(a: number, b: number, t: number): number {
return a + (b - a) * t;
}
export function random(min: number, max: number): number {
return min + Math.random() * (max - min);
}
export function randomInt(min: number, max: number): number {
return Math.floor(random(min, max + 1));
}
export function randomChoice<T>(array: T[]): T {
return array[randomInt(0, array.length - 1)];
}
export function distance(x1: number, y1: number, x2: number, y2: number): number {
const dx = x2 - x1;
const dy = y2 - y1;
return Math.sqrt(dx * dx + dy * dy);
}
export function degToRad(deg: number): number {
return (deg * Math.PI) / 180;
}
export function radToDeg(rad: number): number {
return (rad * 180) / Math.PI;
}
const MathUtils = {
clamp,
lerp,
random,
randomInt,
randomChoice,
distance,
degToRad,
radToDeg,
};
export default MathUtils;

49
src/utils/Storage.ts

@ -0,0 +1,49 @@
class Storage {
private prefix: string;
constructor(prefix: string = "game_") {
this.prefix = prefix;
}
get<T>(key: string, defaultValue: T): T {
try {
const item = localStorage.getItem(this.prefix + key);
if (item === null) {
return defaultValue;
}
return JSON.parse(item) as T;
} catch {
return defaultValue;
}
}
set(key: string, value: any): void {
try {
localStorage.setItem(this.prefix + key, JSON.stringify(value));
} catch {
console.warn("Storage: failed to save to localStorage");
}
}
remove(key: string): void {
localStorage.removeItem(this.prefix + key);
}
clear(): void {
const keysToRemove: string[] = [];
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (key?.startsWith(this.prefix)) {
keysToRemove.push(key);
}
}
keysToRemove.forEach(key => localStorage.removeItem(key));
}
has(key: string): boolean {
return localStorage.getItem(this.prefix + key) !== null;
}
}
export const storage = new Storage();
export default storage;
Loading…
Cancel
Save