Major Update - 2.0.0.143

EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
This commit is contained in:
SL1900
2026-10-20 13:00:00 +09:00
parent 4bcada6061
commit 08b515afd9
1773 changed files with 1095195 additions and 65670 deletions
+879
View File
@@ -0,0 +1,879 @@
local DormCtrl = class("DormCtrl", BaseCtrl)
local ModuleManager = require("GameCore.Module.ModuleManager")
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
DormCtrl._mapNodeConfig = {
rtEditorRoot = {
sCtrlName = "Game.UI.Dorm.DormEditor.DormEditorCtrl"
},
rtInteractiveRoot = {
sCtrlName = "Game.UI.Dorm.DormInteractive.DormInteractiveCtrl"
},
rtFriendRoot = {
sCtrlName = "Game.UI.Dorm.DormFriend.DormFriendRootCtrl"
},
CharListRoot = {
sCtrlName = "Game.UI.Dorm.DormCharSelect.DormSelectCharCtrl"
},
btnHomeMain = {
sComponentName = "UIButton",
callback = "BtnClick_Home"
},
btnBackMain = {
sComponentName = "UIButton",
callback = "BtnClick_Back"
},
btnShowMenu = {
sComponentName = "UIButton",
callback = "BtnClick_ShowMenu"
},
btnHideAllUI2 = {
sComponentName = "UIButton",
callback = "BtnClick_HideAllUI2"
},
txt_ShowUI = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_ShowUI"
},
rtMenu = {}
}
DormCtrl._mapEventConfig = {
[EventId.UIBackConfirm] = "OnEvent_Back",
[EventId.UIHomeConfirm] = "OnEvent_Home",
Dorm_HideUI = "OnEvent_DormHideUI",
DormPanel_BtnClickEdit = "OnEvent_EditMode",
DormPanel_BtnInteractive = "OnEvent_InteractiveMode",
DormPanel_BtnClickObserve = "OnEvent_ObserveMode",
DormPanel_BtnClickOperate = "OnEvent_OperateMode",
DormPanel_NextRoom = "OnEvent_NextRoom",
OnEvent_DormLevelLoadComplete = "OnEvent_DormLevelLoadComplete",
DORM_LEVEL_FINISH = "OnEvent_DormLevelFinish",
DORM_CS2LUA_SHOW_SELECT_ROME_UI = "OnEvent_SelectRoom",
DORM_CS2LUA_SWITCH_NEW_ROOM = "OnEvent_SwitchRoom",
DormRoomSelect_ChangeRoomResult = "OnEvent_ChangeRoomResult",
DormCharSelectResult = "OnEvent_DormCharSelectResult",
DormPanel_OpenSelectChar = "OnEvent_OpenSelectChar",
DormUpdatePresetNameSuc = "OnEvent_DormUpdatePresetNameSuc",
DormBGMSetSuccess = "OnEvent_DormBGMSetSuccess",
ResetDormMusic = "OnEvent_ResetDormMusic",
DormVisitFriendRoom = "OnEvent_VisitFriend",
DormBackHome = "OnEvent_BackHome",
DormNewRoomUnlock = "OnEvent_DormNewRoomUnlock",
DormElevatorHideUI = "OnEvent_DormElevatorHideUI",
[EventId.OpenPanel] = "OnEvent_DormGlobalOpenPanel",
[EventId.ClosePanel] = "OnEvent_DormGlobalClosePanel"
}
function DormCtrl:Awake()
self.animator = self.gameObject:GetComponent("Animator")
self.bNeedWaitElevator = false
self._nDormPopupCount = 0
end
function DormCtrl:RefreshVirtualMouseStick()
local bPlayerControlMode = self._panel.nCurMode == 0 or self._panel.nCurMode == 3
local bEnable = not bPlayerControlMode or not (0 >= self._nDormPopupCount)
GamepadUIManager.SetVirtualMouseStickEnable(bEnable)
end
function DormCtrl:OnEvent_DormGlobalOpenPanel(nPanelId)
if self._panel == nil then
return
end
if nPanelId == self._panel._nPanelId then
return
end
self._nDormPopupCount = self._nDormPopupCount + 1
self:RefreshVirtualMouseStick()
end
function DormCtrl:OnEvent_DormGlobalClosePanel(nPanelId)
if nPanelId == self._panel._nPanelId then
return
end
if self._nDormPopupCount > 0 then
self._nDormPopupCount = self._nDormPopupCount - 1
end
self:RefreshVirtualMouseStick()
end
function DormCtrl:OnEnable()
self._nDormPopupCount = 0
self.gameObject:SetActive(false)
local bGetRoomInfo = false
local bGetBagInfo = false
local ReopenWaitFrame = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
EventManager.Hit("OnEvent_DormLevelLoadComplete")
self._panel:SetDormBGM()
end
local SetDormData = function(nRoomId)
local nCurRoom = nRoomId
local roomData = {}
if nCurRoom ~= 0 then
local nFurnitureLen = 0
if self._panel.mapDormRoomInfo[nCurRoom] ~= nil then
local mapData = self._panel.mapDormRoomInfo[nCurRoom]
nFurnitureLen = #mapData.FurnitureList
end
local tbRole = {}
local bIsMale = PlayerData.Base:GetPlayerSex() == true
if bIsMale then
table.insert(tbRole, {
9101,
910101,
true
})
else
table.insert(tbRole, {
9100,
910001,
true
})
end
for index, value in ipairs(self._panel.mapDormRoomInfo[nCurRoom].RoleList) do
local nSkinId = PlayerData.PlayerDormData:GetDormCharSkin(value.RoleId)
table.insert(tbRole, {
value.RoleId,
nSkinId,
value.IsVisit
})
if value.IsVisit == true then
value.IsVisit = false
end
end
local nSceneId = 0
local bIsGuide = PlayerData.PlayerDormData:GetGuideState()
table.insert(roomData, {
1,
nCurRoom,
nFurnitureLen,
tbRole,
nSceneId,
bIsGuide
})
for _, mapFurnitur in ipairs(self._panel.mapDormRoomInfo[nCurRoom].FurnitureList) do
table.insert(roomData, {
mapFurnitur.FurnitureId,
mapFurnitur.X,
mapFurnitur.Y,
mapFurnitur.Z,
mapFurnitur.Rotation
})
end
safe_call_cs_func(CS.DormModuleHelper.SetDormData, roomData)
else
printError("NO ROOM CONFIG")
return
end
end
local GetRoomInfoCallback = function(mapDormRoomInfo, mapDormBaseInfo)
bGetRoomInfo = true
local roomId = 0
for nRoomId, _ in pairs(mapDormRoomInfo) do
if roomId == 0 or roomId == nil then
roomId = nRoomId
else
roomId = math.min(roomId, nRoomId)
end
end
self._panel.nCurRoom = self._panel.nCurRoom == 0 and roomId or self._panel.nCurRoom
self._panel.mapDormRoomInfo = mapDormRoomInfo
self._panel.mapDormBaseData = mapDormBaseInfo
if bGetBagInfo then
local sCurModule = ModuleManager.GetCurModuleName()
if sCurModule == "DormModuleScene" then
cs_coroutine.start(ReopenWaitFrame)
else
SetDormData(roomId)
NovaAPI.EnterModule("DormModuleScene", true)
end
self._mapNode.rtEditorRoot:Init(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetRoom(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetQuestInfo()
else
return
end
end
local GetBagInfoCallback = function(mapFurnitureBag)
bGetBagInfo = true
self._panel.mapFurnitureBag = mapFurnitureBag
self._panel.mapFurnitureUsedCount = PlayerData.PlayerDormData:GetUsedCount()
if bGetRoomInfo then
local sCurModule = ModuleManager.GetCurModuleName()
if sCurModule == "DormModuleScene" then
cs_coroutine.start(ReopenWaitFrame)
else
SetDormData(self._panel.nCurRoom)
NovaAPI.EnterModule("DormModuleScene", true)
end
self._mapNode.rtEditorRoot:Init(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetRoom(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetQuestInfo()
else
return
end
end
PlayerData.PlayerDormData:GetRoomInfo(GetRoomInfoCallback)
PlayerData.PlayerDormData:GetBagInfo(GetBagInfoCallback)
if self._panel.nCurMode == -1 then
local nCurCachedMode = PlayerData.PlayerDormData:GetPanelDefaultMode()
if nCurCachedMode == 1 then
self._mapNode.rtInteractiveRoot:SetMode(0)
self._panel.nCurMode = 0
self._panel.nCurInteractiveMode = 0
else
self._mapNode.rtInteractiveRoot:SetMode(1)
self._panel.nCurMode = 1
self._panel.nCurInteractiveMode = 1
end
elseif self._panel.nCurMode == 1 then
self._mapNode.rtInteractiveRoot:SetMode(1)
self._panel.nCurInteractiveMode = 1
else
self._mapNode.rtInteractiveRoot:SetMode(0)
self._panel.nCurMode = 0
self._panel.nCurInteractiveMode = 0
end
self:RefreshVirtualMouseStick()
self.bNeedSwitchModeAfterLoad = true
self.bHide = false
self._mapNode.btnShowMenu.gameObject:SetActive(false)
DormGuideUI.Bind(self)
end
function DormCtrl:OnDisable()
DormGuideUI.Unbind(self)
self._panel._tbParam[1] = self._panel.nCurRoom
GamepadUIManager.SetVirtualMouseStickEnable(true)
end
function DormCtrl:SwitchRoom(nRoomId)
local nNextRoom = nRoomId
self._panel.nCurRoom = nNextRoom
self._mapNode.rtEditorRoot:SwitchRoom(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetRoom(self._panel.nCurRoom)
local tbRoleData = PlayerData.PlayerDormData:GetRoleInfo(nRoomId)
PlayerData.PlayerDormData:SetRoleVisitState()
local roomData = {}
local nFurnitureLen = 0
local tbRole = {}
local bIsMale = PlayerData.Base:GetPlayerSex() == true
if bIsMale then
table.insert(tbRole, {
9101,
910101,
true
})
else
table.insert(tbRole, {
9100,
910001,
true
})
end
for index, value in ipairs(tbRoleData) do
local nSkinId = PlayerData.PlayerDormData:GetDormCharSkin(value.RoleId)
table.insert(tbRole, {
value.RoleId,
nSkinId,
value.IsVisit
})
if value.IsVisit == false then
value.IsVisit = true
end
end
if self._panel.mapDormRoomInfo[nNextRoom] ~= nil then
local mapData = self._panel.mapDormRoomInfo[nNextRoom]
nFurnitureLen = #mapData.FurnitureList
end
table.insert(roomData, {
1,
self._panel.nCurRoom,
nFurnitureLen,
tbRole,
0
})
for _, mapFurnitur in ipairs(self._panel.mapDormRoomInfo[self._panel.nCurRoom].FurnitureList) do
table.insert(roomData, {
mapFurnitur.FurnitureId,
mapFurnitur.X,
mapFurnitur.Y,
mapFurnitur.Z,
mapFurnitur.Rotation
})
end
safe_call_cs_func(CS.DormModuleHelper.SetDormData, roomData)
self._mapNode.rtInteractiveRoot:SetCharCount()
local nStyle = 55
local mapRoomConfigData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
if mapRoomConfigData ~= nil then
nStyle = mapRoomConfigData.TransUIStyle
end
local TransitionCallback = function()
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {false, 0})
end
EventManager.Hit(EventId.SetTransition, nStyle, TransitionCallback)
end
function DormCtrl:VisitFriendRoom(nUid, nRoomId)
local GetDataCallback = function(mapFriendInfo)
local mapFriendDormInfo = mapFriendInfo.mapDormDetail[nRoomId]
if mapFriendDormInfo == nil then
return
end
self._panel.nCurRoom = nRoomId
self._panel.nCurVisitFriendUid = nUid
self._panel.nCustomBgm = mapFriendDormInfo.DiscId
local tbRoleData = mapFriendDormInfo.RoleList
local roomData = {}
local nFurnitureLen = 0
local tbRole = {}
local bIsMale = PlayerData.Base:GetPlayerSex() == true
if bIsMale then
table.insert(tbRole, {
9101,
910101,
true
})
else
table.insert(tbRole, {
9100,
910001,
true
})
end
for index, value in ipairs(tbRoleData) do
local nSkinId = PlayerData.PlayerDormData:GetDormCharSkin(value.RoleId)
table.insert(tbRole, {
value.RoleId,
nSkinId,
value.IsVisit
})
if value.IsVisit == false then
value.IsVisit = true
end
end
nFurnitureLen = #mapFriendDormInfo.FurnitureList
table.insert(roomData, {
1,
nRoomId,
nFurnitureLen,
tbRole,
0
})
for _, mapFurnitur in ipairs(mapFriendDormInfo.FurnitureList) do
table.insert(roomData, {
mapFurnitur.FurnitureId,
mapFurnitur.X,
mapFurnitur.Y,
mapFurnitur.Z,
mapFurnitur.Rotation
})
end
safe_call_cs_func(CS.DormModuleHelper.SetDormData, roomData)
self.bNeedSwitchModeAfterLoad = self._panel.nCurMode ~= 3
self._panel.nCurMode = 3
self:RefreshVirtualMouseStick()
self._mapNode.rtInteractiveRoot:RecycleAllInteractiveHudCtrl()
self._mapNode.rtEditorRoot.gameObject:SetActive(false)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(false)
self._mapNode.rtFriendRoot.gameObject:SetActive(false)
local mapDormFriendInfo = PlayerData.PlayerDormData:DormGetFriendInfoByUid(nUid)
local mapFriendDetailData = PlayerData.Friend:GetFriendDetailData(nUid)
self._mapNode.rtFriendRoot:Refresh(mapDormFriendInfo, mapFriendDetailData)
local nStyle = 55
local mapRoomConfigData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
if mapRoomConfigData ~= nil then
nStyle = mapRoomConfigData.TransUIStyle
end
local TransitionCallback = function()
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {false, 0})
end
EventManager.Hit(EventId.SetTransition, nStyle, TransitionCallback)
end
if self._panel.nCurMode ~= 3 then
if self._panel.nCurMode == 2 then
self._panel.nModeBeforeVisitFriend = self._panel.nCurInteractiveMode
else
self._panel.nModeBeforeVisitFriend = self._panel.nCurMode
end
end
PlayerData.PlayerDormData:DormGetFriendVisitData(nUid, nRoomId, GetDataCallback)
end
function DormCtrl:ChangeVisitFriendRoom(nUid, nRoomId)
local mapFriendInfo = PlayerData.PlayerDormData:DormGetCachedFriendVisitData(nUid)
if mapFriendInfo == nil then
return
end
self._panel.nCurRoom = nRoomId
self._panel.nCurVisitFriendUid = nUid
local mapFriendDormInfo = mapFriendInfo.mapDormDetail[nRoomId]
local tbRoleData = mapFriendDormInfo.RoleList
self._panel.nCustomBgm = mapFriendDormInfo.DiscId
local roomData = {}
local nFurnitureLen = 0
local tbRole = {}
local bIsMale = PlayerData.Base:GetPlayerSex() == true
if bIsMale then
table.insert(tbRole, {
9101,
910101,
true
})
else
table.insert(tbRole, {
9100,
910001,
true
})
end
for index, value in ipairs(tbRoleData) do
local nSkinId = PlayerData.PlayerDormData:GetDormCharSkin(value.RoleId)
table.insert(tbRole, {
value.RoleId,
nSkinId,
value.IsVisit
})
if value.IsVisit == false then
value.IsVisit = true
end
end
nFurnitureLen = #mapFriendDormInfo.FurnitureList
table.insert(roomData, {
1,
nRoomId,
nFurnitureLen,
tbRole,
0
})
for _, mapFurnitur in ipairs(mapFriendDormInfo.FurnitureList) do
table.insert(roomData, {
mapFurnitur.FurnitureId,
mapFurnitur.X,
mapFurnitur.Y,
mapFurnitur.Z,
mapFurnitur.Rotation
})
end
safe_call_cs_func(CS.DormModuleHelper.SetDormData, roomData)
self.bNeedSwitchModeAfterLoad = self._panel.nCurMode ~= 3
local nStyle = 55
local mapRoomConfigData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
if mapRoomConfigData ~= nil then
nStyle = mapRoomConfigData.TransUIStyle
end
local TransitionCallback = function()
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {false, 0})
end
EventManager.Hit(EventId.SetTransition, nStyle, TransitionCallback)
self._panel.nCurMode = 3
self:RefreshVirtualMouseStick()
self._mapNode.rtEditorRoot.gameObject:SetActive(false)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(false)
self._mapNode.rtFriendRoot.gameObject:SetActive(false)
local mapDormFriendInfo = PlayerData.PlayerDormData:DormGetFriendInfoByUid(nUid)
local mapFriendDetailData = PlayerData.Friend:GetFriendDetailData(nUid)
self._mapNode.rtFriendRoot:Refresh(mapDormFriendInfo, mapFriendDetailData)
end
function DormCtrl:DOSwitch2Interactive()
self._mapNode.rtEditorRoot.gameObject:SetActive(false)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(true)
self.animator:Play("DormPanel_in")
self._mapNode.rtInteractiveRoot:SetMode(self._panel.nCurInteractiveMode)
self._panel.nCurMode = self._panel.nCurInteractiveMode
self:RefreshVirtualMouseStick()
self._mapNode.rtEditorRoot:ExitEdiorMode()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
self._panel.nCurInteractiveMode
})
end
function DormCtrl:OnEvent_Back(nPanelId)
if self._panel._nPanelId ~= nPanelId then
return
end
self:BtnClick_Back(nPanelId)
end
function DormCtrl:OnEvent_Home(nPanelId)
if self._panel._nPanelId ~= nPanelId then
return
end
self:BtnClick_Home(nPanelId)
end
function DormCtrl:BtnClick_Back(nPanelId)
if self._panel.nCurMode == 2 then
self:OnEvent_InteractiveMode()
return
end
if self._panel.nCurMode == 3 then
self:OnEvent_BackHome()
return
end
self.gameObject:SetActive(false)
local TransitionCallback = function()
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
end
EventManager.Hit(EventId.SetTransition, 6, TransitionCallback, AllEnum.MainViewCorner.Dorm)
end
function DormCtrl:BtnClick_Home(nPanelId)
local callback = function()
self.gameObject:SetActive(false)
local TransitionCallback = function()
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
end
EventManager.Hit(EventId.SetTransition, 6, TransitionCallback, AllEnum.MainViewCorner.Dorm)
end
if self._panel.nCurMode == 2 then
local sLanguage1 = ConfigTable.GetUIText("Dorm_SaveConfirmContent")
local sLanguage2 = ConfigTable.GetUIText("DormBtn_SaveAndExit")
local sLanguage3 = ConfigTable.GetUIText("DormBtn_Exit")
self._panel:SaveRoom(callback, false, sLanguage1, sLanguage2, sLanguage3)
else
callback()
end
end
function DormCtrl:BtnClick_ShowMenu()
self._mapNode.btnHideAllUI2.gameObject:SetActive(true)
end
function DormCtrl:BtnClick_HideAllUI2()
if self.bHide then
self.bHide = false
self._mapNode.rtMenu:SetActive(true)
self._mapNode.btnShowMenu.gameObject:SetActive(false)
self._mapNode.rtFriendRoot.gameObject:SetActive(self._panel.nCurMode == 3)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(self._panel.nCurMode ~= 3)
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
DormGuideUI.SetOwnerCap("businessHide", nil)
return
end
end
function DormCtrl:OnEvent_EditMode()
self._mapNode.rtEditorRoot.gameObject:SetActive(true)
self._mapNode.rtEditorRoot.nCurMainTab = 1
self._mapNode.rtEditorRoot.nCurFurniturTab1 = 1
self._mapNode.rtEditorRoot.nCurFurniturTab2 = 1
self._mapNode.rtEditorRoot.nCurPresetTab = 2
self._mapNode.rtEditorRoot.nCurPresetIdx = 0
self._mapNode.rtEditorRoot.nCurSuitId = 0
self._mapNode.rtEditorRoot.nCurSelectPresetIdx = 0
self._mapNode.rtEditorRoot:InitListToggle()
self._mapNode.rtEditorRoot:OnBtnClick_FurnitureListOpen()
self._mapNode.rtInteractiveRoot:RecycleAllInteractiveHudCtrl()
self._mapNode.rtInteractiveRoot.gameObject:SetActive(false)
WwiseAudioMgr:PostEvent("Home_UI_furniture")
self._panel.nCurMode = 2
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {2})
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if self._mapNode.rtEditorRoot ~= nil then
self._mapNode.rtEditorRoot:SetRoomRatio()
end
end
cs_coroutine.start(wait)
end
function DormCtrl:OnEvent_InteractiveMode(bNotNeedCheck)
local callback = function(bSaveSuc)
if bSaveSuc then
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM_SUCC")
else
NovaAPI.DispatchEventWithData("DORM_LUA_ABANDON_SAVE_ROOM")
end
self:DOSwitch2Interactive()
end
if bNotNeedCheck == true then
self:DOSwitch2Interactive()
else
local sLanguage1 = ConfigTable.GetUIText("Dorm_SaveConfirmContent")
local sLanguage2 = ConfigTable.GetUIText("DormBtn_SaveAndExit")
local sLanguage3 = ConfigTable.GetUIText("DormBtn_Exit")
self._panel:SaveRoom(callback, false, sLanguage1, sLanguage2, sLanguage3)
end
end
function DormCtrl:OnEvent_ObserveMode()
self._mapNode.rtInteractiveRoot:SetMode(1)
self._panel.nCurMode = 1
self._panel.nCurInteractiveMode = 1
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {1})
end
function DormCtrl:OnEvent_OperateMode()
self._mapNode.rtInteractiveRoot:SetMode(0)
self._panel.nCurMode = 0
self._panel.nCurInteractiveMode = 0
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {0})
end
function DormCtrl:OnEvent_NextRoom(nUid)
if self._panel.nCurMode == 3 then
local mapFriendCachedDormData = PlayerData.PlayerDormData:DormGetCachedFriendVisitData(self._panel.nCurVisitFriendUid)
local nCurRoom = self._panel.nCurRoom
self.gameObject:SetActive(false)
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapFriendCachedDormData.mapDormDetail, nCurRoom, false, true)
else
local nCurRoom = self._panel.nCurRoom
local mapRoomData = self._panel.mapDormRoomInfo
self.gameObject:SetActive(false)
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapRoomData, nCurRoom, false, false)
end
end
function DormCtrl:OnEvent_BackHome()
self._panel.nCurMode = self._panel.nModeBeforeVisitFriend
self:RefreshVirtualMouseStick()
self._panel.nCurVisitFriendUid = 0
self.bNeedSwitchModeAfterLoad = true
self._panel.nCustomBgm = 0
self:SwitchRoom(701001)
end
function DormCtrl:OnEvent_DormLevelLoadComplete()
self._mapNode.rtEditorRoot.gameObject:SetActive(self._panel.nCurMode == 2)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(self._panel.nCurMode == 0 or self._panel.nCurMode == 1)
local sAnim = "DormPanel_in"
if self._panel.nCurMode == 0 or self._panel.nCurMode == 1 then
self._panel.nCurInteractiveMode = self._panel.nCurMode
self._mapNode.rtInteractiveRoot:SetMode(self._panel.nCurMode)
self._mapNode.rtInteractiveRoot:RegisterVirtualJoystick()
end
self._mapNode.rtFriendRoot.gameObject:SetActive(self._panel.nCurMode == 3)
if self._panel.nCurMode == 3 then
self._mapNode.rtFriendRoot:RegisterVirtualJoystick()
sAnim = "DormPanelFriend_in"
end
if self.bNeedSwitchModeAfterLoad then
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
self._panel.nCurMode
})
self.bNeedSwitchModeAfterLoad = false
end
if not self.bNeedWaitElevator then
self.gameObject:SetActive(true)
end
self.bNeedWaitElevator = false
EventManager.Hit(EventId.SetTransition)
self.animator:Play(sAnim)
if DormGuideUI.IsLeaveLocked() then
DormGuideUI._ApplyInterceptUI()
end
self._panel:SetDormBGM()
end
function DormCtrl:OnEvent_DormLevelFinish()
NovaAPI.EnterModule("MainMenuModuleScene", true)
end
function DormCtrl:OnEvent_SelectRoom(nState)
if nState == 2 then
EventManager.Hit("DormElevatorHideUI", true)
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
DormGuideAdapter.MarkWalkout()
EventManager.Hit("DormGuide_ElevatorExit")
return
elseif nState == 1 then
if self._panel.nCurMode == 3 then
local mapFriendCachedDormData = PlayerData.PlayerDormData:DormGetCachedFriendVisitData(self._panel.nCurVisitFriendUid)
local nCurRoom = self._panel.nCurRoom
self.gameObject:SetActive(false)
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapFriendCachedDormData.mapDormDetail, nCurRoom, true, true)
else
local nCurRoom = self._panel.nCurRoom
local mapRoomData = self._panel.mapDormRoomInfo
self.gameObject:SetActive(false)
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapRoomData, nCurRoom, true, false)
end
else
EventManager.Hit("DormElevatorHideUI", false)
end
end
function DormCtrl:OnEvent_SwitchRoom()
if self._panel.nCurMode == 3 then
self:ChangeVisitFriendRoom(self._panel.nCurVisitFriendUid, self.nSelectedRoomId)
self.nSelectedRoomId = 0
else
self:SwitchRoom(self.nSelectedRoomId)
self.nSelectedRoomId = 0
end
end
function DormCtrl:OnEvent_VisitFriend(nUid, nRoomId)
if self._panel.nCurVisitFriendUid == nUid then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DormTips_VisitSameFriend"))
return
end
self:VisitFriendRoom(nUid, nRoomId)
end
function DormCtrl:OnEvent_ChangeRoomResult(bConfirm, nRoomId, bElevator)
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
DormGuideAdapter.NoteRoomConfirm(bConfirm, nRoomId, bElevator)
if bConfirm then
self.nSelectedRoomId = nRoomId
end
if bElevator then
NovaAPI.DispatchEventWithData("DORM_LUA_SELECT_SCENE_CALLBACK", nil, {bConfirm})
self.bNeedWaitElevator = bElevator and bConfirm
elseif bConfirm then
self:OnEvent_SwitchRoom()
else
self.gameObject:SetActive(true)
local sAnim = "DormPanel_in"
if self._panel.nCurMode == 3 then
sAnim = "DormPanelFriend_in"
end
if self._panel.nCurMode == 1 then
self._mapNode.rtInteractiveRoot:InitFurnitureBtns()
end
self.animator:Play(sAnim)
end
end
function DormCtrl:OnEvent_OpenSelectChar()
local tbCurSelectChar = {}
local tbCharInRoom = {}
local mapDormRoomCfgData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
if mapDormRoomCfgData ~= nil then
local nMaxCharCount = mapDormRoomCfgData.RoleNum
for i = 1, nMaxCharCount do
table.insert(tbCurSelectChar, 0)
end
local curRoomInfo = self._panel.mapDormRoomInfo[self._panel.nCurRoom]
local tbRoleList = curRoomInfo.RoleList
if tbRoleList ~= nil then
for idx, mapRole in ipairs(tbRoleList) do
tbCurSelectChar[idx] = mapRole.RoleId
end
end
for nRoomId, mapRoomInfo in pairs(self._panel.mapDormRoomInfo) do
if nRoomId ~= self._panel.nCurRoom then
for _, mapRole in ipairs(mapRoomInfo.RoleList) do
tbCharInRoom[mapRole.RoleId] = nRoomId
end
end
end
self._mapNode.CharListRoot:ShowList(tbCurSelectChar, false, 1, tbCharInRoom)
self._nDormPopupCount = self._nDormPopupCount + 1
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {4})
self._mapNode.rtInteractiveRoot:SetShowBtns(false)
self._mapNode.rtMenu:SetActive(false)
end
end
function DormCtrl:OnEvent_DormCharSelectResult(tbCurChar, bConfirm)
local revertChar = function()
local beforeChar = self._panel.mapDormRoomInfo[self._panel.nCurRoom].RoleList
local tbBeforeCharId = {}
for _, mapCharInfo in ipairs(beforeChar) do
local nCharId = mapCharInfo.RoleId
table.insert(tbBeforeCharId, mapCharInfo.RoleId)
if table.indexof(tbCurChar, nCharId) < 1 then
local nSkinId = 0
local mapChar = ConfigTable.GetData_Character(nCharId)
if mapChar ~= nil then
nSkinId = mapChar.DefaultSkinId
end
NovaAPI.DispatchEventWithData("DORM_LUA_SWITCH_ACTOR_CALLBACK", nil, {
true,
nCharId,
nSkinId
})
end
end
for _, nCharId in ipairs(tbCurChar) do
if 0 < nCharId and table.indexof(tbBeforeCharId, nCharId) < 1 then
NovaAPI.DispatchEventWithData("DORM_LUA_SWITCH_ACTOR_CALLBACK", nil, {false, nCharId})
end
end
if not DormGuideUI._bHideChrome then
self._mapNode.rtInteractiveRoot:SetShowBtns(true)
self._mapNode.rtMenu:SetActive(true)
end
self._mapNode.rtInteractiveRoot:SetCharCount()
self._mapNode.rtInteractiveRoot:SetFastInteractiveBtn()
end
if bConfirm then
local tbChar = {}
local bSame = true
local beforeChar = self._panel.mapDormRoomInfo[self._panel.nCurRoom].RoleList
for _, nCharId in ipairs(tbCurChar) do
if nCharId ~= 0 then
table.insert(tbChar, nCharId)
end
end
if #beforeChar ~= #tbChar then
bSame = false
end
for _, mapCharInfo in ipairs(beforeChar) do
if table.indexof(tbCurChar, mapCharInfo.RoleId) < 1 then
bSame = false
end
end
local callback = function(ret)
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
DormGuideAdapter.NoteCharResult(true)
self._panel.mapDormRoomInfo = ret
self._mapNode.rtInteractiveRoot:SetCharCount()
self._mapNode.rtInteractiveRoot:SetFastInteractiveBtn()
self._mapNode.CharListRoot:CloseList()
if not DormGuideUI._bHideChrome then
self._mapNode.rtInteractiveRoot:SetShowBtns(true)
self._mapNode.rtMenu:SetActive(true)
end
if self._nDormPopupCount > 0 then
self._nDormPopupCount = self._nDormPopupCount - 1
end
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
self._panel.nCurInteractiveMode
})
end
if bSame then
callback(self._panel.mapDormRoomInfo)
else
PlayerData.PlayerDormData:UpdateInvitationRole(self._panel.nCurRoom, tbChar, callback)
end
else
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
DormGuideAdapter.NoteCharResult(false)
revertChar()
self._mapNode.CharListRoot:CloseList()
if not DormGuideUI._bHideChrome then
self._mapNode.rtInteractiveRoot:SetShowBtns(true)
self._mapNode.rtMenu:SetActive(true)
end
if self._nDormPopupCount > 0 then
self._nDormPopupCount = self._nDormPopupCount - 1
end
self:RefreshVirtualMouseStick()
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
self._panel.nCurInteractiveMode
})
end
end
function DormCtrl:OnEvent_DormUpdatePresetNameSuc(nBuildId, sName)
self._panel.mapPresetInfo[nBuildId].BuildName = sName
end
function DormCtrl:OnEvent_DormBGMSetSuccess(tbInfo)
for _, value in ipairs(tbInfo) do
if self._panel.mapDormRoomInfo[value.DormRoomId] ~= nil then
self._panel.mapDormRoomInfo[value.DormRoomId].DiscId = value.DiscId
end
end
end
function DormCtrl:OnEvent_ResetDormMusic()
self._panel:SetDormBGM()
end
function DormCtrl:OnEvent_DormNewRoomUnlock()
local GetRoomInfoCallback = function(mapDormRoomInfo, mapDormBaseInfo)
self._panel.mapDormRoomInfo = mapDormRoomInfo
self._panel.mapDormBaseData = mapDormBaseInfo
end
local GetDormBagInfo = function(mapFurnitureBag)
self._panel.mapFurnitureBag = mapFurnitureBag
self._panel.mapFurnitureUsedCount = PlayerData.PlayerDormData:GetUsedCount()
self._mapNode.rtEditorRoot:Init(self._panel.nCurRoom)
self._mapNode.rtInteractiveRoot:SetRoom(self._panel.nCurRoom)
end
PlayerData.PlayerDormData:GetRoomInfo(GetRoomInfoCallback)
PlayerData.PlayerDormData:GetBagInfo(GetDormBagInfo)
end
function DormCtrl:OnEvent_DormHideUI()
self._mapNode.rtMenu:SetActive(false)
self._mapNode.rtInteractiveRoot.gameObject:SetActive(false)
self._mapNode.rtFriendRoot.gameObject:SetActive(false)
self._mapNode.btnShowMenu.gameObject:SetActive(true)
self._mapNode.btnHideAllUI2.gameObject:SetActive(false)
self.bHide = true
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
DormGuideUI.SetOwnerCap("businessHide", 56)
end
function DormCtrl:OnEvent_DormElevatorHideUI(bHide)
self.gameObject:SetActive(bHide)
end
return DormCtrl