feat: 添加生命值系统
- 新增 StorageManager 本地存储管理器,管理用户生命值 - 新用户默认 10 点生命值,存储在 localStorage - 查看提示消耗 1 点生命值 - 通关奖励 1 点生命值 - PageLevel 集成生命值显示和消耗逻辑
This commit is contained in:
87
assets/scripts/utils/StorageManager.ts
Normal file
87
assets/scripts/utils/StorageManager.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
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] 生命值已重置为默认值');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user