393 lines
17 KiB
Lua
393 lines
17 KiB
Lua
|
local XUiHostelRest = XLuaUiManager.Register(XLuaUi, "UiHostelRest")
|
||
|
local table_insert = table.insert
|
||
|
|
||
|
-- auto
|
||
|
-- Automatic generation of code, forbid to edit
|
||
|
function XUiHostelRest:InitAutoScript()
|
||
|
self:AutoInitUi()
|
||
|
self.SpecialSoundMap = {}
|
||
|
self:AutoAddListener()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:AutoInitUi()
|
||
|
self.PanelCharacterRest = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest")
|
||
|
self.PanelLeftInfo = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo")
|
||
|
self.SViewFloor = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/SViewFloor"):GetComponent("ScrollRect")
|
||
|
self.PanelFloorContent = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/SViewFloor/Viewport/PanelFloorContent")
|
||
|
self.GridFloorItem = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/SViewFloor/Viewport/PanelFloorContent/GridFloorItem")
|
||
|
self.RImgCharRest = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/RImgCharRest"):GetComponent("RawImage")
|
||
|
self.GridRestCharItem = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/GridRestCharItem")
|
||
|
self.PanelRestContent = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent")
|
||
|
self.UiSlot1 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot1")
|
||
|
self.UiRestModelPos1 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot1/UiRestModelPos1")
|
||
|
self.UiSlot2 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot2")
|
||
|
self.UiRestModelPos2 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot2/UiRestModelPos2")
|
||
|
self.UiSlot3 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot3")
|
||
|
self.UiRestModelPos3 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot3/UiRestModelPos3")
|
||
|
self.UiSlot4 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot4")
|
||
|
self.UiRestModelPos4 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot4/UiRestModelPos4")
|
||
|
self.UiSlot5 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot5")
|
||
|
self.UiRestModelPos5 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot5/UiRestModelPos5")
|
||
|
self.UiSlot6 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot6")
|
||
|
self.UiRestModelPos6 = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/PanelRestContent/UiSlot6/UiRestModelPos6")
|
||
|
self.TxtTitle = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/TxtTitle"):GetComponent("Text")
|
||
|
self.TxtTitleFloor = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelLeftInfo/TxtTitleFloor"):GetComponent("Text")
|
||
|
self.PanelRightInfo = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelRightInfo")
|
||
|
self.SViewIdleCharList = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelRightInfo/SViewIdleCharList"):GetComponent("ScrollRect")
|
||
|
self.PanelIdleCharContent = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelRightInfo/SViewIdleCharList/Viewport/PanelIdleCharContent")
|
||
|
self.GridIdleCharacter = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/PanelRightInfo/SViewIdleCharList/Viewport/PanelIdleCharContent/GridIdleCharacter")
|
||
|
self.RImgCharDrag = self.Transform:Find("SafeAreaContentPane/PanelCharacterRest/RImgCharDrag"):GetComponent("RawImage")
|
||
|
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.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.PanelRestModel = self.Transform:Find("FullScreenBackground/PanelRestModel")
|
||
|
self.UiCharRestModel = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel")
|
||
|
self.PanelModelRest1 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest1")
|
||
|
self.PanelModelRest2 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest2")
|
||
|
self.PanelModelRest3 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest3")
|
||
|
self.PanelModelRest4 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest4")
|
||
|
self.PanelModelRest5 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest5")
|
||
|
self.PanelModelRest6 = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelRest6")
|
||
|
self.PanelModelReste = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestModel/PanelModelReste")
|
||
|
self.UiCharRestDrag = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestDrag")
|
||
|
self.UiCameraRestDrag = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestDrag/UiCameraRestDrag")
|
||
|
self.PanelModelRestDrag = self.Transform:Find("FullScreenBackground/PanelRestModel/UiCharRestDrag/PanelModelRestDrag")
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:GetAutoKey(uiNode, eventName)
|
||
|
if not uiNode then
|
||
|
return
|
||
|
end
|
||
|
return eventName .. uiNode:GetHashCode()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest: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("XUiHostelRest: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 XUiHostelRest:AutoAddListener()
|
||
|
self.AutoCreateListeners = {}
|
||
|
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
|
||
|
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
|
||
|
end
|
||
|
-- auto
|
||
|
|
||
|
function XUiHostelRest:OnAwake()
|
||
|
self:InitAutoScript()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnStart()
|
||
|
|
||
|
self:Init()
|
||
|
self.CurFloor = 0
|
||
|
self.FloorUiItem = {}
|
||
|
self.RestCharUiItem = {}
|
||
|
self.IdleCharUiItem = {}
|
||
|
self:UpdateView()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:Init()
|
||
|
self.RctF = self.GameObject:GetComponent("RectTransform")
|
||
|
self.GridFloorItem.gameObject:SetActive(false)
|
||
|
self.GridRestCharItem.gameObject:SetActive(false)
|
||
|
self.GridIdleCharacter.gameObject:SetActive(false)
|
||
|
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.HostelElectric, XDataCenter.ItemManager.ItemId.HostelMat)
|
||
|
local tabScreenPosition = {}
|
||
|
for i = 1, 6 do
|
||
|
local pos = CS.XUiManager.UiCamera:WorldToViewportPoint(self["UiRestModelPos" .. i].transform.position)
|
||
|
table_insert(tabScreenPosition, pos)
|
||
|
end
|
||
|
self.ShowModel = XUiPanelRestModel.New(self.PanelRestModel, self.RImgCharRest, self.RImgCharDrag, tabScreenPosition, self.Name)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnBtnBackClick()
|
||
|
self:Close()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnBtnMainUiClick()
|
||
|
XLuaUiManager.RunMain()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnBtnBuyJump1Click()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnBtnBuyJump2Click()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnBtnBuyJump3Click()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:UpdateView()
|
||
|
self:UpdateFloorList()
|
||
|
self:UpdateIdleList()
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:UpdateFloorList()
|
||
|
local maxFloor = XDataCenter.HostelManager.GetHostelMaxFloor()
|
||
|
local datas = {}
|
||
|
local callback = function(floor)
|
||
|
self:OnSelectFloor(floor)
|
||
|
end
|
||
|
for i = 1, maxFloor do
|
||
|
table_insert(datas, { Floor = i, CallBack = callback })
|
||
|
end
|
||
|
local onCreate = function(item, data)
|
||
|
item:SetData(data)
|
||
|
end
|
||
|
XUiHelper.CreateTemplates(self, self.FloorUiItem, datas, XUiGridFloorItem.New, self.GridFloorItem.gameObject, self.PanelFloorContent, onCreate)
|
||
|
if self.CurFloor == 0 then
|
||
|
self:OnSelectFloor(1)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnSelectFloor(floor)
|
||
|
if self.CurFloor > 0 then
|
||
|
self.FloorUiItem[self.CurFloor]:SetSelect(false)
|
||
|
end
|
||
|
self.CurFloor = floor
|
||
|
if self.CurFloor > 0 then
|
||
|
self.FloorUiItem[self.CurFloor]:SetSelect(true)
|
||
|
end
|
||
|
self:UpdateRestList()
|
||
|
local config = XDataCenter.HostelManager.GetHostelRestTemplate(self.CurFloor)
|
||
|
if not config then
|
||
|
return
|
||
|
end
|
||
|
self.TxtTitleFloor.text = config.Name
|
||
|
self.TxtTitle.text = config.AreaName
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:UpdateRestList()
|
||
|
local datas = {}
|
||
|
local restCount = XDataCenter.HostelManager.GetHostelFloorRestCount(self.CurFloor)
|
||
|
local charIdList = {}
|
||
|
for i = 1, restCount do
|
||
|
local restData = XDataCenter.HostelManager.GetHostelRestData(self.CurFloor, i)
|
||
|
local Id = restData and restData.CharacterId or 0
|
||
|
table_insert(datas, { Slot = i, CharId = Id })
|
||
|
table_insert(charIdList, Id)
|
||
|
end
|
||
|
local onCreate = function(item, data)
|
||
|
item:SetData(data)
|
||
|
self:SetRestItemDragFunc(item, data.Slot)
|
||
|
item.GameObject.transform:SetParent(self["UiSlot" .. data.Slot], false)
|
||
|
item:GetRectTransform().anchoredPosition = CS.UnityEngine.Vector2.zero
|
||
|
end
|
||
|
|
||
|
self.RImgCharRest.gameObject:SetActive(true)
|
||
|
XUiHelper.CreateTemplates(self, self.RestCharUiItem, datas, XUiGridRestCharItem.New, self.GridRestCharItem.gameObject, nil, onCreate)
|
||
|
|
||
|
self.ShowModel:UpdateShowCharRest(charIdList)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:SetRestItemDragFunc(item, slot)
|
||
|
if self["RestItem" .. slot] then
|
||
|
return
|
||
|
end
|
||
|
local dragItem = item.GameObject:AddComponent(typeof(CS.XUiWidget))
|
||
|
dragItem:AddBeginDragListener(function(eventData)
|
||
|
self:OnRestItemBeginDrag(eventData, slot)
|
||
|
end)
|
||
|
dragItem:AddEndDragListener(function(eventData)
|
||
|
self:OnRestItemEndDrag(eventData, slot)
|
||
|
end)
|
||
|
dragItem:AddDragListener(function(eventData)
|
||
|
self:OnRestItemDrag(eventData, slot)
|
||
|
end)
|
||
|
self["RestItem" .. slot] = dragItem
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnRestItemBeginDrag(eventData, slot)
|
||
|
local charId = self.RestCharUiItem[slot]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
self.ShowModel:UpdateDragModel(charId)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnRestItemDrag(eventData, slot)
|
||
|
local charId = self.RestCharUiItem[slot]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
-- local rectTransform = self.RImgCharDrag:GetComponent("RectTransform")
|
||
|
local _, position = CS.UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle(self.Transform, eventData.position, eventData.pressEventCamera)
|
||
|
self.RImgCharDrag.transform.localPosition = CS.UnityEngine.Vector3(position.x, position.y, 0)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnRestItemEndDrag(eventData, slot)
|
||
|
local charId = self.RestCharUiItem[slot]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
self.ShowModel:HideDragModel()
|
||
|
local restSlot
|
||
|
for i, v in ipairs(self.RestCharUiItem) do
|
||
|
local isInRest = CS.UnityEngine.RectTransformUtility.RectangleContainsScreenPoint(v:GetRectTransform(), eventData.position, eventData.pressEventCamera)
|
||
|
if isInRest then
|
||
|
restSlot = i
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
if restSlot then
|
||
|
XDataCenter.HostelManager.ReqRestCharacter(charId, self.CurFloor, restSlot, function()
|
||
|
self:UpdateRestList()
|
||
|
self:UpdateIdleList()
|
||
|
end)
|
||
|
return
|
||
|
else
|
||
|
if XDataCenter.HostelManager.IsCharacterInWork(charId) then
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local isInRest = CS.UnityEngine.RectTransformUtility.RectangleContainsScreenPoint(self.PanelRestContent:GetComponent("RectTransform"), eventData.position, eventData.pressEventCamera)
|
||
|
if isInRest then
|
||
|
return
|
||
|
end
|
||
|
XDataCenter.HostelManager.ReqUnRestCharacter(self.CurFloor, slot, function()
|
||
|
self:UpdateRestList()
|
||
|
self:UpdateIdleList()
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:UpdateIdleList()
|
||
|
local charList = XDataCenter.CharacterManager.GetOwnCharacterList() or {}
|
||
|
table.sort(charList, function(a, b)
|
||
|
local aIsRest = XDataCenter.HostelManager.IsCharacterInRest(a.Id)
|
||
|
local bIsRest = XDataCenter.HostelManager.IsCharacterInRest(b.Id)
|
||
|
if aIsRest == bIsRest then
|
||
|
if aIsRest then
|
||
|
return a.Id > b.Id
|
||
|
else
|
||
|
-- 判断条件暂时没有
|
||
|
return a.Id > b.Id
|
||
|
end
|
||
|
else
|
||
|
return bIsRest
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
local datas = {}
|
||
|
for i, v in ipairs(charList) do
|
||
|
table_insert(datas, { Index = i, Id = v.Id })
|
||
|
end
|
||
|
local onCreate = function(item, data)
|
||
|
item:SetData(data.Index, data.Id, true)
|
||
|
self:SetIdleItemDragFunc(item, data.Index)
|
||
|
end
|
||
|
XUiHelper.CreateTemplates(self, self.IdleCharUiItem, datas, XUiGridIdleCharacter.New, self.GridIdleCharacter.gameObject, self.PanelIdleCharContent, onCreate)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:SetIdleItemDragFunc(item, index)
|
||
|
if self["IdleItem" .. index] then
|
||
|
return
|
||
|
end
|
||
|
local dragItem = item.GameObject:AddComponent(typeof(CS.XUiWidget))
|
||
|
dragItem:AddBeginDragListener(function()
|
||
|
self:OnIdleItemBeginDrag(index)
|
||
|
end)
|
||
|
dragItem:AddEndDragListener(function(eventData)
|
||
|
self:OnIdleItemEndDrag(eventData, index)
|
||
|
end)
|
||
|
dragItem:AddDragListener(function(eventData)
|
||
|
self:OnIdleItemDrag(eventData, index)
|
||
|
end)
|
||
|
self["IdleItem" .. index] = dragItem
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnIdleItemBeginDrag(index)
|
||
|
local charId = self.IdleCharUiItem[index]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
if XDataCenter.HostelManager.IsCharacterInWork(charId) then
|
||
|
return
|
||
|
end
|
||
|
self.ShowModel:UpdateDragModel(charId)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnIdleItemDrag(eventData, index)
|
||
|
local charId = self.IdleCharUiItem[index]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
-- local rectTransform = self.RImgCharDrag:GetComponent("RectTransform")
|
||
|
local _, position = CS.UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle(self.Transform, eventData.position, eventData.pressEventCamera)
|
||
|
self.RImgCharDrag.transform.localPosition = CS.UnityEngine.Vector3(position.x, position.y, 0)
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:OnIdleItemEndDrag(eventData, index)
|
||
|
local charId = self.IdleCharUiItem[index]:GetCharId()
|
||
|
if not charId or charId == 0 then
|
||
|
return
|
||
|
end
|
||
|
self.ShowModel:HideDragModel()
|
||
|
local isInRest = CS.UnityEngine.RectTransformUtility.RectangleContainsScreenPoint(self.PanelRestContent:GetComponent("RectTransform"), eventData.position, eventData.pressEventCamera)
|
||
|
if not isInRest then
|
||
|
return
|
||
|
end
|
||
|
local emptySlot = self:GetEmptySlot()
|
||
|
local restSlot = 0
|
||
|
local isCharRest = XDataCenter.HostelManager.IsCharacterInRest(charId)
|
||
|
if emptySlot and not isCharRest then
|
||
|
restSlot = emptySlot
|
||
|
else
|
||
|
for i, v in ipairs(self.RestCharUiItem) do
|
||
|
local tmpIsInRest = CS.UnityEngine.RectTransformUtility.RectangleContainsScreenPoint(v:GetRectTransform(), eventData.position, eventData.pressEventCamera)
|
||
|
if tmpIsInRest then
|
||
|
restSlot = i
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if restSlot == 0 then
|
||
|
return
|
||
|
end
|
||
|
XDataCenter.HostelManager.ReqRestCharacter(charId, self.CurFloor, restSlot, function()
|
||
|
self:UpdateRestList()
|
||
|
self:UpdateIdleList()
|
||
|
end)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiHostelRest:GetEmptySlot()
|
||
|
local restCount = XDataCenter.HostelManager.GetHostelFloorRestCount(self.CurFloor)
|
||
|
for i = 1, restCount do
|
||
|
local restData = XDataCenter.HostelManager.GetHostelRestData(self.CurFloor, i)
|
||
|
if not restData or restData.CharacterId == 0 then
|
||
|
return i
|
||
|
end
|
||
|
end
|
||
|
end
|