local operation_activity_info_pb = require 'Proto.operation_activity_info_pb'
local UIGoldenHeroFame = UIViewClass()
function UIGoldenHeroFame:OnCreated(context)
self.itemList = {self.item1, self.item2, self.item3}
end
function UIGoldenHeroFame:OnOpened(context)
self.activityId = context.activityId
self.heroType = context.heroType
self.activityType = MDL.OperationActivity.ActivityType.GoldenHero
self.modeData = DataSheetManager.GoldHeroActivityModeData:GetDataByHeroType(self.heroType)
--标题
UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS[self.modeData.TaskName])
self:RegistSystemEvent(EventID.UI_GoldenHeroFame_RefreshMainPanel, self.RefreshView) -- 领完奖励刷新界面
self:RegistSystemEvent(EventID.UI_OperationActivity_CloseView, self.OnCloseActivitySelf)
self.toggleTitles = {}
for k,v in DataSheetManager.GoldHeroActivityTaskTab[self.heroType]:GetEnumerator() do
table.insert(self.toggleTitles, Const_IDS[v.TabName])
end
UTL.Toggle.InitToggleGroupByIDS(self.group_TaskTab, "txt", self.toggleTitles)
self.stateID = 1
self.curSelectTabID = 1
self:RefreshView(true)
self.group_TaskTab:SelectIndex(0)
CTL.GoldenHeroMain.OpenCurrencyPanel(self.heroType, self.__viewClassPath, self.currency_Info,
{activityType = self.activityType, activityId = self.activityId, title = "IDS_DrawCard_Title_QuickBuy"})
if self.heroModel then
self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.heroModel)
end
self:SetPortrait()
CTL.GoldenHeroMain.SetIsOpenedActivity(self.activityId, true)
end
function UIGoldenHeroFame:OnClosed()
if self.AnyPortraitObj then
TK2API.DiscardInstance(self.AnyPortraitPath, self.AnyPortraitObj)
self.AnyPortraitObj = nil
else
UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle)
end
end
function UIGoldenHeroFame:OnBackButtonPressed()
self:OnButtonClicked(self.UITemplateTitlePanel.btn_close)
end
function UIGoldenHeroFame:OnButtonClicked(comp)
if comp == self.UITemplateTitlePanel.btn_close then
self:CloseView(true)
elseif comp == self.UITemplateTitlePanel.btn_Home then
CTL.HomeMain.CloseViewBackHomeMain()
elseif comp == self.UITemplateTitlePanel.btn_Info then
UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.GoldHeroTask})
elseif comp == self.btn_ShowReward then
UIManager.OpenView(Const_UI_Lua.UIEnum.UIGoldenHeroFameReward, {activityId = self.activityId, heroType = self.heroType})
elseif comp == self.btn_Reward then
MDL.GoldenHeroFame.ClaimGoldHeroStateRewardRequest(self.activityId, self.heroType, self.rewardID)
elseif comp == self.btn_Receive_All then
MDL.GoldenHeroFame.ClaimAllGoldHeroTaskDataRewardReq(self.activityId, self.heroType)
else
for k,v in ipairs(self.itemList) do
if comp == v.event_Click then
UTL.ItemTips.ShowCommonTipsById(self.rewardTaskLevelCfg.Item_Table[k].ItemID)
end
end
end
end
function UIGoldenHeroFame:OnCellInit(scrollRect, index, cellTable, data)
local triggerData = DataSheetManager.TriggerID:GetDataByID(data.Cfg.TriggerID).Unlock_Table[1]
UIUtils.SetLabel(cellTable.txt_TaskName, MDL.GoldenHeroFame.GetDesByTriggerID(triggerData, self.heroType)) -- 成就名称
local targetCount = triggerData.UnlockConditionParamB
if triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_PassLevel then -- 金将体验关:通关金将活动关卡X(非历史)
targetCount = 1
elseif triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_PassEnding then -- 金将体验关:达成结局X(非历史)
targetCount = 1
elseif triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_ParticipationModelBoss -- 金将体验关:累计参与X模板的Y次协同讨伐(非历史)
or triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_FindModelBoss -- 金将体验关:累计发现X模板的Y次讨伐目标(非历史)
or triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_GetModelBossScore -- 金将体验关:协同讨伐中累计获得X模板的Y积分(非历史)
or triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_KillModelBoss -- 金将体验关:累计击杀讨伐目标X模板的Y次(非历史)
or triggerData.UnlockCondition == LuaConst.TriggerType.GoldenHero_PassModelLevel then -- 金将体验关:累计通关金将活动X模板的关卡Y次(非历史)
targetCount = triggerData.UnlockConditionParamB
end
local curCount = 0
if data.taskData.state ~= operation_activity_info_pb.StateDoing then
curCount = string.format("%s/%s", targetCount, targetCount)
else
curCount = string.format("%s/%s", data.taskData.process, targetCount)
end
UIUtils.SetLabel(cellTable.txt_Progress, curCount) -- 成就进度
UTL.Item.SetItemCell(cellTable.item1, data.Cfg.Item_Table[1].ItemID, data.Cfg.Item_Table[1].ItemNum)
UTL.Item.SetItemCell(cellTable.item2, data.Cfg.Item_Table[2].ItemID, data.Cfg.Item_Table[2].ItemNum)
if triggerData.UnlockCondition == LuaConst.TriggerType.Login_Count and data.taskData.state == operation_activity_info_pb.StateDoing then
cellTable.state_Btn:SetState(3)
else
cellTable.state_Btn:SetState(data.taskData.state - 1)
end
end
function UIGoldenHeroFame:OnCellClicked(scrollRect, index, cellTable, target, data)
if target == cellTable.item1.event_Click then
UTL.ItemTips.ShowCommonTipsById(data.Cfg.Item_Table[1].ItemID)
elseif target == cellTable.item2.event_Click then
UTL.ItemTips.ShowCommonTipsById(data.Cfg.Item_Table[2].ItemID)
elseif target == cellTable.btn_Go then
--处理一个前往的逻辑
local triggerData = DataSheetManager.TriggerType:GetDataByID(DataSheetManager.TriggerID:GetDataByID(data.Cfg.TriggerID).Unlock_Table[1].UnlockCondition)
local unlockId = DataSheetManager.ItemSource:GetDataByID(triggerData.ItemSourceID).UnlockID
if unlockId > 0 and not MDL.Unlock.IsUnlock(unlockId) then
CTL.Tips.AddTipsMsg(Const_IDS["IDS_7DayActivity_Hint_6"])
return
end
if triggerData.ItemSourceID == MDL.ItemSources.SourceType.GoldenHeroStory or triggerData.ItemSourceID == MDL.ItemSources.SourceType.GoldenHeroBoss then
if not MDL.GoldenHeroMain.IsActivityInFuncTime(self.activityId) then
CTL.Tips.AddTipsMsg(Const_IDS["IDS_GoldHeroActivity_TimeHint3"])
return
else
CTL.ItemSources.ExecuteSourceFunctionById(triggerData.ItemSourceID, nil, {heroType = self.heroType, activityId = self.activityId})
end
else
CTL.ItemSources.ExecuteSourceFunctionById(triggerData.ItemSourceID, nil, {heroType = self.heroType, activityId = self.activityId})
end
elseif target == cellTable.btn_Receive then
MDL.GoldenHeroFame.ClaimGoldHeroTaskDataRewardRequest(self.activityId, self.heroType, data.Cfg.TaskID)
end
end
function UIGoldenHeroFame:OnValueChanged(comp, index)
if comp == self.group_TaskTab then
self:ShowTaskList(index + 1)
end
end
function UIGoldenHeroFame:RefreshView(isInit)
local exp = 0
local isReward = false
local stateID = self.stateID or 0
self.stateID, exp = MDL.GoldenHeroFame.GetCurrentFameLevelIDAndExp(self.activityId, self.heroType)
if not isInit and stateID ~= self.stateID then
self.effect_LevelUp:PlayUIEffect()
end
isReward, self.rewardID = MDL.GoldenHeroFame.HasReward(self.activityId, self.heroType)
self.taskLevel = DataSheetManager.GoldHeroActivityTaskLevel[self.heroType]:GetDataByLevelID(self.stateID)
local taskLevelCount = DataSheetManager.GoldHeroActivityTaskLevel[self.heroType]:GetDataCount()
self.nextTaskLevel = DataSheetManager.GoldHeroActivityTaskLevel[self.heroType]:GetDataByLevelID(self.stateID + 1 <= taskLevelCount and self.stateID + 1 or self.stateID)
self.rewardTaskLevelCfg = DataSheetManager.GoldHeroActivityTaskLevel[self.heroType]:GetDataByLevelID(self.rewardID <= taskLevelCount and self.rewardID or taskLevelCount)
-- 武将立绘
UIUtils.SetImageByAssetBundle(self.img_Hero, self.modeData.MainPrefabHero) -- 关卡图片
UIUtils.SetLabel(self.txt_Fame, UIUtils.GetLocalizedTxt(Const_IDS.IDS_GoldHeroActivity_Task_Hint_4)..UIUtils.GetLocalizedTxt(Const_IDS[self.taskLevel.LevelName])) -- 声明等级名
UIUtils.SetLabel(self.txt_Exp, exp.."/"..self.nextTaskLevel.LevelExp) -- 升级进度
self.slider_Exp.value = exp/self.nextTaskLevel.LevelExp
UIUtils.SetActive(self.btn_Reward, isReward)
if self.rewardID > taskLevelCount then
UIUtils.SetActive(self.group_Reward, false)
else
UIUtils.SetActive(self.group_Reward, true)
for k,v in ipairs(self.itemList) do
local itemData = self.rewardTaskLevelCfg.Item_Table[k]
if itemData then
UIUtils.SetActive(v.gameObject, true)
UTL.Item.SetItemCell(v, itemData.ItemID, itemData.ItemNum)
UIUtils.SetActive(v.effect_Receive.gameObject, isReward)
if isReward then
v.effect_Receive:PlayUIEffect()
else
v.effect_Receive:StopUIEffect()
end
end
end
end
-- 任务页签
for k,v in ipairs(self.toggleTitles) do
self.group_TaskTab:SetRedPoint(k - 1, MDL.GoldenHeroFame.GetTaskRewardRedPointByActivityID_TaskType(self.activityId, self.heroType, k))
end
self.taskTypeDataList = MDL.GoldenHeroFame.GetTaskListByHeroType_TabID(self.activityId)
self:ShowTaskList(self.curSelectTabID)
UIUtils.SetActive(self.btn_Receive_All, MDL.GoldenHeroFame.GetTaskRewardRedPointByActivityID(self.activityId))
end
function UIGoldenHeroFame:ShowTaskList(taskType)
self.curSelectTabID = taskType
self.loop_Task:ClearCells()
for k,v in ipairs(self.taskTypeDataList[taskType]) do
self.loop_Task:AddData(v,0)
end
end
function UIGoldenHeroFame:OnCloseActivitySelf(viewClassPath, activityId)
if viewClassPath == self.__viewClassPath then
if self.activityId and activityId == self.activityId then
self:CloseView(true)
end
end
end
function UIGoldenHeroFame:SetPortrait()
local mainPrefabMode = self.modeData.MainPrefabMode
local MainViewPrefabModeEnum = CTL.GoldenHeroMain.MainViewPrefabMode
if mainPrefabMode == MainViewPrefabModeEnum.AnyPortrait then
self.AnyPortraitPath = self.modeData.MainPrefabHero
self.AnyPortraitObj = CTL.GoldenHeroMain.ShowAnyPortrait(self.modeData, self.group_2DDynamicBG.transform, self, true)
else
local bgTexturePath = ConstAssetPathConfig.DefaultImage
local EmptyLightObjPath = ConstAssetPathConfig.EmptyLightObjPath
local flagEffectPath = ConstAssetPathConfig.flagEffectPath
local modeData = self.modeData
local heroOffsetX = 0
local heroOffsetY = 0
local heroSize = 1
-- 根据heroType调整其立绘缩放与偏移
if self.heroType == MDL.GoldenHeroMain.HeroType.ZJ then
heroSize = 0.51
heroOffsetX = 3.89
heroOffsetY = -0.21
elseif self.heroType == MDL.GoldenHeroMain.HeroType.GN then
heroSize = modeData.HeroSize
heroOffsetX = modeData.HeroOffsetX
heroOffsetY = modeData.HeroOffsetY
elseif self.heroType == MDL.GoldenHeroMain.HeroType.ZL then
heroSize = 5
heroOffsetX = 3.44
heroOffsetY = -0.29
elseif self.heroType == MDL.GoldenHeroMain.HeroType.SJ then
heroSize = 4.1
heroOffsetX = 2.87
heroOffsetY = -0.72
elseif self.heroType == MDL.GoldenHeroMain.HeroType.TSC then
heroSize = 4.8
heroOffsetX = 0.09
heroOffsetY = -0.15
elseif self.heroType == MDL.GoldenHeroMain.HeroType.HYY then
heroSize = 4.8
heroOffsetX = 0.56
heroOffsetY = -0.13
elseif self.heroType == MDL.GoldenHeroMain.HeroType.JX then
heroSize = 5.5
heroOffsetX = 1.7
heroOffsetY = -0.13
elseif self.heroType == MDL.GoldenHeroMain.HeroType.LM then
heroSize = 5
heroOffsetX = 2
heroOffsetY = -0.15
end
UTL.UIRender.Create2DTextureBgScene(self.modelComponentDataHandle, bgTexturePath, nil, nil)
UTL.UIRender.CreateNonPlayerModel(self.modelComponentDataHandle, modeData.MainPrefabHero, heroSize, 0, EmptyLightObjPath)
UTL.UIRender.SetHeroParentPos(self.modelComponentDataHandle, heroOffsetX, heroOffsetY, 0)
UTL.UIRender.SetCamerOrthographic(2.55)
UTL.UIRender.CreateSceneEffect(self.modelComponentDataHandle, flagEffectPath, 3.07, 1.33, -2.77, 5)
-- 背景图片和旗子应该隐藏防止遮挡后面的场景
UIUtils.SetActive(self.bg_Bottom, false)
UIUtils.SetActive(self.effect_Flag, false)
end
end
return UIGoldenHeroFame