PGRData/Script/matrix/xui/xuihostelcharacterwork/XUiHostelCharacterWork.lua

245 lines
11 KiB
Lua

local XUiHostelCharacterWork = XUiManager.Register("UiHostelCharacterWork")
local table_insert = table.insert
-- auto
-- Automatic generation of code, forbid to edit
function XUiHostelCharacterWork:InitAutoScript()
self:AutoInitUi()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiHostelCharacterWork:AutoInitUi()
self.PanelAsset = self.Transform:Find("SafeAreaContentPane/PanelAsset")
self.PanelTool1 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool1")
self.ImgTool1 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool1/ImgTool1"):GetComponent("Image")
self.TxtTool1 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool1/TxtTool1"):GetComponent("Text")
self.PanelTool2 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool2")
self.ImgTool2 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool2/ImgTool2"):GetComponent("Image")
self.TxtTool2 = self.Transform:Find("SafeAreaContentPane/PanelAsset/PanelTool2/TxtTool2"):GetComponent("Text")
self.PanelCharTopButton = self.Transform:Find("SafeAreaContentPane/PanelCharTopButton")
self.BtnBack = self.Transform:Find("SafeAreaContentPane/PanelCharTopButton/BtnBack"):GetComponent("Button")
self.BtnMainUi = self.Transform:Find("SafeAreaContentPane/PanelCharTopButton/BtnMainUi"):GetComponent("Button")
self.PanelSelectWork = self.Transform:Find("SafeAreaContentPane/PanelSelectWork")
self.PanelSlotInfo = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelSlotInfo")
self.TxtSlotName = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelSlotInfo/TxtSlotName"):GetComponent("Text")
self.TxtProductName = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelSlotInfo/TxtProductName"):GetComponent("Text")
self.TxtProductValue = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelSlotInfo/TxtProductValue"):GetComponent("Text")
self.PanelRight = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight")
self.SViewIdleCharList = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/SViewIdleCharList"):GetComponent("ScrollRect")
self.PanelIdleCharContent = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/SViewIdleCharList/Viewport/PanelIdleCharContent")
self.GridIdleCharacter = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/SViewIdleCharList/Viewport/PanelIdleCharContent/GridIdleCharacter")
self.TxtCostVitality = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/TxtCostVitality"):GetComponent("Text")
self.TxtCostTime = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/TxtCostTime"):GetComponent("Text")
self.BtnCharWork = self.Transform:Find("SafeAreaContentPane/PanelSelectWork/PanelRight/BtnCharWork"):GetComponent("Button")
end
function XUiHostelCharacterWork:GetAutoKey(uiNode,eventName)
if not uiNode then return end
return eventName .. uiNode:GetHashCode()
end
function XUiHostelCharacterWork: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("XUiHostelCharacterWork: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 XUiHostelCharacterWork:AutoAddListener()
self.AutoCreateListeners = {}
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnBtnBackClick)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, self.OnBtnMainUiClick)
XUiHelper.RegisterClickEvent(self, self.BtnCharWork, self.OnBtnCharWorkClick)
end
-- auto
function XUiHostelCharacterWork:OnOpen(slotType, deveiceObj, fCloseCallBack)
self:InitAutoScript()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.HostelElectric, XDataCenter.ItemManager.ItemId.HostelMat)
self.DeviceObj = deveiceObj
self.GridIdleCharacter.gameObject:SetActive(false)
self.SlotType = slotType
self.FCloseCallBack = fCloseCallBack
self.CurSelectIndex = 0
self.IdleCharUiItem = {}
self:UpdateView()
end
function XUiHostelCharacterWork:OnBtnBackClick()
CS.XUiManager.ViewManager:Pop()
if self.FCloseCallBack then
self.FCloseCallBack()
end
end
function XUiHostelCharacterWork:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiHostelCharacterWork:OnBtnCharWorkClick()
if self.CurSelectIndex == 0 then
XUiManager.TipText("HostelSelectCharWork")
return
end
local charId = self.IdleCharUiItem[self.CurSelectIndex]:GetCharId()
if charId == 0 then
return
end
local fSucCallBack = function ()
self.CurSelectIndex = 0
self:UpdateView()
self.DeviceObj:CheckShowHud()
end
XDataCenter.HostelManager.ReqWorkInFunctionDevice(charId, self.SlotType, fSucCallBack)
end
function XUiHostelCharacterWork:UpdateView()
self.SlotBelongType = 0
local slotConfig = XDataCenter.HostelManager.GetFuncDeviceSlotTemplate(self.SlotType)
if not slotConfig then
return
end
self.SlotBelongType = slotConfig.BelongType
if self:IsWorkSlotEmpty() then
self.PanelRight.gameObject:SetActive(true)
self:UpdateIdleList()
if self.CurSelectIndex == 0 then
local hud = self.DeviceObj:GetDisplayHud()
if hud then
hud:ShowJiantou()
end
end
else
self.PanelRight.gameObject:SetActive(false)
end
if self.SlotBelongType == XDataCenter.HostelManager.FunctionDeviceType.PowerStation then
self:UpdatePowerStationSlotInfo(slotConfig)
elseif self.SlotBelongType == XDataCenter.HostelManager.FunctionDeviceType.Factory then
self:UpdateFactorySlotInfo(slotConfig)
end
end
function XUiHostelCharacterWork:IsWorkSlotEmpty()
---发电站槽位
if self.SlotBelongType == XDataCenter.HostelManager.FunctionDeviceType.PowerStation then
return XDataCenter.HostelManager.CheckWorkSlotIsEmpty(self.SlotType)
elseif self.SlotBelongType == XDataCenter.HostelManager.FunctionDeviceType.Factory then
return XDataCenter.HostelManager.CheckWorkSlotIsIdle(self.SlotType)
--TODO elseif 其他槽位
end
return true
end
---发电站信息
function XUiHostelCharacterWork:UpdatePowerStationSlotInfo(slotConfig)
self.TxtCostVitality.text = CS.XTextManager.GetText("CharacterVitality",slotConfig.FunctionParam[2])
local dataTime = XUiHelper.GetTime(slotConfig.FunctionParam[1] * slotConfig.FunctionParam[3], XUiHelper.TimeFormatType.SHOP)
self.TxtCostTime.text = dataTime
self.TxtSlotName.text = slotConfig.Name
self.TxtProductName.text = CS.XTextManager.GetText("HostelProductElectric")
local deviceConfig = XDataCenter.HostelManager.GetFuncDeviceCurLvlTemplate(XDataCenter.HostelManager.FunctionDeviceType.PowerStation)
if not deviceConfig then return end
local slotData = XDataCenter.HostelManager.GetWorkCharBySlot(self.SlotType)
if slotData and slotData.BeginTime > 0 then
self.PanelRight.gameObject:SetActive(false)
local curTime = XTime.GetServerNowTimestamp()
local passTime = curTime - slotData.BeginTime
local electric = math.floor(passTime/slotConfig.FunctionParam[3]) *(slotConfig.FunctionParam[4] + deviceConfig.FunctionParam[4])
if electric < 0 then
electric = 0
end
self.TxtProductValue.text = tostring(electric).."/"..tostring(slotConfig.FunctionParam[1] *(slotConfig.FunctionParam[4] + deviceConfig.FunctionParam[4]))
else
self.PanelRight.gameObject:SetActive(true)
self.TxtProductValue.text = CS.XTextManager.GetText("HostelPerSlot",slotConfig.FunctionParam[1] *(slotConfig.FunctionParam[4] + deviceConfig.FunctionParam[4]))
end
end
---工厂信息
function XUiHostelCharacterWork:UpdateFactorySlotInfo(slotConfig)
self.TxtCostVitality.text = CS.XTextManager.GetText("CharacterVitality",slotConfig.FunctionParam[2])
local dataTime = XUiHelper.GetTime(slotConfig.FunctionParam[1], XUiHelper.TimeFormatType.SHOP)
self.TxtCostTime.text = dataTime
self.TxtSlotName.text = slotConfig.Name
self.TxtProductName.text = CS.XTextManager.GetText("HostelSlotProduct", XDataCenter.ItemManager.GetItemName(slotConfig.FunctionParam[3]))
local deviceConfig = XDataCenter.HostelManager.GetFuncDeviceCurLvlTemplate(XDataCenter.HostelManager.FunctionDeviceType.Factory)
if not deviceConfig then return end
local count = slotConfig.FunctionParam[4] + deviceConfig.FunctionParam[1]
self.TxtProductValue.text = CS.XTextManager.GetText("HostelPerSlot",count)
end
function XUiHostelCharacterWork:UpdateIdleList()
local charList = XDataCenter.CharacterManager.GetOwnCharacterList() or {}
local idleCharList = {}
for _,v in ipairs(charList) do
if XDataCenter.HostelManager.IsCharacterInRest(v.Id) and not XDataCenter.HostelManager.IsCharacterInWork(v.Id) then
table_insert(idleCharList,v)
end
end
table.sort(idleCharList, function (a,b)
return a.Id > b.Id
end )
local datas = {}
for i,v in ipairs(idleCharList) do
table_insert(datas,{Index = i, Id = v.Id})
end
local callback = function (index)
self:OnSelectIdleItem(index)
end
local onCreate = function(item, data)
item:SetData(data.Index,data.Id)
item:SetClickCallBack(callback)
end
XUiHelper.CreateTemplates(self, self.IdleCharUiItem, datas, XUiGridIdleCharacter.New, self.GridIdleCharacter.gameObject, self.PanelIdleCharContent, onCreate)
if #datas > 0 and self.CurSelectIndex == 0 then
self:OnSelectIdleItem(1)
end
end
function XUiHostelCharacterWork:OnSelectIdleItem(index)
if self.CurSelectIndex > 0 then
self.IdleCharUiItem[self.CurSelectIndex]:SetSelect(false)
end
self.CurSelectIndex = index
if self.CurSelectIndex > 0 then
self.IdleCharUiItem[self.CurSelectIndex]:SetSelect(true)
local charId = self.IdleCharUiItem[self.CurSelectIndex]:GetCharId()
self:UpdateSceneCharModel(charId)
end
end
function XUiHostelCharacterWork:UpdateSceneCharModel()
local hud = self.DeviceObj:GetDisplayHud()
if hud then
hud:HideContent()
end
-- body
-- 现在选择模型
end