import { Singleton } from '../../mx/tools/Singleton'; import { TableNames } from '../game/ConfigTableData'; import { UIID } from '../game/ConfigRes'; import { OtherDataType } from '../game/GameData'; /**新功能类型 */ export enum NewFunType { /**主页页签功能解锁 */ MainPageTab = 1, /**武器解锁 */ Weapon = 2, /**副本解锁 */ Replica = 3, /**难度解锁 */ Difficulty = 4, /**剧情解锁 */ Story = 6, /**主页功能按钮解锁 */ MainPageBtn = 7, /**倍速功能 */ SpeedUp = 8, } export class NewFun extends Singleton { getNewFunDataList() { return gg.data.table.getTableList(TableNames.NewFun); } /**根据新功能类型和功能ID获取配置 */ getNewFunData(newFunType: NewFunType, funId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == newFunType && x.funId == funId); return newFunData; } /**根据类型和功能id判断是否有设置过解锁状态 */ isSetUnLockNewFun(newFunType: NewFunType, funId: number) { let statusStr = gg.data.getkeyKeyValue(OtherDataType.CompletedNewFunPop, newFunType + "&" + funId); let isComplete = statusStr != '' ? true : false; return isComplete; } /**根据类型和功能id设置解锁状态 */ setUnLockNewFun(newFunType: NewFunType, funId: number) { gg.data.setkeyKeyValue(OtherDataType.CompletedNewFunPop, newFunType + "&" + funId, 1); } /**判断主页页签功能是否解锁 */ isUnLockMainPageTab(tabType: UIID) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.MainPageTab && x.funId == tabType); let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false; return isUnLock; } /**判断武器是否解锁 */ isUnLockWeapon(weaponId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.Weapon && x.funId == weaponId); let playerLevel = gg.data.getPlayerLevel(); let isUnLock = false; if (newFunData.chapter > 0) isUnLock = gg.data.doc.chapter > newFunData.chapter; if (newFunData.roleLevel > 0) isUnLock = playerLevel >= newFunData.roleLevel; if (newFunData.item_unlock > 0) { let weaponData = gg.data.project.getWeaponData(weaponId); let num = gg.data.getItemNum(weaponData.scrapId); isUnLock = num >= newFunData.item_unlock; } return isUnLock; } /**判断难度是否解锁 */ isUnLockDifficult(difficultId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.Difficulty && x.funId == difficultId); let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false; return isUnLock; } /**判断副本是否解锁 */ isUnLockReplica(replicaId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.Replica && x.funId == replicaId); let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false; return isUnLock; } /**是否有剧情解锁 */ isUnLockStory(storyId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.Story && x.funId == storyId); let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false; return isUnLock; } /**判断主页功能按钮是否解锁 */ isUnLockMainPageBtn(btnId: number) { let newFunData = gg.data.table.getTableList(TableNames.NewFun).find(x => x.type == NewFunType.MainPageBtn && x.funId == btnId); let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false; return isUnLock; } /**显示新功能弹窗 */ checkNewFunPop() { let list = gg.data.table.getTableList(TableNames.NewFun); for (let i = 0; i < list.length; i++) { let newFunData = list[i]; let funId = newFunData.funId; let isUnLock = this.isSetUnLockNewFun(newFunData.type, funId); if (isUnLock) { continue; } if (newFunData.type == NewFunType.Replica) { isUnLock = this.isUnLockReplica(funId); if (isUnLock) { this.popNewFun(newFunData); } } else if (newFunData.type == NewFunType.Weapon) { isUnLock = this.isUnLockWeapon(funId); if (isUnLock) { //武器奖励 let weaponData = gg.data.project.getWeaponData(newFunData.funId); let isHaveWeapon = gg.data.project.isWeaponUnlocked(newFunData.funId); if (isHaveWeapon) { //有武器转为碎片数量 //武器属性 let itemData = gg.data.table.getItemData(weaponData.scrapId) gg.data.addItemNum(weaponData.scrapId, itemData.transition); } else { //没有武器添加武器数据 gg.data.project.unlockWeapon(newFunData.funId); if (newFunData.item_unlock > 0) { gg.data.subItemNum(weaponData.scrapId, newFunData.item_unlock); } } gg.data.saveLocal(); gg.data.saveToServer(); this.popNewFun(newFunData); } } else if (newFunData.type == NewFunType.MainPageTab) { isUnLock = this.isUnLockMainPageTab(funId); if (isUnLock && [201, 204].includes(funId)) { this.popNewFun(newFunData); } } else if (newFunData.type == NewFunType.MainPageBtn) { isUnLock = this.isUnLockMainPageBtn(funId); if (isUnLock) { this.popNewFun(newFunData); } } } } /**显示新功能弹窗 */ popNewFun(newFunData: ITableNewFun) { if (newFunData.pop == 0) return; // 入队前同步标记已展示,避免同一帧内多次 checkNewFunPop 在弹窗 onInit 之前都通过 isSetUnLockNewFun(例如荧光棒连弹两次) if (newFunData.type == NewFunType.Replica) { this.setUnLockNewFun(NewFunType.Replica, newFunData.funId); gg.ui.popPanel(UIID.GetNewModel, { data: newFunData }); } else if (newFunData.type == NewFunType.Weapon) { this.setUnLockNewFun(NewFunType.Weapon, newFunData.funId); gg.ui.popPanel(UIID.GetNewGoodid, { data: newFunData.funId }); } else if (newFunData.type == NewFunType.MainPageTab) { this.setUnLockNewFun(NewFunType.MainPageTab, newFunData.funId); gg.ui.popPanel(UIID.PopUnLockBtn, { data: newFunData.funId }); }else if (newFunData.type == NewFunType.MainPageBtn) { this.setUnLockNewFun(NewFunType.MainPageBtn, newFunData.funId); gg.ui.popPanel(UIID.GetNewFun, { data: newFunData }); } } }