08b515afd9
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
268 lines
8.4 KiB
Lua
268 lines
8.4 KiB
Lua
local DormPanel = class("DormPanel", BasePanel)
|
|
DormPanel._tbDefine = {
|
|
{
|
|
sPrefabPath = "Dorm/DormPanel.prefab",
|
|
sCtrlName = "Game.UI.Dorm.DormCtrl"
|
|
}
|
|
}
|
|
function DormPanel:Awake()
|
|
self.mapDormRoomInfo = {}
|
|
self.mapDormBaseData = {}
|
|
self.mapFurnitureBag = {}
|
|
self.mapCoverSprites = {}
|
|
self.mapFurnitureUsedCount = {}
|
|
self.mapDormSuitData = {}
|
|
self.mapPresetInfo = nil
|
|
self.tbRoomId = {}
|
|
self.tempEditCount = {}
|
|
self.nCurRoom = 0
|
|
self.nPresetCount = 0
|
|
self.nCurMode = -1
|
|
self.nCurInteractiveMode = 0
|
|
self.nCurVisitFriendUid = 0
|
|
self.nCustomBgm = 0
|
|
self.nModeBeforeVisitFriend = 0
|
|
self:InitSuitData()
|
|
self.bPrevDisc = false
|
|
end
|
|
function DormPanel:OnEnable()
|
|
end
|
|
function DormPanel:OnDisable()
|
|
self:ReleaseAllPresetCover()
|
|
end
|
|
function DormPanel:OnDestroy()
|
|
end
|
|
function DormPanel:InitSuitData()
|
|
local forEachLayoutFurniture = function(mapData)
|
|
if self.mapDormSuitData[mapData.RoomLayoutId] == nil then
|
|
self.mapDormSuitData[mapData.RoomLayoutId] = {}
|
|
end
|
|
table.insert(self.mapDormSuitData[mapData.RoomLayoutId], {
|
|
FurnitureId = mapData.FurnitureId,
|
|
X = mapData.Pos[1],
|
|
Y = mapData.Pos[2],
|
|
Z = mapData.Pos[3],
|
|
Rotation = mapData.Rot
|
|
})
|
|
end
|
|
ForEachTableLine(DataTable.DormRoomLayout, forEachLayoutFurniture)
|
|
end
|
|
function DormPanel:GetFurnitureCount(nId)
|
|
local nTotalCount = self.mapFurnitureBag[nId] or 0
|
|
local nCurUsedCount = 0
|
|
for _, mapRoomUsedCount in pairs(self.mapFurnitureUsedCount) do
|
|
nCurUsedCount = nCurUsedCount + (mapRoomUsedCount[nId] or 0)
|
|
end
|
|
nTotalCount = nTotalCount - nCurUsedCount
|
|
if self.tempEditCount[nId] ~= nil then
|
|
nTotalCount = nTotalCount - self.tempEditCount[nId]
|
|
end
|
|
return nTotalCount
|
|
end
|
|
function DormPanel:GetBagFurnitureCount(nFurnitureId)
|
|
return self.mapFurnitureBag[nFurnitureId] or 0
|
|
end
|
|
function DormPanel:GetFurnitureCountIncludeCurRoom(nIncludeRoom, nId)
|
|
local nTotalCount = self.mapFurnitureBag[nId] or 0
|
|
local nCurUsedCount = 0
|
|
for nRoomId, mapRoomUsedCount in pairs(self.mapFurnitureUsedCount) do
|
|
if nRoomId ~= nIncludeRoom then
|
|
nCurUsedCount = nCurUsedCount + (mapRoomUsedCount[nId] or 0)
|
|
end
|
|
end
|
|
nTotalCount = nTotalCount - nCurUsedCount
|
|
return nTotalCount
|
|
end
|
|
function DormPanel:SetTempFurnitureCount(nId, nCount)
|
|
if nId == 0 then
|
|
return
|
|
end
|
|
if self.tempEditCount[nId] == nil then
|
|
self.tempEditCount[nId] = 0
|
|
end
|
|
self.tempEditCount[nId] = self.tempEditCount[nId] + nCount
|
|
end
|
|
function DormPanel:GetFixedInCurRoom(nType)
|
|
if nType == 0 then
|
|
return 0, 0
|
|
end
|
|
local mapUsedCountCurRoom = self.mapFurnitureUsedCount[self.nCurRoom]
|
|
if mapUsedCountCurRoom ~= nil then
|
|
for nFurnitureId, nCount in pairs(mapUsedCountCurRoom) do
|
|
local mapFurnitureConfig = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
|
if mapFurnitureConfig ~= nil and mapFurnitureConfig.Fixed == nType then
|
|
local nCurEditorCount = self.tempEditCount[nFurnitureId] or 0
|
|
local nCurCount = nCount + nCurEditorCount
|
|
if 0 < nCurCount then
|
|
return nFurnitureId, nCount
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
for nFurnitureId, nCount in pairs(self.tempEditCount) do
|
|
local mapFurnitureConfig = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
|
if mapFurnitureConfig ~= nil and mapFurnitureConfig.Fixed == nType and 0 < nCount then
|
|
return nFurnitureId, nCount
|
|
end
|
|
end
|
|
return 0, 0
|
|
end
|
|
function DormPanel:GetNextRoom()
|
|
if #self.tbRoomId == 0 then
|
|
for nRoomId, _ in pairs(self.mapDormRoomInfo) do
|
|
table.insert(self.tbRoomId, nRoomId)
|
|
end
|
|
table.sort(self.tbRoomId)
|
|
end
|
|
local curIdx = table.indexof(self.tbRoomId, self.nCurRoom)
|
|
local nNextIdx = curIdx + 1 > #self.tbRoomId and 1 or curIdx + 1
|
|
return self.tbRoomId[nNextIdx]
|
|
end
|
|
function DormPanel:SaveRoom(completeCallback, bNotNeedConfirm, sContentLanguage, sConfirmLanguage, sCancelLanguage)
|
|
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM")
|
|
local csData = safe_call_cs_func(CS.DormModuleHelper.GetDormData)
|
|
local callback = function()
|
|
self.tempEditCount = {}
|
|
local GetRoomInfoCallback = function(mapDormRoomInfo)
|
|
self.mapDormRoomInfo = mapDormRoomInfo
|
|
end
|
|
PlayerData.PlayerDormData:GetRoomInfo(GetRoomInfoCallback)
|
|
local GetBagInfoCallback = function(mapFurnitureBag)
|
|
self.mapFurnitureBag = mapFurnitureBag
|
|
self.mapFurnitureUsedCount = PlayerData.PlayerDormData:GetUsedCount()
|
|
end
|
|
PlayerData.PlayerDormData:GetBagInfo(GetBagInfoCallback)
|
|
if completeCallback ~= nil and type(completeCallback) == "function" then
|
|
completeCallback(true)
|
|
end
|
|
end
|
|
local confirmCallback = function()
|
|
if csData[1] ~= 0 then
|
|
local sTip
|
|
if csData[1] == 1 then
|
|
sTip = ConfigTable.GetUIText("Dorm_Hint_Err_FurniturePos")
|
|
elseif csData[1] == 2 then
|
|
sTip = ConfigTable.GetUIText("Dorm_Hint_Err_FixedFurniture")
|
|
elseif csData[1] == 3 then
|
|
sTip = ConfigTable.GetUIText("Dorm_Hint_Err_FloorCapacity")
|
|
elseif csData[1] == 4 then
|
|
sTip = ConfigTable.GetUIText("Dorm_Hint_Err_NoNeedToSave")
|
|
else
|
|
sTip = csData[1]
|
|
end
|
|
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
|
EventManager.Hit("DormGuide_SaveResult", false, "rejected")
|
|
return
|
|
end
|
|
local mapData = {}
|
|
local nLength = math.floor(csData.Length / 5)
|
|
if 2 <= nLength then
|
|
for i = 1, nLength - 1 do
|
|
table.insert(mapData, {
|
|
FurnitureId = csData[i * 5 + 0],
|
|
X = csData[i * 5 + 1],
|
|
Y = csData[i * 5 + 2],
|
|
Z = csData[i * 5 + 3],
|
|
Rotation = csData[i * 5 + 4]
|
|
})
|
|
end
|
|
end
|
|
PlayerData.PlayerDormData:SaveDormFurniture(self.nCurRoom, mapData, 0, callback)
|
|
end
|
|
local cancelCallback = function()
|
|
if completeCallback ~= nil and type(completeCallback) == "function" then
|
|
completeCallback(false)
|
|
end
|
|
end
|
|
if csData[0] ~= 3 then
|
|
if completeCallback ~= nil and type(completeCallback) == "function" then
|
|
completeCallback(false)
|
|
end
|
|
return
|
|
end
|
|
local nValue = csData[1]
|
|
if csData[1] == 4 then
|
|
if completeCallback ~= nil and type(completeCallback) == "function" then
|
|
completeCallback(true)
|
|
end
|
|
return
|
|
end
|
|
if bNotNeedConfirm == true then
|
|
confirmCallback()
|
|
return
|
|
else
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Confirm,
|
|
sContent = sContentLanguage or ConfigTable.GetUIText("Dorm_SaveConfirmContent"),
|
|
callbackConfirmAfterClose = confirmCallback,
|
|
callbackCancel = cancelCallback,
|
|
bDisableSnap = false,
|
|
bCloseNoHandler = true,
|
|
sCancel = sCancelLanguage,
|
|
sConfirm = sConfirmLanguage
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
return
|
|
end
|
|
end
|
|
function DormPanel:GetDormRewardId()
|
|
return self.mapDormBaseData.rewardIds or {}
|
|
end
|
|
function DormPanel:CapturerPresetCover(nTime)
|
|
local sName = tostring(nTime)
|
|
local bOutside = true
|
|
local mapRoomCfg = ConfigTable.GetData("DormRoom", self.nCurRoom)
|
|
if mapRoomCfg ~= nil then
|
|
bOutside = mapRoomCfg.RoomType == GameEnum.DormRoomType.Outdoor
|
|
end
|
|
local bSuc = safe_call_cs_func(CS.DormModuleHelper_HotFix.CaptureSceneImage, tostring(PlayerData.Base._nPlayerId), sName, bOutside)
|
|
if bSuc then
|
|
self.mapCoverSprites[sName] = safe_call_cs_func(CS.DormModuleHelper_HotFix.LoadSceneCaptureImageSprite, tostring(PlayerData.Base._nPlayerId), sName)
|
|
end
|
|
end
|
|
function DormPanel:LoadCaptureCover(tbCurPreset)
|
|
safe_call_cs_func(CS.DormModuleHelper_HotFix.CleanSceneCaptureImages, tostring(PlayerData.Base._nPlayerId), tbCurPreset)
|
|
for _, sPresetSpriteName in ipairs(tbCurPreset) do
|
|
self.mapCoverSprites[sPresetSpriteName] = safe_call_cs_func(CS.DormModuleHelper_HotFix.LoadSceneCaptureImageSprite, tostring(PlayerData.Base._nPlayerId), sPresetSpriteName)
|
|
end
|
|
end
|
|
function DormPanel:GetPresetCover(sName)
|
|
return self.mapCoverSprites[sName]
|
|
end
|
|
function DormPanel:ReleaseAllPresetCover()
|
|
for sName, sp in pairs(self.mapCoverSprites) do
|
|
safe_call_cs_func(CS.DormModuleHelper_HotFix.ReleaseSceneCaptureImageSprite, sp)
|
|
end
|
|
self.mapCoverSprites = {}
|
|
end
|
|
function DormPanel:SetDormBGM()
|
|
if self.nCurMode == 3 then
|
|
local nBGM = self.nCustomBgm
|
|
if 0 < nBGM then
|
|
local mapIPCfg = ConfigTable.GetData("DiscIP", nBGM)
|
|
if mapIPCfg ~= nil then
|
|
local sVoFile = mapIPCfg.VoFile
|
|
CS.WwiseAudioManager.Instance:SetDormMusic("outfit", sVoFile)
|
|
end
|
|
else
|
|
CS.WwiseAudioManager.Instance:SetDormMusic("system", "houZhai")
|
|
end
|
|
else
|
|
local mapRoomInfo = self.mapDormRoomInfo[self.nCurRoom]
|
|
if mapRoomInfo ~= 0 then
|
|
local nBGM = mapRoomInfo.DiscId
|
|
if 0 < nBGM then
|
|
local mapIPCfg = ConfigTable.GetData("DiscIP", nBGM)
|
|
if mapIPCfg ~= nil then
|
|
local sVoFile = mapIPCfg.VoFile
|
|
CS.WwiseAudioManager.Instance:SetDormMusic("outfit", sVoFile)
|
|
end
|
|
else
|
|
CS.WwiseAudioManager.Instance:SetDormMusic("system", "houZhai")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return DormPanel
|