226 lines
No EOL
5.6 KiB
Lua
226 lines
No EOL
5.6 KiB
Lua
local XUiDormBgm = XClass(nil, "XUiDormBgm")
|
|
local XUiDormBgmGrid = require("XUi/XUiDormSecond/XUiDormBgmGrid")
|
|
|
|
function XUiDormBgm:Ctor(uiRoot, ui)
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.UiRoot = uiRoot
|
|
self.PlayingIndex = -1
|
|
self.PlayingId = -1
|
|
self.PlayRecordId = -1
|
|
self.IsSelfRoom = false
|
|
self.ShowList = false
|
|
XTool.InitUiObject(self)
|
|
self:InitBgmList()
|
|
|
|
self.UiRoot:RegisterClickEvent(self.BtnClick, function() self:OnBtnClick()
|
|
end)
|
|
|
|
self.BtnNext.CallBack = function() self:PlayNext() end
|
|
end
|
|
|
|
function XUiDormBgm:InitBgmList()
|
|
self.DynamicTable = XDynamicTableNormal.New(self.ViewSongList.gameObject)
|
|
self.DynamicTable:SetProxy(XUiDormBgmGrid)
|
|
self.DynamicTable:SetDelegate(self)
|
|
end
|
|
|
|
function XUiDormBgm:UpdateBgmList(dormId, isSelf)
|
|
self.IsSelfRoom = isSelf
|
|
local room = XHomeDormManager.GetRoom(dormId)
|
|
local configs = room:GetAllFurnitureConfig()
|
|
|
|
local result, musicList = XDormConfig.GetDormBgm(configs)
|
|
self.Data = musicList
|
|
|
|
|
|
self.ShowList = false
|
|
if not result then
|
|
self.PlayingIndex = 1
|
|
self:Play(result, musicList[self.PlayingIndex])
|
|
self.ShowList = false
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList)
|
|
self.GameObject:SetActiveEx(false)
|
|
return
|
|
end
|
|
|
|
if not musicList then
|
|
return
|
|
end
|
|
|
|
self.GameObject:SetActiveEx(isSelf)
|
|
|
|
self.BtnNext.gameObject:SetActiveEx(#musicList > 1)
|
|
self.BtnClick.gameObject:SetActiveEx(#musicList > 1)
|
|
|
|
self.PlayingIndex = 1
|
|
self.PlayRecordId = isSelf and CS.UnityEngine.PlayerPrefs.GetInt(tostring(dormId), -1) or -1
|
|
|
|
for i, v in ipairs(musicList) do
|
|
if self.PlayRecordId == v.BgmId then
|
|
self.PlayingIndex = i
|
|
end
|
|
end
|
|
|
|
self:Play(result, musicList[self.PlayingIndex])
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList and #musicList > 1)
|
|
|
|
|
|
if self.ShowList then
|
|
self:ReloadBgmList()
|
|
end
|
|
end
|
|
|
|
function XUiDormBgm:OnDynamicTableEvent(event, index, grid)
|
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
|
grid:Init(self)
|
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|
grid:Refresh(index, self.Data[index])
|
|
grid:SetSelect(self.PlayingIndex == index)
|
|
if self.PlayingIndex == index then
|
|
self.SelectGrid = grid
|
|
end
|
|
end
|
|
end
|
|
|
|
function XUiDormBgm:SelectBgm(index, bgmConfig)
|
|
self.ShowList = false
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList)
|
|
|
|
if self.PlayingIndex == index then
|
|
return
|
|
end
|
|
|
|
if self.SelectGrid then
|
|
self.SelectGrid:SetSelect(false)
|
|
end
|
|
|
|
self.SelectGrid = self.DynamicTable:GetGridByIndex(index)
|
|
if self.SelectGrid then
|
|
self.SelectGrid:SetSelect(true)
|
|
end
|
|
|
|
self.PlayingIndex = index
|
|
self:Play(true, bgmConfig)
|
|
end
|
|
|
|
function XUiDormBgm:ReloadBgmList()
|
|
self.DynamicTable:SetDataSource(self.Data)
|
|
self.DynamicTable:ReloadDataSync()
|
|
end
|
|
|
|
function XUiDormBgm:PlayNext()
|
|
local index = self.PlayingIndex + 1
|
|
if index > #self.Data then
|
|
index = 1
|
|
end
|
|
|
|
self:SelectBgm(index, self.Data[index])
|
|
end
|
|
|
|
function XUiDormBgm:Play(result, bgmConfig)
|
|
self.TxtSong.text = bgmConfig.Name
|
|
|
|
if self.PlayingId == bgmConfig.BgmId then
|
|
return
|
|
end
|
|
|
|
self.PlayingId = bgmConfig.BgmId
|
|
self.UiRoot:PlayBgmMusic(result, bgmConfig)
|
|
end
|
|
|
|
function XUiDormBgm:OnBtnClick()
|
|
self.ShowList = not self.ShowList
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList)
|
|
self:ReloadBgmList()
|
|
end
|
|
|
|
function XUiDormBgm:OnEnable(dormId)
|
|
self:ResetBgmList(dormId, self.IsSelfRoom)
|
|
end
|
|
|
|
function XUiDormBgm:IsMusicListChange(newList)
|
|
|
|
if not newList or not self.Data then
|
|
return true
|
|
end
|
|
|
|
if #newList ~= #self.Data then
|
|
return true
|
|
end
|
|
|
|
|
|
for _, v in ipairs(newList) do
|
|
local isChanged = true
|
|
for _, var in ipairs(self.Data) do
|
|
if v.BgmId == var.BgmId then
|
|
isChanged = false
|
|
end
|
|
end
|
|
|
|
|
|
if isChanged then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function XUiDormBgm:ResetBgmList(dormId, isSelf)
|
|
local room = XHomeDormManager.GetRoom(dormId)
|
|
local configs = room:GetAllFurnitureConfig()
|
|
local result, musicList = XDormConfig.GetDormBgm(configs)
|
|
|
|
local isChanged = self:IsMusicListChange(musicList)
|
|
|
|
self.Data = musicList
|
|
self.PlayRecordId = isSelf and CS.UnityEngine.PlayerPrefs.GetInt(tostring(dormId), -1) or -1
|
|
|
|
if isChanged then
|
|
self.PlayRecordId = -1
|
|
end
|
|
|
|
if not result then
|
|
self.PlayingIndex = 1
|
|
self:Play(result, musicList[self.PlayingIndex])
|
|
self.ShowList = false
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList)
|
|
self.GameObject:SetActiveEx(false)
|
|
return
|
|
end
|
|
|
|
|
|
if not musicList then
|
|
return
|
|
end
|
|
self.GameObject:SetActiveEx(isSelf)
|
|
|
|
self.BtnNext.gameObject:SetActiveEx(#musicList > 1)
|
|
self.BtnClick.gameObject:SetActiveEx(#musicList > 1)
|
|
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList and #musicList > 1)
|
|
if self.ShowList then
|
|
self:ReloadBgmList()
|
|
end
|
|
|
|
local isExist = false
|
|
for i, v in ipairs(self.Data) do
|
|
if self.PlayRecordId == v.BgmId then
|
|
self.PlayingIndex = i
|
|
isExist = true
|
|
end
|
|
end
|
|
|
|
|
|
if not isExist then
|
|
self.PlayingIndex = 1
|
|
self:Play(result, musicList[self.PlayingIndex])
|
|
end
|
|
end
|
|
|
|
function XUiDormBgm:OnDisable()
|
|
self.ViewSongList.gameObject:SetActiveEx(self.ShowList)
|
|
end
|
|
|
|
return XUiDormBgm |