diff --git a/lua/app/common/bi_report.lua b/lua/app/common/bi_report.lua index 8fc369cf..66789594 100644 --- a/lua/app/common/bi_report.lua +++ b/lua/app/common/bi_report.lua @@ -69,7 +69,8 @@ BIReport.ITEM_GET_TYPE = { BOUNTY = "Bounty", IDLE_DROP = "IdleDrop", IDLE_QUICK_DROP = "IdleQuickDrop", - MAIL = "Mail" + MAIL = "Mail", + PLAYER_LV_UP = "PlayerLvUp", } BIReport.ADS_CLICK_TYPE = { diff --git a/lua/app/common/module_manager.lua b/lua/app/common/module_manager.lua index 85515eec..5ea659da 100644 --- a/lua/app/common/module_manager.lua +++ b/lua/app/common/module_manager.lua @@ -39,6 +39,8 @@ local MODULE_PATHS = { ShopManager = "app/module/shop/shop_manager", -- 邮件 MailManager = "app/module/mail/mail_manager", + -- 玩家 + PlayerManager = "app/module/player/player_manager", } -- 这里的key对应func_open里的id diff --git a/lua/app/module/player.meta b/lua/app/module/player.meta new file mode 100644 index 00000000..f59370a9 --- /dev/null +++ b/lua/app/module/player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98178fc3bab492b46975a763c42497c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/module/player/player_manager.lua b/lua/app/module/player/player_manager.lua new file mode 100644 index 00000000..e5915907 --- /dev/null +++ b/lua/app/module/player/player_manager.lua @@ -0,0 +1,23 @@ +local PlayerManager = class("PlayerManager", BaseModule) + +function PlayerManager:showPlayerUpUI(currLv, rewards) + local params = { + fromLevel = currLv, + rewards = rewards, + } + UIManager:showUI("app/ui/player/player_level_up_ui", params) +end + +function PlayerManager:levelUp() + self:sendMessage(ProtoMsgType.FromMsgEnum.LevelUpReq, {}, {}, self.onLevelUpFinish, BIReport.ITEM_GET_TYPE.PLAYER_LV_UP) +end + +function PlayerManager:onLevelUpFinish(result) + if result.err_code == GConst.ERROR_STR.SUCCESS then + local currLv = DataManager.PlayerData:getLv() + DataManager.PlayerData:setLv(result.level, result.exp) + self:showPlayerUpUI(currLv, result.rewards) + end +end + +return PlayerManager \ No newline at end of file diff --git a/lua/app/module/player/player_manager.lua.meta b/lua/app/module/player/player_manager.lua.meta new file mode 100644 index 00000000..844653fe --- /dev/null +++ b/lua/app/module/player/player_manager.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2f013f123922ef74294a3dc5ea3784a4 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/ui/base_ui.lua b/lua/app/ui/base_ui.lua index e95d5f4c..3766c284 100644 --- a/lua/app/ui/base_ui.lua +++ b/lua/app/ui/base_ui.lua @@ -21,7 +21,7 @@ function BaseUI:getPreLoadList() end function BaseUI:showCommonBG() - return true + return false end -- 界面prefab路径 diff --git a/lua/app/ui/idle/idle_drop_ui.lua b/lua/app/ui/idle/idle_drop_ui.lua index 855c62d1..58a95094 100644 --- a/lua/app/ui/idle/idle_drop_ui.lua +++ b/lua/app/ui/idle/idle_drop_ui.lua @@ -31,6 +31,10 @@ function IdleDropUI:onReshow() if self.cdSid then self:resumeScheduleGlobal(self.cdSid) end + -- 检查是否升级 + if DataManager.PlayerData:getIfCanLevelUp() then + ModuleManager.PlayerManager:levelUp() + end end function IdleDropUI:onClose() diff --git a/lua/app/ui/idle/idle_quick_drop_ui.lua b/lua/app/ui/idle/idle_quick_drop_ui.lua index 27ad9119..a19e9f57 100644 --- a/lua/app/ui/idle/idle_quick_drop_ui.lua +++ b/lua/app/ui/idle/idle_quick_drop_ui.lua @@ -36,6 +36,13 @@ function IdleQuickDropUI:ctor() end end +function IdleQuickDropUI:onReshow() + -- 检查是否升级 + if DataManager.PlayerData:getIfCanLevelUp() then + ModuleManager.PlayerManager:levelUp() + end +end + function IdleQuickDropUI:onLoadRootComplete() local uiMap = self.root:genAllChildren() self.uiMap = uiMap diff --git a/lua/app/ui/main_city/main_city_ui.lua b/lua/app/ui/main_city/main_city_ui.lua index 61759779..6b21bc1c 100644 --- a/lua/app/ui/main_city/main_city_ui.lua +++ b/lua/app/ui/main_city/main_city_ui.lua @@ -110,9 +110,6 @@ function MainCityUI:_display() end function MainCityUI:_addListeners() - self:addEventListener(EventManager.CUSTOM_EVENT.MAIN_UI_CHECK_POP, function() - self:checkMainPop() - end) end function MainCityUI:_bind() @@ -126,9 +123,6 @@ function MainCityUI:_bind() self:bind(DataManager.PlayerData, "dirty", function(binder, value) self:refreshPlayerInfo() end, true) - self:bind(DataManager.PlayerData, "lvUpDirty", function(binder, value) - self:checkMainPop() - end) self:bind(DataManager.FormationData, "dirty", function(binder, value) if self.selectedIndex == GConst.MainCityConst.BOTTOM_PAGE.HERO then self.subComps[self.selectedIndex]:refresh() @@ -679,6 +673,12 @@ function MainCityUI:refreshSettingBtn() end function MainCityUI:checkMainPop() + -- 检查是否升级 + if DataManager.PlayerData:getIfCanLevelUp() then + ModuleManager.PlayerManager:levelUp() + return + end + -- 引导 if self:checkTutorial() then return diff --git a/lua/app/ui/player.meta b/lua/app/ui/player.meta new file mode 100644 index 00000000..ed209924 --- /dev/null +++ b/lua/app/ui/player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60f05ec49fd1e1544b596ad1fb4cd483 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/lua/app/ui/player/player_level_up_ui.lua b/lua/app/ui/player/player_level_up_ui.lua new file mode 100644 index 00000000..35bbf0ab --- /dev/null +++ b/lua/app/ui/player/player_level_up_ui.lua @@ -0,0 +1,86 @@ +local PlayerLevelUpUI = class("PlayerLevelUpUI", BaseUI) + +local CELL_WIDTH = 114.8 + +function PlayerLevelUpUI:isFullScreen() + return false +end + +function PlayerLevelUpUI:getPrefabPath() + return "assets/prefabs/ui/player/player_level_up_ui.prefab" +end + +function PlayerLevelUpUI:ctor(params) + params = params or GConst.EMPTY_TABLE + + self.fromLevel = params.fromLevel + self.rewards = params.rewards or GConst.EMPTY_TABLE +end + +function PlayerLevelUpUI:onLoadRootComplete() + self:_display() +end + +function PlayerLevelUpUI:_display() + local uiMap = self.root:genAllChildren() + self.uiMap = uiMap + + uiMap["player_level_up_ui.bg"]:addClickListener(function() + self:closeUI() + end) + + local toLevel = DataManager.PlayerData:getLv() + uiMap["player_level_up_ui.title_tx"]:setText(I18N:getGlobalText(I18N.GlobalConst.PLAYER_LEVEL_UP_DESC, toLevel)) + uiMap["player_level_up_ui.reward_title"]:setText(I18N:getGlobalText(I18N.GlobalConst.LEVEL_UP_REWARD)) + uiMap["player_level_up_ui.continue"]:setText(I18N:getGlobalText(I18N.GlobalConst.CLICK_TO_CONTINUE)) + + uiMap["player_level_up_ui.lv_img_l.text"]:setText(tostring(self.fromLevel)) + uiMap["player_level_up_ui.lv_img_r.text"]:setText(tostring(toLevel)) + local width = uiMap["player_level_up_ui.reward_title"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO).preferredWidth + uiMap["player_level_up_ui.r"]:setAnchoredPositionX(width/2 + 40) + uiMap["player_level_up_ui.l"]:setAnchoredPositionX(-width/2 - 40) + + self:refreshRewards() +end + +function PlayerLevelUpUI:refreshRewards() + if self.scrollRectComp then + self.scrollRectComp:updateAllCell() + return + end + + local uiMap = self.root:genAllChildren() + local scrollRect = uiMap["player_level_up_ui.scroll_rect"] + self.scrollRectComp = scrollRect:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + self.scrollRectComp:addInitCallback(function() + return GConst.TYPEOF_LUA_CLASS.REWARD_CELL + end) + self.scrollRectComp:addRefreshCallback(function(index, cell) + cell:refresh(self.rewards[index]) + end) + self.scrollRectComp:setFadeArgs(0.05, 0.3) + self.scrollRectComp:clearCells() + local rewardCount = #self.rewards + if rewardCount > 10 then + local comp = scrollRect:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SCROLL_RECT) + comp.movementType = CS.UnityEngine.UI.ScrollRect.MovementType.Elastic + self.scrollRectComp:setPerLineNum(5) + scrollRect:setSizeDeltaX(560) + else + local comp = scrollRect:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SCROLL_RECT) + comp.movementType = CS.UnityEngine.UI.ScrollRect.MovementType.Clamped + if rewardCount >= 5 then + self.scrollRectComp:setPerLineNum(5) + scrollRect:setSizeDeltaX(560) + elseif rewardCount <= 0 then + self.scrollRectComp:setPerLineNum(1) + scrollRect:setSizeDeltaX(560) + else + self.scrollRectComp:setPerLineNum(rewardCount) + scrollRect:setSizeDeltaX(112*rewardCount) + end + end + self.scrollRectComp:refillCells(rewardCount, true) +end + +return PlayerLevelUpUI \ No newline at end of file diff --git a/lua/app/ui/player/player_level_up_ui.lua.meta b/lua/app/ui/player/player_level_up_ui.lua.meta new file mode 100644 index 00000000..1bcf909c --- /dev/null +++ b/lua/app/ui/player/player_level_up_ui.lua.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b83a832315fd3374695b7da2524db2c4 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 3b8b241bab4a4ac9a22fcce9c64f1242, type: 3} diff --git a/lua/app/userdata/player/player_data.lua b/lua/app/userdata/player/player_data.lua index 878fa1b3..ee8749b4 100644 --- a/lua/app/userdata/player/player_data.lua +++ b/lua/app/userdata/player/player_data.lua @@ -49,6 +49,13 @@ function PlayerData:addExp(exp) self:markDirty() end +function PlayerData:setLv(level, exp) + self.data.level = level + self.data.exp = exp + self.lvUpNeedExp = self:getNextExp(self.data.level) + self:markDirty() +end + function PlayerData:getLv() return self.data.level end @@ -66,6 +73,13 @@ function PlayerData:getExpPercent() return self.data.exp / self.lvUpNeedExp end +function PlayerData:getIfCanLevelUp() + if self.data.level >= self:getMaxLv() then + return false + end + return self.data.exp >= self.lvUpNeedExp +end + function PlayerData:getAccountInfo() if not self.accountInfo then self.accountInfo = LocalData:getAccountInfo()