PGRData/Script/matrix/xui/xuimission/XUiPanelMissionGrid.lua

291 lines
No EOL
8.9 KiB
Lua

XUiPanelMissionGrid = XClass(nil, "XUiPanelMissionGrid")
function XUiPanelMissionGrid:Ctor(ui)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.GridList = {}
XTool.InitUiObject(self)
self:InitAutoScript()
self.Timer = nil
self.ShowCompletedAnimation = false
self.TxtTimeRect = self.TxtTime.gameObject:GetComponent("RectTransform")
self.GridCommonA.gameObject:SetActive(false)
end
function XUiPanelMissionGrid:OnRecycle()
self:StopTimer()
end
function XUiPanelMissionGrid:StartTimer()
if self.Timer then
self:StopTimer()
end
self.Timer = XScheduleManager.ScheduleForever(function()
self:UpdateTime()
end, XScheduleManager.SECOND)
end
function XUiPanelMissionGrid:StopTimer()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
self.Timer = nil
end
end
function XUiPanelMissionGrid:UpdateTime()
if not self.TaskData or not self.TaskData.Task then
return
end
local curTime = XTime.GetServerNowTimestamp()
local completeTime = self.TaskData.Task.UtcFinishTime
if not self.TxtTime:Exist() then
return
end
local offset = completeTime - curTime
if offset > 0 then
self.TxtTime.text = CS.XDateUtil.SecondsToTimeString(offset)
else
self.TxtTime.text = "00:00:00"
self:StopTimer()
end
end
function XUiPanelMissionGrid:PlayCompletedAnimation(cb)
self:PlayAnimation("AniMissionTaskComplete", cb)
end
function XUiPanelMissionGrid:Init(parent)
self.Parent = parent
self.MainRewardGrid = XUiGridCommon.New(self.Parent, self.GridCommon)
end
function XUiPanelMissionGrid:SetupContent(taskData)
if not taskData then
return
end
self.TaskData = taskData
self:SetupBaseInfo()
self:SetupTask()
end
function XUiPanelMissionGrid:SetupTask()
self:StopTimer()
if self.TaskData.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Normal then
return
end
local task = self.TaskData.Task
if not task then
return
end
self.BtnFinish.gameObject:SetActive(task.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Complete)
self.PanelStop.gameObject:SetActive(task.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Accept)
if task.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Accept then
self:UpdateTime()
self:StartTimer()
elseif task.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Complete then
self.TxtTime.text = "00:00:00"
end
end
--设置基础信息
function XUiPanelMissionGrid:SetupBaseInfo()
local taskCfg = self.TaskData.TaskCfg
if not taskCfg then
return
end
self.TxtName.text = taskCfg.Name
self.TxtTime.text = CS.XDateUtil.SecondsToTimeString(taskCfg.Duration)
self.TxtTimeRect.anchoredPosition = CS.UnityEngine.Vector2(0, -16.2)
self.BtnSend.gameObject:SetActive(self.TaskData.Task.Status == XDataCenter.TaskForceManager.TaskForceTaskStatus.Normal)
self.BtnFinish.gameObject:SetActive(false)
self.PanelStop.gameObject:SetActive(false)
--self.BtnTimeGo.gameObject:SetActive(false)
self.Parent:SetUiSprite(self.ImgQuality, CS.XGame.ClientConfig:GetString("MissionQuality"..taskCfg.Quality))
self:SetupReward(taskCfg.ShowId, taskCfg.RewardId)
end
--设置奖励
function XUiPanelMissionGrid:SetupReward(mainRewardId, rewardId)
--顯示奖励
local rewards = XRewardManager.GetRewardList(mainRewardId)
if self.MainRewardGrid then
self.MainRewardGrid:Refresh(rewards[1])
self.MainRewardGrid.TxtCount.gameObject:SetActive(false)
end
rewards = XRewardManager.GetRewardList(rewardId)
if not rewards then
return
end
--显示的奖励
local start = 0
if rewards then
for i, item in ipairs(rewards) do
start = i
local grid
if self.GridList[i] then
grid = self.GridList[i]
else
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommonA)
grid = XUiGridCommon.New(self.Parent, ui)
grid.Transform:SetParent(self.PanelLayoutReward, false)
self.GridList[i] = grid
end
grid:Refresh(item)
grid.GameObject:SetActive(true)
end
end
for j = start + 1, #self.GridList do
self.GridList[j].GameObject:SetActive(false)
end
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiPanelMissionGrid:InitAutoScript()
self:AutoInitUi()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiPanelMissionGrid:AutoInitUi()
-- self.PanelTime = self.Transform:Find("PanelTime")
-- self.TxtTime = self.Transform:Find("PanelTime/TxtTime"):GetComponent("Text")
-- self.PanelRaward = self.Transform:Find("PanelRaward")
-- self.PanelScrollView = self.Transform:Find("PanelRaward/PanelScrollView")
-- self.PanelLayoutReward = self.Transform:Find("PanelRaward/PanelScrollView/Viewport/PanelLayoutReward")
-- self.GridCommonA = self.Transform:Find("PanelRaward/PanelScrollView/Viewport/PanelLayoutReward/GridCommon")
-- self.PanelMainReward = self.Transform:Find("PanelMainReward")
-- self.GridCommon = self.Transform:Find("PanelMainReward/GridCommon")
-- self.PanelBase = self.Transform:Find("PanelBase")
-- self.BtnFinish = self.Transform:Find("PanelBase/BtnFinish"):GetComponent("Button")
-- self.PanelReceive = self.Transform:Find("PanelBase/BtnFinish/PanelReceive")
-- self.BtnSend = self.Transform:Find("PanelBase/BtnSend"):GetComponent("Button")
-- self.PanelStop = self.Transform:Find("PanelBase/PanelStop")
-- self.BtnTimeGo = self.Transform:Find("PanelBase/PanelStop/BtnTimeGo"):GetComponent("Button")
-- self.BtnStop = self.Transform:Find("PanelBase/PanelStop/BtnStop"):GetComponent("Button")
-- self.PanelTitle = self.Transform:Find("PanelTitle")
-- self.ImgQuality = self.Transform:Find("PanelTitle/ImgQuality"):GetComponent("Image")
-- self.TxtName = self.Transform:Find("PanelTitle/TxtName"):GetComponent("Text")
end
function XUiPanelMissionGrid:GetAutoKey(uiNode, eventName)
if not uiNode then
return
end
return eventName .. uiNode:GetHashCode()
end
function XUiPanelMissionGrid: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("XUiPanelMissionGrid: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 XUiPanelMissionGrid:AutoAddListener()
self.AutoCreateListeners = {}
XUiHelper.RegisterClickEvent(self, self.BtnFinish, self.OnBtnFinishClick)
XUiHelper.RegisterClickEvent(self, self.BtnSend, self.OnBtnSendClick)
XUiHelper.RegisterClickEvent(self, self.BtnTimeGo, self.OnBtnTimeGoClick)
XUiHelper.RegisterClickEvent(self, self.BtnStop, self.OnBtnStopClick)
end
-- auto
function XUiPanelMissionGrid:OnBtnTimeGoClick()
if not self.TaskData then
return
end
local task = self.TaskData.Task
if not task then
return
end
if task.Status ~= XDataCenter.TaskForceManager.TaskForceTaskStatus.Accept then
return
end
XLuaUiManager.Open("UiMissionAddSpeedTip", self.TaskData)
end
function XUiPanelMissionGrid:OnBtnFinishClick()
if not self.TaskData then
return
end
local task = self.TaskData.Task
if not task then
return
end
if task.Status ~= XDataCenter.TaskForceManager.TaskForceTaskStatus.Complete then
return
end
XDataCenter.TaskForceManager.AcceptTaskForceRewardRequest(task.TaskId, function(result)
XLuaUiManager.Open("UiMissionCompleted", result, task.Members[1])
end)
end
function XUiPanelMissionGrid:OnBtnSendClick()
XLuaUiManager.Open("UiMissionTeam", self.TaskData)
end
function XUiPanelMissionGrid:OnBtnStopClick()
if not self.TaskData then
return
end
local task = self.TaskData.Task
if not task then
return
end
if task.Status ~= XDataCenter.TaskForceManager.TaskForceTaskStatus.Accept then
return
end
XUiManager.DialogTip(CS.XTextManager.GetText("MissionTeamCountTipTile"), CS.XTextManager.GetText("MissionGiveupTaskContent"), XUiManager.DialogType.Normal, nil, function()
XDataCenter.TaskForceManager.GiveUpTaskForceTaskRequest(task.TaskId)
end)
end
return XUiPanelMissionGrid