246 lines
11 KiB
Lua
246 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
|