261 lines
No EOL
10 KiB
Lua
261 lines
No EOL
10 KiB
Lua
XUiGridTask = XClass(nil, "XUiGridTask")
|
|
|
|
function XUiGridTask:Ctor(rootUi, ui, data, parentCb)
|
|
self.RootUi = rootUi
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.ParentCb = parentCb or function() end
|
|
self.RewardPanelList = {}
|
|
self:InitAutoScript()
|
|
self.GridCommon.gameObject:SetActive(false)
|
|
self.ImgComplete.gameObject:SetActive(false)
|
|
self:ResetData(data)
|
|
self.PanelAnimation.gameObject:SetActive(true)
|
|
end
|
|
|
|
function XUiGridTask:ResetData(data)
|
|
if not self.GameObject:Exist() then
|
|
return
|
|
end
|
|
|
|
local temp = XDataCenter.TaskManager.GetTaskTemplate(data.Id)
|
|
self.ImgComplete.gameObject:SetActive(temp.Type == XDataCenter.TaskManager.TaskType.Achievement and data.State == XDataCenter.TaskManager.TaskState.Finish)
|
|
self.Data = data
|
|
local config = XDataCenter.TaskManager.GetTaskTemplate(self.Data.Id)
|
|
self.tableData = config
|
|
self.TxtTaskName.text = config.Title
|
|
self.TxtTaskDescribe.text = config.Desc
|
|
self.TxtSubTypeTip.text = config.Suffix or ""
|
|
self.RootUi:SetUiSprite(self.ImgTaskType, config.Icon)
|
|
|
|
self:UpdateProgress(self.Data)
|
|
|
|
local rewards = XRewardManager.GetRewardList(config.RewardId)
|
|
-- reset reward panel
|
|
for i = 1, #self.RewardPanelList do
|
|
self.RewardPanelList[i]:Refresh()
|
|
end
|
|
|
|
if not rewards then
|
|
return
|
|
end
|
|
|
|
for i = 1, #rewards do
|
|
local panel = self.RewardPanelList[i]
|
|
if not panel then
|
|
if #self.RewardPanelList == 0 then
|
|
panel = XUiGridCommon.New(self.RootUi, self.GridCommon)
|
|
else
|
|
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommon)
|
|
ui.transform:SetParent(self.GridCommon.parent, false)
|
|
panel = XUiGridCommon.New(self.RootUi, ui)
|
|
end
|
|
table.insert(self.RewardPanelList, panel)
|
|
end
|
|
|
|
panel:Refresh(rewards[i])
|
|
end
|
|
|
|
end
|
|
|
|
-- auto
|
|
-- Automatic generation of code, forbid to edit
|
|
function XUiGridTask:InitAutoScript()
|
|
self:AutoInitUi()
|
|
self.SpecialSoundMap = {}
|
|
self:AutoAddListener()
|
|
end
|
|
|
|
function XUiGridTask:AutoInitUi()
|
|
self.PanelAnimation = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation", nil)
|
|
self.ImgTaskType = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/ImgTaskType", "Image")
|
|
self.ImgProgress = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/ProgressBg/ImgProgress", "Image")
|
|
self.GridCommon = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TaskGridList/Viewport/Content/GridCommon", nil)
|
|
self.ImgIcon = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TaskGridList/Viewport/Content/GridCommon/ImgIcon", "Image")
|
|
self.ImgQuality = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TaskGridList/Viewport/Content/GridCommon/ImgQuality", "Image")
|
|
self.BtnClick = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TaskGridList/Viewport/Content/GridCommon/BtnClick", "Button")
|
|
self.TxtCount = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TaskGridList/Viewport/Content/GridCommon/TxtCount", "Text")
|
|
self.BtnFinish = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/BtnFinish", "Button")
|
|
self.BtnSkip = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/BtnSkip", "Button")
|
|
self.TxtTaskName = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TxtTaskName", "Text")
|
|
self.TxtTaskDescribe = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TxtTaskDescribe", "Text")
|
|
self.TxtTaskNumQian = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TxtTaskNumQian", "Text")
|
|
self.TxtSubTypeTip = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/TxtSubTypeTip", "Text")
|
|
self.ImgComplete = XUiHelper.TryGetComponent(self.Transform, "PanelAnimation/ImgComplete", "Image")
|
|
end
|
|
|
|
function XUiGridTask:GetAutoKey(uiNode, eventName)
|
|
if not uiNode then return end
|
|
return eventName .. uiNode:GetHashCode()
|
|
end
|
|
|
|
function XUiGridTask:RegisterListener(uiNode, eventName, func)
|
|
local key = self:GetAutoKey(uiNode, eventName)
|
|
if not key then return end
|
|
local listener = self.AutoCreateListeners[key]
|
|
if listener ~= nil then
|
|
uiNode[eventName]:RemoveListener(listener)
|
|
end
|
|
|
|
if func ~= nil then
|
|
if type(func) ~= "function" then
|
|
XLog.Error("XUiGridTask:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
|
|
end
|
|
|
|
listener = function(...)
|
|
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
|
|
func(self, ...)
|
|
end
|
|
|
|
uiNode[eventName]:AddListener(listener)
|
|
self.AutoCreateListeners[key] = listener
|
|
end
|
|
end
|
|
|
|
function XUiGridTask:AutoAddListener()
|
|
self.AutoCreateListeners = {}
|
|
XUiHelper.RegisterClickEvent(self, self.BtnClick, self.OnBtnClickClick)
|
|
XUiHelper.RegisterClickEvent(self, self.BtnFinish, self.OnBtnFinishClick)
|
|
XUiHelper.RegisterClickEvent(self, self.BtnSkip, self.OnBtnSkipClick)
|
|
end
|
|
-- auto
|
|
function XUiGridTask:OnBtnClickClick()
|
|
|
|
end
|
|
|
|
|
|
function XUiGridTask:OnBtnFinishClick()
|
|
local weaponCount = 0
|
|
local chipCount = 0
|
|
for i = 1, #self.RewardPanelList do
|
|
local rewardsId = self.RewardPanelList[i].TemplateId
|
|
if XDataCenter.EquipManager.IsClassifyEqualByTemplateId(rewardsId, XEquipConfig.Classify.Weapon) then
|
|
weaponCount = weaponCount + 1
|
|
elseif XDataCenter.EquipManager.IsClassifyEqualByTemplateId(rewardsId, XEquipConfig.Classify.Awareness) then
|
|
chipCount = chipCount + 1
|
|
end
|
|
end
|
|
if weaponCount > 0 and XDataCenter.EquipManager.CheckBagCount(weaponCount, XEquipConfig.Classify.Weapon) == false or
|
|
chipCount > 0 and XDataCenter.EquipManager.CheckBagCount(chipCount, XEquipConfig.Classify.Awareness) == false then
|
|
return
|
|
end
|
|
XDataCenter.TaskManager.FinishTask(self.Data.Id, function(rewardGoodsList)
|
|
self.ImgComplete.gameObject:SetActive(true)
|
|
self.BtnFinish.gameObject:SetActive(false)
|
|
|
|
XUiManager.OpenUiObtain(rewardGoodsList, nil, function()
|
|
self.ParentCb()
|
|
local nextId = XTaskConfig.GetNextTaskId(self.tableData.Id)
|
|
local nextTask = nextId and XDataCenter.TaskManager.GetTaskDataById(nextId)
|
|
if self.tableData.Type == XDataCenter.TaskManager.TaskType.Achievement then
|
|
if nextTask then
|
|
self.Data.State = XDataCenter.TaskManager.TaskState.Finish
|
|
-- local ui = CS.UnityEngine.Object.Instantiate(self.GameObject, self.Transform.parent)
|
|
--local grid = XUiGridTask.New(self.RootUi, ui, self.Data, self.ParentCb)
|
|
self:ResetData(nextTask)
|
|
else
|
|
local parent = self.Transform.parent
|
|
local grandParent = parent.parent
|
|
self.Transform:SetParent(grandParent)
|
|
self.Transform:SetParent(parent)
|
|
end
|
|
else
|
|
if nextTask then
|
|
self:ResetData(nextTask)
|
|
else
|
|
self.GameObject:SetActive(false)
|
|
end
|
|
end
|
|
end, nil)
|
|
end)
|
|
end
|
|
|
|
function XUiGridTask:OnBtnSkipClick()
|
|
if XDataCenter.RoomManager.RoomData ~= nil then
|
|
local title = CS.XTextManager.GetText("TipTitle")
|
|
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceQuitRoom")
|
|
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
|
|
XLuaUiManager.RunMain()
|
|
local skipId = XDataCenter.TaskManager.GetTaskTemplate(self.Data.Id).SkipId
|
|
XFunctionManager.SkipInterface(skipId)
|
|
end)
|
|
else
|
|
local skipId = XDataCenter.TaskManager.GetTaskTemplate(self.Data.Id).SkipId
|
|
XFunctionManager.SkipInterface(skipId)
|
|
end
|
|
end
|
|
|
|
function XUiGridTask:UpdateProgress(data)
|
|
self.Data = data
|
|
local config = XDataCenter.TaskManager.GetTaskTemplate(data.Id)
|
|
if #config.Condition < 2 then--显示进度
|
|
self.ImgProgress.transform.parent.gameObject:SetActive(true)
|
|
self.TxtTaskNumQian.gameObject:SetActive(true)
|
|
local result = config.Result > 0 and config.Result or 1
|
|
XTool.LoopMap(self.Data.Schedule, function(_, pair)
|
|
self.ImgProgress.fillAmount = pair.Value / result
|
|
self.TxtTaskNumQian.text = pair.Value .. "/" .. result
|
|
end)
|
|
else
|
|
self.ImgProgress.transform.parent.gameObject:SetActive(false)
|
|
self.TxtTaskNumQian.gameObject:SetActive(false)
|
|
end
|
|
|
|
self.BtnFinish.gameObject:SetActive(false)
|
|
self.BtnSkip.gameObject:SetActive(false)
|
|
|
|
if self.Data.State == XDataCenter.TaskManager.TaskState.Achieved then
|
|
self.BtnFinish.gameObject:SetActive(true)
|
|
elseif self.Data.State ~= XDataCenter.TaskManager.TaskState.Achieved and self.Data.State ~= XDataCenter.TaskManager.TaskState.Finish then
|
|
self.BtnSkip.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
|
|
--==============================--
|
|
--desc: 播放入场动画
|
|
--@cb: 回调
|
|
--@second: 延时回调时间,默认为动画长度
|
|
--==============================--
|
|
function XUiGridTask:PlayEnter(cb, second)
|
|
--XUiHelper.PlayAnimation(self.PanelAnimation, "GTEnter")
|
|
if not second then
|
|
-- local animation = self.Transform:GetComponent("Animation")
|
|
-- animation.clip = animation:GetClip("GTEnter")
|
|
second = 1
|
|
end
|
|
|
|
if cb then
|
|
XScheduleManager.Schedule(cb, second * 1000, 1, second * 1000)
|
|
end
|
|
end
|
|
|
|
--==============================--
|
|
--desc: 播放出场动画
|
|
--@cb: 回调
|
|
--@isDelete: 动画结束是否删除对象
|
|
--==============================--
|
|
function XUiGridTask:PlayExit(cb)
|
|
--XLog.Debug("XUiGridTask:PlayExit")
|
|
cb()
|
|
-- if isDelete then
|
|
-- CS.UnityEngine.Object.Destroy(self.GameObject)
|
|
-- end
|
|
-- XUiHelper.PlayAnimation(self.PanelAnimation, "GTExit", nil, function ()
|
|
-- XLog.Debug("Finish")
|
|
-- if cb then
|
|
-- cb ()
|
|
-- end
|
|
-- if isDelete then
|
|
-- CS.UnityEngine.Object.Destroy(self.GameObject)
|
|
-- end
|
|
-- end)
|
|
end
|
|
|
|
function XUiGridTask:RefreshData(task)
|
|
--XLog.Debug("XUiGridTask:RefreshData:", task)
|
|
self:ResetData(task)
|
|
-- self:PlayExit(function ()
|
|
-- self:ResetData(task)
|
|
-- self:PlayEnter(cb, second)
|
|
-- end)
|
|
end |