Files
mp-xieyingeng/assets/scripts/utils/StorageManager.ts
richarjiang 71a38c1fe5 feat: 添加生命值系统
- 新增 StorageManager 本地存储管理器,管理用户生命值
- 新用户默认 10 点生命值,存储在 localStorage
- 查看提示消耗 1 点生命值
- 通关奖励 1 点生命值
- PageLevel 集成生命值显示和消耗逻辑
2026-03-14 18:32:50 +08:00

88 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { sys } from 'cc';
/**
* 本地存储管理器
* 统一管理用户数据的本地持久化存储
*/
export class StorageManager {
/** 生命值存储键 */
private static readonly KEY_LIVES = 'game_lives';
/** 默认生命值 */
private static readonly DEFAULT_LIVES = 10;
/** 最小生命值 */
private static readonly MIN_LIVES = 0;
// ==================== 生命值管理 ====================
/**
* 获取当前生命值
* @returns 当前生命值,新用户返回默认值 10
*/
static getLives(): number {
const stored = sys.localStorage.getItem(StorageManager.KEY_LIVES);
if (stored === null || stored === '') {
// 新用户,设置默认值
StorageManager.setLives(StorageManager.DEFAULT_LIVES);
return StorageManager.DEFAULT_LIVES;
}
const lives = parseInt(stored, 10);
// 防止异常数据
if (isNaN(lives) || lives < 0) {
StorageManager.setLives(StorageManager.DEFAULT_LIVES);
return StorageManager.DEFAULT_LIVES;
}
return lives;
}
/**
* 设置生命值
* @param lives 生命值
*/
static setLives(lives: number): void {
const validLives = Math.max(StorageManager.MIN_LIVES, lives);
sys.localStorage.setItem(StorageManager.KEY_LIVES, validLives.toString());
console.log(`[StorageManager] 生命值已更新: ${validLives}`);
}
/**
* 消耗一颗生命
* @returns 是否消耗成功(生命值不足时返回 false
*/
static consumeLife(): boolean {
const currentLives = StorageManager.getLives();
if (currentLives <= 0) {
console.warn('[StorageManager] 生命值不足,无法消耗');
return false;
}
StorageManager.setLives(currentLives - 1);
return true;
}
/**
* 增加一颗生命
*/
static addLife(): void {
const currentLives = StorageManager.getLives();
StorageManager.setLives(currentLives + 1);
console.log(`[StorageManager] 获得一颗生命,当前生命值: ${currentLives + 1}`);
}
/**
* 检查是否有足够的生命值
* @returns 是否有生命值
*/
static hasLives(): boolean {
return StorageManager.getLives() > 0;
}
/**
* 重置生命值为默认值
*/
static resetLives(): void {
StorageManager.setLives(StorageManager.DEFAULT_LIVES);
console.log('[StorageManager] 生命值已重置为默认值');
}
}