feat: 接入通关弹窗
This commit is contained in:
@@ -5,11 +5,13 @@ import { StorageManager } from 'db://assets/scripts/utils/StorageManager';
|
||||
import { StaminaManager } from 'db://assets/scripts/utils/StaminaManager';
|
||||
import { WxSDK } from 'db://assets/scripts/utils/WxSDK';
|
||||
import { LevelDataManager } from 'db://assets/scripts/utils/LevelDataManager';
|
||||
import { AuthManager } from 'db://assets/scripts/utils/AuthManager';
|
||||
import { RuntimeLevelConfig } from 'db://assets/scripts/types/LevelTypes';
|
||||
import { ToastManager } from 'db://assets/scripts/utils/ToastManager';
|
||||
import { ShareManager } from 'db://assets/scripts/utils/ShareManager';
|
||||
import { PassModal } from 'db://assets/prefabs/PassModal';
|
||||
import { StaminaInfo } from 'db://assets/scripts/types/ApiTypes';
|
||||
import { AchievementTitleManager } from 'db://assets/scripts/utils/AchievementTitleManager';
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
@@ -152,6 +154,9 @@ export class PageLevel extends BaseView {
|
||||
/** 通关弹窗实例 */
|
||||
private _passModalNode: Node | null = null;
|
||||
|
||||
/** 本次通关弹窗使用的已通关数量 */
|
||||
private _passModalCompletedLevelCount: number | null = null;
|
||||
|
||||
/** 是否处于分享挑战模式 */
|
||||
private _isShareMode: boolean = false;
|
||||
|
||||
@@ -1149,15 +1154,25 @@ export class PageLevel extends BaseView {
|
||||
private reportLevelCompleted(levelId: string, timeSpent: number): void {
|
||||
if (!this._isShareMode) {
|
||||
// 标记关卡为已通关(本地缓存),通关上报并行执行,不阻塞包袱展示节奏
|
||||
const wasCompleted = LevelDataManager.instance.isLevelCompleted(this.currentLevelIndex);
|
||||
if (!wasCompleted) {
|
||||
AuthManager.instance.addCompletedLevelCount();
|
||||
}
|
||||
this._passModalCompletedLevelCount = AuthManager.instance.completedLevelCount;
|
||||
LevelDataManager.instance.markLevelCompleted(this.currentLevelIndex);
|
||||
void StaminaManager.instance.completeLevel(levelId, timeSpent).then((result) => {
|
||||
if (result) {
|
||||
if (!result.firstClear && !wasCompleted) {
|
||||
AuthManager.instance.addCompletedLevelCount(-1);
|
||||
this._passModalCompletedLevelCount = AuthManager.instance.completedLevelCount;
|
||||
}
|
||||
console.log(`[PageLevel] 通关上报成功,首次通关: ${result.firstClear}`);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
this._passModalCompletedLevelCount = null;
|
||||
// fire-and-forget: errors are logged inside reportLevelProgress
|
||||
void ShareManager.instance.reportLevelProgress(levelId, true, timeSpent);
|
||||
}
|
||||
@@ -1199,7 +1214,10 @@ export class PageLevel extends BaseView {
|
||||
// 获取 PassModal 组件并设置回调
|
||||
const passModal = modalNode.getComponent(PassModal);
|
||||
if (passModal) {
|
||||
passModal.setParams({ levelIndex: this.currentLevelIndex + 1 });
|
||||
passModal.setParams({
|
||||
levelIndex: this.currentLevelIndex + 1,
|
||||
titleInfo: AchievementTitleManager.getTitleInfo(this._getPassModalCompletedLevelCount())
|
||||
});
|
||||
passModal.setCallbacks({
|
||||
onNextLevel: () => {
|
||||
this._closePassModal();
|
||||
@@ -1218,6 +1236,10 @@ export class PageLevel extends BaseView {
|
||||
console.log('[PageLevel] 显示通关弹窗');
|
||||
}
|
||||
|
||||
private _getPassModalCompletedLevelCount(): number {
|
||||
return this._passModalCompletedLevelCount ?? AuthManager.instance.completedLevelCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭通关弹窗
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user