PGRData/Script/matrix/xui/xuidormsecond/XUiDormBgm.lua

226 lines
5.6 KiB
Lua
Raw Normal View History

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