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:
@@ -0,0 +1,91 @@
|
||||
local DormCharListItem = class("DormCharListItem", BaseCtrl)
|
||||
DormCharListItem._mapNodeConfig = {
|
||||
Mask = {},
|
||||
imgSelectChoose = {},
|
||||
TMPHint = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "In_Formation"
|
||||
},
|
||||
imgSelectIcon = {},
|
||||
imgSelect = {},
|
||||
imgSelectedMask = {},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
btnGrid = {sComponentName = "UIButton"},
|
||||
btnMask = {
|
||||
sNodeName = "Mask",
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Mask"
|
||||
},
|
||||
TMPSelectTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "RoguelikeBuild_Manage_SelectedTitle"
|
||||
},
|
||||
imgCharRare = {sComponentName = "Image"}
|
||||
}
|
||||
DormCharListItem._mapEventConfig = {}
|
||||
function DormCharListItem:Awake()
|
||||
end
|
||||
function DormCharListItem:FadeIn()
|
||||
end
|
||||
function DormCharListItem:FadeOut()
|
||||
end
|
||||
function DormCharListItem:OnEnable()
|
||||
end
|
||||
function DormCharListItem:OnDisable()
|
||||
end
|
||||
function DormCharListItem:OnDestroy()
|
||||
end
|
||||
function DormCharListItem:OnRelease()
|
||||
end
|
||||
function DormCharListItem:SetChar(nCharId)
|
||||
local mapChar = ConfigTable.GetData_Character(nCharId)
|
||||
if mapChar == nil then
|
||||
return
|
||||
end
|
||||
local mapCharItem = ConfigTable.GetData_Item(nCharId)
|
||||
if mapCharItem == nil then
|
||||
return
|
||||
end
|
||||
local nSkinId = mapChar.DefaultSkinId
|
||||
local mapCharSkin = ConfigTable.GetData_CharacterSkin(nSkinId)
|
||||
if mapCharSkin == nil then
|
||||
return
|
||||
end
|
||||
local sFrame = AllEnum.FrameType_New.BoardFrame .. AllEnum.BoardFrameColor[mapCharItem.Rarity]
|
||||
self:SetAtlasSprite(self._mapNode.imgCharRare, "12_rare", sFrame)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapCharSkin.Icon .. AllEnum.CharHeadIconSurfix.XXL)
|
||||
end
|
||||
function DormCharListItem:RefreshItem(bSelect, nIdx, nCharId, bBanned, nSortType, nRoomId)
|
||||
self.nCharId = nCharId
|
||||
self:SetChar(nCharId)
|
||||
self.bBanned = bBanned
|
||||
self._mapNode.Mask:SetActive(bBanned)
|
||||
self:SetSelect(bSelect)
|
||||
if 0 < nRoomId then
|
||||
local sName = PlayerData.PlayerDormData:GetRoomNameById(nRoomId)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPHint, sName)
|
||||
end
|
||||
end
|
||||
function DormCharListItem:SetSelect(bSelect, nIdx)
|
||||
self._mapNode.imgSelect:SetActive(bSelect)
|
||||
self._mapNode.imgSelectedMask:SetActive(bSelect)
|
||||
self._mapNode.imgSelectIcon:SetActive(bSelect)
|
||||
self._mapNode.imgSelectChoose:SetActive(bSelect)
|
||||
end
|
||||
function DormCharListItem:OnBtnClick_Mask(btn)
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Formation_Selected"))
|
||||
end
|
||||
function DormCharListItem:OnBtnClick_Detail(btn)
|
||||
if self._panel.nLoadProcess ~= nil and self._panel.nLoadProcess > 1 then
|
||||
return
|
||||
end
|
||||
if PlayerData.Guide:GetGuideState() then
|
||||
return
|
||||
end
|
||||
if self.nCharId ~= nil then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.CharBgPanel, PanelId.CharInfo, self.nCharId, {
|
||||
self.nCharId
|
||||
}, false)
|
||||
end
|
||||
end
|
||||
return DormCharListItem
|
||||
@@ -0,0 +1,431 @@
|
||||
local DormSelectCharCtrl = class("DormSelectCharCtrl", BaseCtrl)
|
||||
local LocalData = require("GameCore.Data.LocalData")
|
||||
local newDayTime = UTILS.GetDayRefreshTimeOffset()
|
||||
local _
|
||||
_, Select = ColorUtility.TryParseHtmlString("#264278")
|
||||
_, Unselect = ColorUtility.TryParseHtmlString("#94AAC0")
|
||||
DormSelectCharCtrl._mapNodeConfig = {
|
||||
sv = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
labEmpty = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Filter_NoAim"
|
||||
},
|
||||
btnCloseList = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnConfirm = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
rtCharListContent = {sComponentName = "Transform"},
|
||||
btnFilter = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Filter"
|
||||
},
|
||||
imgFilterChoose = {},
|
||||
txtBtnListConifrm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MainLine_Select_Btn_Confirm"
|
||||
},
|
||||
txtBtnListClose = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MainLine_Select_Btn_Cancel"
|
||||
},
|
||||
goSortRare = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SortRarity"
|
||||
},
|
||||
goSortAffinity = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SortAffinity"
|
||||
},
|
||||
imgArrowUpEnable = {},
|
||||
imgArrowUpDisable = {},
|
||||
imgArrowDownEnable = {},
|
||||
imgArrowDownDisable = {},
|
||||
labSelected = {sComponentName = "TMP_Text"},
|
||||
btnFavoriteOrder = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_InFavoriteOrder"
|
||||
},
|
||||
InFavoriteOrder = {
|
||||
sNodeName = "InFavoriteOrder",
|
||||
sComponentName = "CanvasGroup"
|
||||
},
|
||||
txtOffLabel = {
|
||||
sNodeName = "OffLabel",
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "CharacterList_Common"
|
||||
},
|
||||
txtInLabel = {
|
||||
sNodeName = "InLabel",
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "CharacterList_Common"
|
||||
},
|
||||
btnHome = {},
|
||||
btnBack = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnHelp = {},
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
nCount = 2,
|
||||
sLanguageId = "Dorm_CharListTitle"
|
||||
},
|
||||
TopBarPanel = {}
|
||||
}
|
||||
DormSelectCharCtrl._mapEventConfig = {
|
||||
[EventId.FilterConfirm] = "RefreshByFilter",
|
||||
Guide_PositionCharPos = "OnEvent_PositionCharPos",
|
||||
ForamtionDown = "OnEvent_ForamtionDown",
|
||||
SelectTemplateDD = "OnEvent_SortRuleChange"
|
||||
}
|
||||
function DormSelectCharCtrl:Awake()
|
||||
end
|
||||
function DormSelectCharCtrl:FadeIn()
|
||||
end
|
||||
function DormSelectCharCtrl:FadeOut()
|
||||
end
|
||||
function DormSelectCharCtrl:OnEnable()
|
||||
self:SetSortBtnLable()
|
||||
self.tbSortCfg = {
|
||||
nSortType = PlayerData.Filter.nDormCharSrotType,
|
||||
bOrder = PlayerData.Filter.bDormCharOrder
|
||||
}
|
||||
self.mapGridCtrl = {}
|
||||
self.gameObject:SetActive(false)
|
||||
local isDirty = PlayerData.Filter:IsDirty(AllEnum.OptionType.Char)
|
||||
self._mapNode.imgFilterChoose:SetActive(isDirty)
|
||||
self.bOpen = false
|
||||
self.bInFavorite = false
|
||||
self:RefreshFavoriteTopState()
|
||||
self._mapNode.btnHome.gameObject:SetActive(false)
|
||||
self._mapNode.btnHelp.gameObject:SetActive(false)
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function DormSelectCharCtrl:OnDisable()
|
||||
self.bOpen = false
|
||||
self.tbFilterCfg = {}
|
||||
for nInstanceId, mapCtrl in pairs(self.mapGridCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
self.mapGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.mapGridCtrl = {}
|
||||
self.gameObject:SetActive(false)
|
||||
self._mapNode.TopBarPanel:SetActive(true)
|
||||
end
|
||||
function DormSelectCharCtrl:OnDestroy()
|
||||
end
|
||||
function DormSelectCharCtrl:OnRelease()
|
||||
end
|
||||
function DormSelectCharCtrl:ShowList(tbCurSelectChar, bFastSelect, nIdx, tbCharInRoom)
|
||||
self.tbCharInRoom = tbCharInRoom
|
||||
self.tbOriginChar = clone(tbCurSelectChar)
|
||||
self.gameObject:SetActive(true)
|
||||
self.tbAllChar = PlayerData.Char:GetDataForCharList()
|
||||
self.bFastSelect = bFastSelect == true
|
||||
self.nIdx = not self.bFastSelect and nIdx or 0
|
||||
self.curChar = tbCurSelectChar
|
||||
self.bOpen = true
|
||||
self.nGuideOpenVer = (self.nGuideOpenVer or 0) + 1
|
||||
self.mapGridCtrl = {}
|
||||
self.tbFilterCfg = {}
|
||||
self:RefreshOrderState()
|
||||
self:FilterChar()
|
||||
self:SortChar()
|
||||
self._mapNode.sv:Init(#self.tbSortedChar, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
||||
self:SetCharCount()
|
||||
self:SetSortBtnState(self._mapNode.goSortRare, self.tbSortCfg.nSortType == AllEnum.SortType.Rarity, self.tbSortCfg.bOrder)
|
||||
self:SetSortBtnState(self._mapNode.goSortAffinity, self.tbSortCfg.nSortType == AllEnum.SortType.Affinity, self.tbSortCfg.bOrder)
|
||||
end
|
||||
function DormSelectCharCtrl:Refresh()
|
||||
local isDirty = PlayerData.Filter:IsDirty(AllEnum.OptionType.Char)
|
||||
self._mapNode.imgFilterChoose:SetActive(isDirty)
|
||||
self:FilterChar()
|
||||
self:SortChar()
|
||||
self:RefreshOrderState()
|
||||
self:RefreshFavoriteTopState()
|
||||
local nCurCount = #self.tbSortedChar
|
||||
if 0 < nCurCount then
|
||||
self._mapNode.labEmpty.gameObject:SetActive(false)
|
||||
self._mapNode.sv.gameObject:SetActive(true)
|
||||
self._mapNode.sv:Init(#self.tbSortedChar, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
else
|
||||
self._mapNode.sv.gameObject:SetActive(false)
|
||||
self._mapNode.labEmpty.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function DormSelectCharCtrl:CloseList()
|
||||
local closeCallback = function()
|
||||
self.tbFilterCfg = {}
|
||||
for nInstanceId, mapCtrl in pairs(self.mapGridCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
self.mapGridCtrl[nInstanceId] = nil
|
||||
end
|
||||
self.mapGridCtrl = {}
|
||||
self.gameObject:SetActive(false)
|
||||
self._mapNode.TopBarPanel:SetActive(true)
|
||||
self.bOpen = false
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
DormGuideAdapter.NoteCharClosed()
|
||||
EventManager.Hit("DormGuide_CharSelectClosed")
|
||||
end
|
||||
self.animator:Play("LiveTogether_out")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
self:AddTimer(1, 0.3, closeCallback, true, true, true, nil)
|
||||
self._mapNode.TopBarPanel:SetActive(false)
|
||||
end
|
||||
function DormSelectCharCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.mapGridCtrl[nInstanceId] then
|
||||
self.mapGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormCharSelect.DormCharListItem")
|
||||
end
|
||||
local nIndex = gridIndex + 1
|
||||
local nCharId = self.tbSortedChar[nIndex]
|
||||
local selectIdx = table.indexof(self.curChar, nCharId)
|
||||
local nMark = selectIdx
|
||||
local bBaned = false
|
||||
bBaned = self.tbCharInRoom[nCharId] ~= nil
|
||||
local nRoomId = bBaned and self.tbCharInRoom[nCharId] or 0
|
||||
self.mapGridCtrl[nInstanceId]:RefreshItem(0 < selectIdx, nMark, nCharId, bBaned, self.tbSortCfg.nSortType, nRoomId)
|
||||
end
|
||||
function DormSelectCharCtrl:OnGridBtnClick(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local nCharId = self.tbSortedChar[nIndex]
|
||||
local nTeamIdx = table.indexof(self.curChar, nCharId)
|
||||
if 0 < nTeamIdx then
|
||||
self.curChar[nTeamIdx] = 0
|
||||
self:SetGridIndex(nCharId, 0)
|
||||
for idx, CharId in ipairs(self.curChar) do
|
||||
self:SetGridIndex(CharId, idx)
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SWITCH_ACTOR_CALLBACK", nil, {false, nCharId})
|
||||
else
|
||||
local nPos = table.indexof(self.curChar, 0)
|
||||
if 0 < nPos then
|
||||
self.curChar[nPos] = nCharId
|
||||
for idx, CharId in ipairs(self.curChar) do
|
||||
self:SetGridIndex(CharId, idx)
|
||||
end
|
||||
PlayerData.Voice:PlayCharVoice("swap", nCharId)
|
||||
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
|
||||
})
|
||||
else
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DormTips_RoleFull") or "")
|
||||
end
|
||||
end
|
||||
self:SetCharCount()
|
||||
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
|
||||
end
|
||||
function DormSelectCharCtrl:SetGridIndex(nCharId, nIdx)
|
||||
local nGirdIdx = table.indexof(self.tbSortedChar, nCharId)
|
||||
local trGrid = self._mapNode.rtCharListContent:Find(tostring(nGirdIdx - 1))
|
||||
if trGrid ~= nil then
|
||||
local nInstanceId = trGrid.gameObject:GetInstanceID()
|
||||
self.mapGridCtrl[nInstanceId]:SetSelect(0 < nIdx, nIdx)
|
||||
end
|
||||
end
|
||||
function DormSelectCharCtrl:FilterChar()
|
||||
self.tbSortedChar = {}
|
||||
for _, data in pairs(self.tbAllChar) do
|
||||
local mapCharCfgData = ConfigTable.GetData_Character(data.nId)
|
||||
local mapDormCharCfgData = ConfigTable.GetData("DormRole", data.nId, false)
|
||||
local bAvailable = mapCharCfgData.Available and mapDormCharCfgData ~= nil
|
||||
if bAvailable then
|
||||
local isFilter = PlayerData.Filter:CheckFilterByChar(data.nId)
|
||||
local bCur = table.indexof(self.curChar, data.nId) > 0
|
||||
if isFilter or bCur then
|
||||
local mapSkill = PlayerData.Char:GetCharSkillUpgradeData(data.nId)
|
||||
local nSkillLevelSum = 0
|
||||
for k, v in pairs(mapSkill) do
|
||||
nSkillLevelSum = nSkillLevelSum + v.nLv
|
||||
end
|
||||
data.SkillLevel = nSkillLevelSum
|
||||
table.insert(self.tbSortedChar, data)
|
||||
end
|
||||
end
|
||||
end
|
||||
print("过滤后 charCount:" .. #self.tbSortedChar)
|
||||
end
|
||||
function DormSelectCharCtrl:SortChar()
|
||||
local tbCharId = {}
|
||||
UTILS.SortByPriority(self.tbSortedChar, {
|
||||
AllEnum.CharSortField[self.tbSortCfg.nSortType]
|
||||
}, PlayerData.Char:GetCharSortField(), self.tbSortCfg.bOrder, self.bInFavorite)
|
||||
self.tbSortedChar = self:MoveElementsToFront(self.tbSortedChar, self.curChar)
|
||||
for _, mapCharId in ipairs(self.tbSortedChar) do
|
||||
table.insert(tbCharId, mapCharId.nId)
|
||||
end
|
||||
self.tbSortedChar = tbCharId
|
||||
end
|
||||
function DormSelectCharCtrl:SetCharCount()
|
||||
local nCurCount = 0
|
||||
for _, nCharId in ipairs(self.curChar) do
|
||||
if nCharId ~= 0 then
|
||||
nCurCount = nCurCount + 1
|
||||
end
|
||||
end
|
||||
local mapDormRoomCfgData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
|
||||
local maxCharCount = 0
|
||||
if mapDormRoomCfgData ~= nil then
|
||||
maxCharCount = mapDormRoomCfgData.RoleNum
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.labSelected, orderedFormat(ConfigTable.GetUIText("Board_Selected_Count"), nCurCount, maxCharCount))
|
||||
end
|
||||
function DormSelectCharCtrl:MoveElementsToFront(sortedList, elementsToMove)
|
||||
local lookup = {}
|
||||
for _, v in ipairs(elementsToMove) do
|
||||
lookup[v] = true
|
||||
end
|
||||
local moved, rest = {}, {}
|
||||
for _, v in ipairs(sortedList) do
|
||||
if lookup[v.nId] then
|
||||
table.insert(moved, v)
|
||||
else
|
||||
table.insert(rest, v)
|
||||
end
|
||||
end
|
||||
for _, v in ipairs(rest) do
|
||||
table.insert(moved, v)
|
||||
end
|
||||
return moved
|
||||
end
|
||||
function DormSelectCharCtrl:RefreshOrderState()
|
||||
self._mapNode.imgArrowUpEnable:SetActive(self.tbSortCfg.bOrder)
|
||||
self._mapNode.imgArrowUpDisable:SetActive(not self.tbSortCfg.bOrder)
|
||||
self._mapNode.imgArrowDownEnable:SetActive(not self.tbSortCfg.bOrder)
|
||||
self._mapNode.imgArrowDownDisable:SetActive(self.tbSortCfg.bOrder)
|
||||
end
|
||||
function DormSelectCharCtrl:RefreshByFilter()
|
||||
self:Refresh()
|
||||
end
|
||||
function DormSelectCharCtrl:OnEvent_ForamtionDown(nIdx)
|
||||
local nCurCharId = self.curChar[nIdx]
|
||||
self.curChar[nIdx] = 0
|
||||
local nGridIdx = table.indexof(self.tbSortedChar, nCurCharId)
|
||||
local trGrid = self._mapNode.rtCharListContent:Find(tostring(nGridIdx - 1))
|
||||
if trGrid ~= nil then
|
||||
local nInstanceId = trGrid.gameObject:GetInstanceID()
|
||||
self.mapGridCtrl[nInstanceId]:SetSelect(false, nIdx)
|
||||
end
|
||||
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
|
||||
end
|
||||
function DormSelectCharCtrl:OnEvent_SortRuleChange(nValue)
|
||||
if not self.bOpen then
|
||||
return
|
||||
end
|
||||
local nV = nValue + 1
|
||||
self.tbSortCfg.nSortType = PlayerData.Char:GetCharSortType()[nV]
|
||||
self.tbSortCfg.bOrder = false
|
||||
PlayerData.Filter:CacheCharSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
|
||||
self:Refresh()
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_Close(btn)
|
||||
EventManager.Hit("DormCharSelectResult", self.curChar, false)
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_Clear(btn)
|
||||
for idx, nCharId in ipairs(self.curChar) do
|
||||
if self.curChar[idx] ~= 0 then
|
||||
self:SetGridIndex(self.curChar[i], 0)
|
||||
self.curChar[idx] = 0
|
||||
end
|
||||
end
|
||||
EventManager.Hit("OnEvent_ChangeTeamModel", self.curChar)
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_Confirm(btn)
|
||||
EventManager.Hit("DormCharSelectResult", self.curChar, true)
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_Filter()
|
||||
local tbOption = {
|
||||
AllEnum.ChooseOption.Char_Element,
|
||||
AllEnum.ChooseOption.Char_Rarity,
|
||||
AllEnum.ChooseOption.Char_PowerStyle,
|
||||
AllEnum.ChooseOption.Char_TacticalStyle,
|
||||
AllEnum.ChooseOption.Char_AffiliatedForces
|
||||
}
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.FilterPopupPanel, tbOption)
|
||||
end
|
||||
function DormSelectCharCtrl:OnEvent_PositionCharPos(_tmpChar)
|
||||
for i, v in pairs(self.tbSortedChar) do
|
||||
if v == _tmpChar then
|
||||
self._mapNode.sv:SetScrollGridPos(i - 1, 0, 0)
|
||||
EventManager.Hit("Positioning_Char_Grid", _tmpChar, i - 1)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormSelectCharCtrl:SetSortBtnState(btn, bSelect, bOrder)
|
||||
local txtLable = btn.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
|
||||
local imgArrowUp = btn.transform:Find("Dropdown/goDummy/imgArrowUp"):GetComponent("Image")
|
||||
local imgArrowDown = btn.transform:Find("Dropdown/goDummy/imgArrowDown"):GetComponent("Image")
|
||||
if bSelect then
|
||||
NovaAPI.SetImageColor(imgArrowUp, bOrder and Select or Unselect)
|
||||
NovaAPI.SetImageColor(imgArrowDown, bOrder and Unselect or Select)
|
||||
else
|
||||
NovaAPI.SetImageColor(imgArrowUp, Unselect)
|
||||
NovaAPI.SetImageColor(imgArrowDown, Unselect)
|
||||
end
|
||||
NovaAPI.SetTMPColor(txtLable, bSelect and Select or Unselect)
|
||||
end
|
||||
function DormSelectCharCtrl:SetSortBtnLable()
|
||||
local txtLable1 = self._mapNode.goSortAffinity.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
|
||||
local txtLable2 = self._mapNode.goSortRare.transform:Find("Dropdown/Label"):GetComponent("TMP_Text")
|
||||
NovaAPI.SetTMPText(txtLable1, ConfigTable.GetUIText("CharList_Sort_Toggle_Affinity"))
|
||||
NovaAPI.SetTMPText(txtLable2, ConfigTable.GetUIText("Depot_SortByRare"))
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_SortRarity(btn)
|
||||
if self.tbSortCfg.nSortType == AllEnum.SortType.Rarity then
|
||||
self.tbSortCfg.bOrder = not self.tbSortCfg.bOrder
|
||||
else
|
||||
self.tbSortCfg.nSortType = AllEnum.SortType.Rarity
|
||||
self.tbSortCfg.bOrder = true
|
||||
end
|
||||
PlayerData.Filter:CacheDormSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
|
||||
self:SetSortBtnState(btn, true, self.tbSortCfg.bOrder)
|
||||
self:SetSortBtnState(self._mapNode.goSortAffinity, false, self.tbSortCfg.bOrder)
|
||||
self:Refresh()
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_SortAffinity(btn)
|
||||
if self.tbSortCfg.nSortType == AllEnum.SortType.Affinity then
|
||||
self.tbSortCfg.bOrder = not self.tbSortCfg.bOrder
|
||||
else
|
||||
self.tbSortCfg.nSortType = AllEnum.SortType.Affinity
|
||||
self.tbSortCfg.bOrder = true
|
||||
end
|
||||
PlayerData.Filter:CacheDormSort(self.tbSortCfg.nSortType, self.tbSortCfg.bOrder)
|
||||
self:SetSortBtnState(btn, true, self.tbSortCfg.bOrder)
|
||||
self:SetSortBtnState(self._mapNode.goSortRare, false, self.tbSortCfg.bOrder)
|
||||
self:Refresh()
|
||||
end
|
||||
function DormSelectCharCtrl:RefreshFavoriteTopState()
|
||||
if self.bInFavorite then
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.InFavoriteOrder, 1)
|
||||
else
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.InFavoriteOrder, 0)
|
||||
end
|
||||
end
|
||||
function DormSelectCharCtrl:OnBtnClick_InFavoriteOrder(btn)
|
||||
self.bInFavorite = not self.bInFavorite
|
||||
local sTip = ""
|
||||
if self.bInFavorite then
|
||||
sTip = ConfigTable.GetUIText("OpenCharacterCommonTop_Tip")
|
||||
else
|
||||
sTip = ConfigTable.GetUIText("CloseCharacterCommonTop_Tip")
|
||||
end
|
||||
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
||||
self:Refresh()
|
||||
end
|
||||
return DormSelectCharCtrl
|
||||
@@ -0,0 +1,410 @@
|
||||
local DormContactBtnListCtrl = class("DormContactBtnListCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
DormContactBtnListCtrl._mapNodeConfig = {
|
||||
pool = {sComponentName = "Transform"},
|
||||
btnInteractiveList = {},
|
||||
ContentInteractiveList = {sComponentName = "Transform"},
|
||||
rtCharInteractive = {},
|
||||
rtInteractiveBtn = {},
|
||||
btnInteractive1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Interactive1"
|
||||
},
|
||||
txtBtnInteractive1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Contact_Interactive1"
|
||||
},
|
||||
btnInteractive2 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Interactive2"
|
||||
},
|
||||
txtBtnInteractive2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Contact_Interactive2"
|
||||
},
|
||||
btnInteractive3 = {sComponentName = "UIButton"},
|
||||
btnCloseCharInteractive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ExitCharActive"
|
||||
},
|
||||
goCharHudRoot = {},
|
||||
rtCharInteractiveHide = {},
|
||||
CharInteractiveHideAnim = {
|
||||
sNodeName = "rtCharInteractiveHide",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
btnCloseCharPresent = {
|
||||
sComponentName = "UIButton",
|
||||
nCount = 2,
|
||||
callback = "OnBtnClick_CloseCharPresent"
|
||||
},
|
||||
rtGiftRoot = {
|
||||
sCtrlName = "Game.UI.Dorm.DormContact.DormInteractiveGiftCtrl"
|
||||
},
|
||||
goFavorHint = {sComponentName = "Animator"},
|
||||
TMPHudFavorHint = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
DormContactBtnListCtrl._mapEventConfig = {}
|
||||
DormContactBtnListCtrl._mapRedDotConfig = {}
|
||||
function DormContactBtnListCtrl:Awake()
|
||||
self.mapListBtn = {}
|
||||
self.tbListBtnPool = {}
|
||||
self._timerInteractive = nil
|
||||
self.mapCurCharInfo = nil
|
||||
end
|
||||
function DormContactBtnListCtrl:FadeIn()
|
||||
end
|
||||
function DormContactBtnListCtrl:FadeOut()
|
||||
end
|
||||
function DormContactBtnListCtrl:OnEnable()
|
||||
self._mapNode.rtGiftRoot.parent = self
|
||||
self._mapNode.TMPHudFavorHint.gameObject:SetActive(false)
|
||||
self._mapNode.rtCharInteractive:SetActive(false)
|
||||
self._mapNode.btnInteractive3.gameObject:SetActive(false)
|
||||
self._mapNode.rtInteractiveBtn:SetActive(self:CheckHasBtn())
|
||||
end
|
||||
function DormContactBtnListCtrl:OnDisable()
|
||||
if self._timerInteractive ~= nil then
|
||||
self._timerInteractive:Cancel()
|
||||
self._timerInteractive = nil
|
||||
end
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
end
|
||||
function DormContactBtnListCtrl:OnDestroy()
|
||||
end
|
||||
function DormContactBtnListCtrl:OnRelease()
|
||||
end
|
||||
function DormContactBtnListCtrl:GetBtnItem()
|
||||
if #self.tbListBtnPool > 0 then
|
||||
local goItem = table.remove(self.tbListBtnPool, 1)
|
||||
goItem.transform:SetParent(self._mapNode.ContentInteractiveList)
|
||||
goItem.transform.localScale = Vector3.one
|
||||
return goItem
|
||||
else
|
||||
local go = instantiate(self._mapNode.btnInteractiveList)
|
||||
local goComp = go:GetComponent("UIButton")
|
||||
goComp.transform:SetParent(self._mapNode.ContentInteractiveList)
|
||||
goComp.transform.localScale = Vector3.one
|
||||
goComp.gameObject:SetActive(true)
|
||||
return goComp
|
||||
end
|
||||
end
|
||||
function DormContactBtnListCtrl:RecycleBtnItem(goItem)
|
||||
local animtor = goItem:GetComponent("Animator")
|
||||
if animtor ~= nil then
|
||||
animtor:Play("Interactive_out")
|
||||
end
|
||||
self:AddTimer(1, 0.16, function()
|
||||
goItem.transform:SetParent(self._mapNode.pool)
|
||||
table.insert(self.tbListBtnPool, goItem)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormContactBtnListCtrl:AddInteractiveBtn(rtTarget, nType, nId, nEntityId)
|
||||
if self.mapListBtn[nEntityId] ~= nil then
|
||||
for index, mapData in ipairs(self.mapListBtn[nEntityId]) do
|
||||
if mapData.nType == nType then
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
local goItem = self:GetBtnItem()
|
||||
if self.mapListBtn[nEntityId] == nil then
|
||||
self.mapListBtn[nEntityId] = {}
|
||||
end
|
||||
table.insert(self.mapListBtn[nEntityId], {
|
||||
goItem = goItem,
|
||||
objTarget = rtTarget,
|
||||
nType = nType,
|
||||
nDataId = nId,
|
||||
nEntityId = nEntityId
|
||||
})
|
||||
local compTMP = goItem.transform:Find("AnimRoot/imgBg/TMPName"):GetComponent("TMP_Text")
|
||||
local animtor = goItem:GetComponent("Animator")
|
||||
local imgIcon = goItem.transform:Find("AnimRoot/imgBg/imgIcon"):GetComponent("Image")
|
||||
if nType == 0 then
|
||||
self:SetPngSprite(imgIcon, "Icon/ZZZOther/dorminter_role_small")
|
||||
elseif nType == 1 then
|
||||
self:SetPngSprite(imgIcon, "Icon/ZZZOther/dorminter_furniture_small")
|
||||
else
|
||||
local mapFurnitureCfgData = ConfigTable.GetData("DormFurniture", nId)
|
||||
if mapFurnitureCfgData ~= nil then
|
||||
local sPath = mapFurnitureCfgData.BubbleIcon .. "_small"
|
||||
self:SetPngSprite(imgIcon, sPath)
|
||||
end
|
||||
end
|
||||
if animtor ~= nil then
|
||||
animtor:Play("Interactive_in")
|
||||
end
|
||||
local mapItemCfgData = ConfigTable.GetData_Item(nId)
|
||||
if mapItemCfgData ~= nil then
|
||||
NovaAPI.SetTMPText(compTMP, mapItemCfgData.Title)
|
||||
end
|
||||
goItem.onClick:RemoveAllListeners()
|
||||
goItem.onClick:AddListener(function()
|
||||
self:DormContactBtnClick(nEntityId, nType, nId)
|
||||
end)
|
||||
self._mapNode.rtInteractiveBtn:SetActive(self:CheckHasBtn())
|
||||
end
|
||||
function DormContactBtnListCtrl:RemoveRewardHud(nEntityId, nFurId)
|
||||
if self.mapListBtn[nEntityId] == nil or #self.mapListBtn[nEntityId] == 0 then
|
||||
return
|
||||
end
|
||||
local removedIdx = 0
|
||||
for nIdx, mapInfo in ipairs(self.mapListBtn[nEntityId]) do
|
||||
if mapInfo.nType == 4 and mapInfo.nDataId == nFurId then
|
||||
removedIdx = nIdx
|
||||
end
|
||||
end
|
||||
local removedInfo = table.remove(self.mapListBtn[nEntityId], removedIdx)
|
||||
self:RecycleBtnItem(removedInfo.goItem)
|
||||
end
|
||||
function DormContactBtnListCtrl:RemoveInteractiveBtn(nEntityId)
|
||||
if self.mapListBtn[nEntityId] ~= nil then
|
||||
for _, mapBtnInfo in ipairs(self.mapListBtn[nEntityId]) do
|
||||
mapBtnInfo.goItem.onClick:RemoveAllListeners()
|
||||
self:RecycleBtnItem(mapBtnInfo.goItem)
|
||||
end
|
||||
self.mapListBtn[nEntityId] = nil
|
||||
end
|
||||
self._mapNode.rtInteractiveBtn:SetActive(self:CheckHasBtn())
|
||||
end
|
||||
function DormContactBtnListCtrl:RemoveAllInteractiveBtn()
|
||||
for nEntityId, tbInfo in pairs(self.mapListBtn) do
|
||||
for _, goBtn in ipairs(tbInfo) do
|
||||
goBtn.goItem.onClick:RemoveAllListeners()
|
||||
self:RecycleBtnItem(goBtn.goItem)
|
||||
end
|
||||
end
|
||||
self.mapListBtn = {}
|
||||
self._mapNode.rtInteractiveBtn:SetActive(self:CheckHasBtn())
|
||||
end
|
||||
function DormContactBtnListCtrl:EnterCharActive(nEntityId)
|
||||
if self._timerInteractive ~= nil then
|
||||
self._timerInteractive:Cancel()
|
||||
self._timerInteractive = nil
|
||||
end
|
||||
if self.mapListBtn[nEntityId] == nil or #self.mapListBtn[nEntityId] == 0 then
|
||||
return
|
||||
end
|
||||
local mapInfo = self.mapListBtn[nEntityId][1]
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
self._mapNode.goCharHudRoot:SetActive(true)
|
||||
self._mapNode.rtCharInteractive:SetActive(true)
|
||||
self._mapNode.rtInteractiveBtn:SetActive(false)
|
||||
local rtTarget = mapInfo.objTarget
|
||||
self.mapCurCharInfo = mapInfo
|
||||
EventManager.Hit("DormShowInteractiveBtns", false)
|
||||
self._mapNode.CharInteractiveHideAnim:Play("DormCharInteractiveHide_in")
|
||||
safe_call_cs_func(CS.DormModuleHelper.SetHudFollowTarget, self._mapNode.goCharHudRoot, rtTarget, Vector3(0, 1.8, 0))
|
||||
end
|
||||
function DormContactBtnListCtrl:EnterCharActiveViewMode(rtTransform, nType, nDataId, nEntityId)
|
||||
if self._timerInteractive ~= nil then
|
||||
self._timerInteractive:Cancel()
|
||||
self._timerInteractive = nil
|
||||
end
|
||||
if nDataId == 9100 or nDataId == 9101 then
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(false)
|
||||
else
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
end
|
||||
self._mapNode.goCharHudRoot:SetActive(true)
|
||||
self._mapNode.rtCharInteractive:SetActive(true)
|
||||
self._mapNode.rtInteractiveBtn:SetActive(false)
|
||||
self._mapNode.CharInteractiveHideAnim:Play("DormCharInteractiveHide_in")
|
||||
local rtTarget = rtTransform
|
||||
self.mapCurCharInfo = {
|
||||
goItem = nil,
|
||||
objTarget = rtTarget,
|
||||
nType = nType,
|
||||
nDataId = nDataId,
|
||||
nEntityId = nEntityId
|
||||
}
|
||||
EventManager.Hit("DormShowInteractiveBtns", false)
|
||||
safe_call_cs_func(CS.DormModuleHelper.SetHudFollowTarget, self._mapNode.goCharHudRoot, rtTarget, Vector3(0, 1.5, 0))
|
||||
end
|
||||
function DormContactBtnListCtrl:PerformanceTimer(nTime, callback)
|
||||
if self._timerInteractive ~= nil then
|
||||
self._timerInteractive:Cancel()
|
||||
self._timerInteractive = nil
|
||||
end
|
||||
local TimerCallback = function()
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
if callback ~= nil and type(callback) == "function" then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(false)
|
||||
self._timerInteractive = self:AddTimer(1, nTime, TimerCallback, true, true, true, nil)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, nTime)
|
||||
end
|
||||
function DormContactBtnListCtrl:ExitCharActive()
|
||||
self.mapCurCharInfo = nil
|
||||
self._mapNode.goCharHudRoot:SetActive(false)
|
||||
self._mapNode.rtCharInteractive:SetActive(false)
|
||||
self._mapNode.rtInteractiveBtn:SetActive(self:CheckHasBtn())
|
||||
if self._timerInteractive ~= nil then
|
||||
self._timerInteractive:Cancel()
|
||||
self._timerInteractive = nil
|
||||
end
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
self._mapNode.CharInteractiveHideAnim:Play("DormCharInteractiveHide_in")
|
||||
self._mapNode.rtGiftRoot:Exit()
|
||||
EventManager.Hit("DormShowInteractiveBtns", true)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_INTERACTIVE_WITH_ACTOR_CALLBACK", nil, {0})
|
||||
end
|
||||
function DormContactBtnListCtrl:CheckHasBtn()
|
||||
if next(self.mapListBtn) ~= nil then
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
function DormContactBtnListCtrl:OnBtnClick_Interactive1()
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
if self.mapCurCharInfo == nil then
|
||||
DormGuideAdapter.NoteCaressRejected()
|
||||
self:ExitCharActive()
|
||||
return
|
||||
end
|
||||
local nRoomId = self._panel.nCurRoom
|
||||
local callback = function(tbAffinityData, changeInfo)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_INTERACTIVE_WITH_ACTOR_CALLBACK", nil, {
|
||||
self.mapCurCharInfo.nEntityId
|
||||
})
|
||||
local FinishChain = function()
|
||||
DormGuideAdapter.NoteCaressDone()
|
||||
end
|
||||
local PerformanceTimerCallback = function()
|
||||
if tbAffinityData ~= nil and 0 < #tbAffinityData then
|
||||
local Info = tbAffinityData[1].AffinityInfo
|
||||
local mapItem = tbAffinityData[1].ItemInfo
|
||||
local ItemCallback = function()
|
||||
if Info.nLevelChange > 0 then
|
||||
DormGuideAdapter.NoteCaressPhase("level")
|
||||
DormGuideAdapter.WatchPanel(PanelId.CharFavourLevelUp)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourLevelUp, Info.CharId, Info.AffinityLevel, Info.nBeforeLevel, Info.AffinityExp, Info.nBeforeExp)
|
||||
else
|
||||
FinishChain()
|
||||
end
|
||||
end
|
||||
if mapItem ~= nil and 0 < mapItem.Tid then
|
||||
DormGuideAdapter.NoteCaressPhase("reward")
|
||||
UTILS.OpenReceiveByDisplayItem({mapItem}, changeInfo, ItemCallback)
|
||||
else
|
||||
ItemCallback()
|
||||
end
|
||||
else
|
||||
FinishChain()
|
||||
end
|
||||
end
|
||||
DormGuideAdapter.NoteCaressPhase("performing")
|
||||
self:PerformanceTimer(3, PerformanceTimerCallback)
|
||||
if tbAffinityData ~= nil and 0 < #tbAffinityData then
|
||||
local nAffinity = tbAffinityData[1].AffinityInfo.nExpChange or 0
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPHudFavorHint, orderedFormat(ConfigTable.GetUIText("Dorm_AffinityUp"), nAffinity))
|
||||
self._mapNode.goFavorHint:Play("CharInterActiveAffinityHintIn")
|
||||
WwiseAudioMgr:PostEvent("Home_UI_char_up")
|
||||
end
|
||||
end
|
||||
if PlayerData.PlayerDormData:CheckRoleInteraction(self.mapCurCharInfo.nDataId) then
|
||||
callback(nil)
|
||||
return
|
||||
end
|
||||
self:DormCharInteractive({
|
||||
{
|
||||
RoleId = self.mapCurCharInfo.nDataId,
|
||||
DormRoomId = nRoomId
|
||||
}
|
||||
}, callback)
|
||||
end
|
||||
function DormContactBtnListCtrl:OnBtnClick_Interactive2()
|
||||
local nDayCount = PlayerData.PlayerDormData:GetCharGiftCountDay(self.mapCurCharInfo.nDataId)
|
||||
if nDayCount < 1 then
|
||||
local tips = ConfigTable.GetUIText("Dorm_GiftCountMaxHint")
|
||||
EventManager.Hit(EventId.OpenMessageBox, tips)
|
||||
return
|
||||
end
|
||||
self._mapNode.rtGiftRoot.gameObject:SetActive(true)
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(false)
|
||||
self._mapNode.rtGiftRoot:OpenGiftChoose(self.mapCurCharInfo.nDataId, self)
|
||||
end
|
||||
function DormContactBtnListCtrl:OnBtnClick_ExitCharActive()
|
||||
local bHit, rtChar, nDataId, nEntityId = safe_call_cs_func2(CS.DormModuleHelper_HotFix.TryPickActorAtLastPressDown)
|
||||
if not bHit then
|
||||
self:ExitCharActive()
|
||||
elseif nEntityId == self.mapCurCharInfo.nEntityId then
|
||||
return
|
||||
else
|
||||
self:EnterCharActiveViewMode(rtChar, 2, nDataId, nEntityId)
|
||||
end
|
||||
end
|
||||
function DormContactBtnListCtrl:OnBtnClick_CloseCharPresent()
|
||||
self._mapNode.rtGiftRoot:Exit()
|
||||
self._mapNode.rtCharInteractiveHide:SetActive(true)
|
||||
end
|
||||
function DormContactBtnListCtrl:SendGiftResult(nRoomId, nCharId, tbGift)
|
||||
local callback = function(Info)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_INTERACTIVE_WITH_ACTOR_CALLBACK", nil, {
|
||||
self.mapCurCharInfo.nEntityId
|
||||
})
|
||||
self:OnBtnClick_CloseCharPresent()
|
||||
local PerformanceTimerCallback = function()
|
||||
if Info ~= nil and Info.nLevelChange > 0 then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourLevelUp, Info.CharId, Info.AffinityLevel, Info.nBeforeLevel, Info.AffinityExp, Info.nBeforeExp)
|
||||
end
|
||||
end
|
||||
self:PerformanceTimer(3, PerformanceTimerCallback)
|
||||
if Info ~= nil then
|
||||
local nAffinity = Info.nExpChange or 0
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPHudFavorHint, orderedFormat(ConfigTable.GetUIText("Dorm_AffinityUp"), nAffinity))
|
||||
self._mapNode.goFavorHint:Play("CharInterActiveAffinityHintIn")
|
||||
WwiseAudioMgr:PostEvent("Home_UI_char_up")
|
||||
end
|
||||
end
|
||||
self:DormCharGift(nRoomId, nCharId, tbGift, callback)
|
||||
end
|
||||
function DormContactBtnListCtrl:DormCharInteractive(tbCharId, callback)
|
||||
local tbCheck = {}
|
||||
for _, mapRoleInfo in ipairs(tbCharId) do
|
||||
if not PlayerData.PlayerDormData:CheckRoleInteraction(mapRoleInfo.RoleId) then
|
||||
table.insert(tbCheck, mapRoleInfo)
|
||||
end
|
||||
end
|
||||
if #tbCheck < 1 then
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback(nil)
|
||||
end
|
||||
return
|
||||
end
|
||||
local netCallback = function(InfoList, changeinfo)
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback(InfoList, changeinfo)
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:DormRoleInteraction(tbCheck, netCallback)
|
||||
end
|
||||
function DormContactBtnListCtrl:DormCharGift(nRoomId, nCharId, tbGift, callback)
|
||||
if PlayerData.PlayerDormData:CheckRoleSendGift(nCharId) then
|
||||
print("该角色今天已被赠送过礼物")
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback(nil)
|
||||
end
|
||||
return
|
||||
end
|
||||
local netCallback = function(Info)
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback(Info)
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:DormAffinityGiftSend(nRoomId, nCharId, tbGift, netCallback)
|
||||
end
|
||||
function DormContactBtnListCtrl:DormContactBtnClick(nEntityId, nType, nDataId)
|
||||
if nType == 0 then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SELECT_ACTOR_CALLBACK", nil, {nEntityId})
|
||||
self:EnterCharActive(nEntityId)
|
||||
elseif nType == 1 then
|
||||
NovaAPI.DispatchEventWithData("BUTTON_DORM_INTERACTIVE_HUD", nil, {nEntityId, nType})
|
||||
else
|
||||
EventManager.Hit("FurnitureFunctionBtnClick", nEntityId, nDataId)
|
||||
end
|
||||
end
|
||||
return DormContactBtnListCtrl
|
||||
@@ -0,0 +1,376 @@
|
||||
local DormInteractiveGiftCtrl = class("DormInteractiveGiftCtrl", BaseCtrl)
|
||||
local newDayTime = UTILS.GetDayRefreshTimeOffset()
|
||||
local LocalData = require("GameCore.Data.LocalData")
|
||||
DormInteractiveGiftCtrl._mapNodeConfig = {
|
||||
loopsvGiftList = {
|
||||
sNodeName = "svGiftList",
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnPresent = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickSendGift"
|
||||
},
|
||||
btnPresentGray = {sComponentName = "UIButton"},
|
||||
goEmpty = {sNodeName = "Empty"},
|
||||
txtGiftCount = {sComponentName = "TMP_Text"},
|
||||
btnDetails = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Details"
|
||||
},
|
||||
txtEmptyCount = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_GiftEmptyTitle"
|
||||
},
|
||||
txtBtnPresent = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Contact_BtnSendGift"
|
||||
},
|
||||
txtBtnPresentGray = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Contact_BtnSendGift"
|
||||
}
|
||||
}
|
||||
DormInteractiveGiftCtrl._mapEventConfig = {}
|
||||
DormInteractiveGiftCtrl._mapRedDotConfig = {}
|
||||
function DormInteractiveGiftCtrl:Awake()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:FadeIn()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:FadeOut()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnEnable()
|
||||
self.tbGridCtrl = {}
|
||||
self.tbChooseItem = {}
|
||||
self.addedLevel = 0
|
||||
self.parent = nil
|
||||
self.curFavourExp = 0
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnDisable()
|
||||
if self.tbGridCtrl then
|
||||
for k, v in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnDestroy()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnRelease()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OpenGiftChoose(nCharId, parent)
|
||||
self.nCharId = nCharId
|
||||
self.parent = parent
|
||||
local mapCharAffinity = ConfigTable.GetData("CharAffinityTemplate", self.nCharId)
|
||||
if mapCharAffinity == nil then
|
||||
return
|
||||
end
|
||||
local templateId = mapCharAffinity.TemplateId
|
||||
self.MaxAffinityLevel = PlayerData.Char:GetMaxAffinityLevel(templateId)
|
||||
local affinityData = PlayerData.Char:GetCharAffinityData(nCharId)
|
||||
self.curFavourLevel = affinityData.Level
|
||||
self.curFavourExp = affinityData.Exp
|
||||
self.nMaxSendGiftCount = PlayerData.PlayerDormData:GetCharGiftCountDay(nCharId)
|
||||
local mapCharDesc = ConfigTable.GetData("CharacterDes", self.nCharId)
|
||||
if mapCharDesc ~= nil then
|
||||
self.PreferenceData = {
|
||||
PreferTags = mapCharDesc.PreferTags,
|
||||
HateTags = mapCharDesc.HateTags
|
||||
}
|
||||
end
|
||||
self:RefreshItemList()
|
||||
self:SetDaySendCount()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:RefreshItemList()
|
||||
self.tbItemData = {}
|
||||
self.tbChooseItem = {}
|
||||
local listCount = 0
|
||||
local tbAllItem = {}
|
||||
local foreachAffinityGift = function(mapData)
|
||||
local count = PlayerData.Item:GetItemCountByID(mapData.Id)
|
||||
local itemData = ConfigTable.GetData_Item(mapData.Id)
|
||||
if itemData ~= nil then
|
||||
local favourLevel = self:GetGiftFavourLevel(mapData.Tags)
|
||||
if 0 < count then
|
||||
table.insert(tbAllItem, {
|
||||
nTid = itemData.Id,
|
||||
nRarity = itemData.Rarity,
|
||||
nCount = count,
|
||||
nExpire = itemData.ExpireType,
|
||||
favourLevel = favourLevel
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.AffinityGift, foreachAffinityGift)
|
||||
self._mapNode.goEmpty:SetActive(#tbAllItem == 0)
|
||||
self._mapNode.loopsvGiftList.gameObject:SetActive(0 < #tbAllItem)
|
||||
self.tbItemData = {}
|
||||
if 0 < #tbAllItem then
|
||||
table.sort(tbAllItem, function(a, b)
|
||||
if a.favourLevel == b.favourLevel then
|
||||
if a.nRarity == b.nRarity then
|
||||
return a.nTid < b.nTid
|
||||
end
|
||||
return a.nRarity < b.nRarity
|
||||
end
|
||||
return a.favourLevel < b.favourLevel
|
||||
end)
|
||||
for _, v in ipairs(tbAllItem) do
|
||||
for i = 1, v.nCount do
|
||||
listCount = listCount + 1
|
||||
table.insert(self.tbItemData, {
|
||||
nTid = v.nTid,
|
||||
nRarity = v.nRarity,
|
||||
nCount = 1,
|
||||
nExpire = v.nExpire,
|
||||
favourLevel = v.favourLevel
|
||||
})
|
||||
end
|
||||
end
|
||||
self._mapNode.loopsvGiftList:Init(listCount, self, self.RefreshItemGrid, self.OnBtnClickItemGrid)
|
||||
end
|
||||
self._mapNode.btnPresentGray.gameObject:SetActive(#self.tbItemData == 0)
|
||||
self._mapNode.btnPresent.gameObject:SetActive(#self.tbItemData > 0)
|
||||
end
|
||||
function DormInteractiveGiftCtrl:RefreshItemGrid(grid)
|
||||
local nIndex = tonumber(grid.name) + 1
|
||||
local mapItem = self.tbItemData[nIndex]
|
||||
local nInstanceID = grid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
local itemObj = grid.transform:Find("btnGrid/AnimRoot/tc_item_02")
|
||||
self.tbGridCtrl[nInstanceID] = self:BindCtrlByNode(itemObj, "Game.UI.TemplateEx.TemplateItemCtrl")
|
||||
end
|
||||
self.tbGridCtrl[nInstanceID]:SetItem(mapItem.nTid, mapItem.nRarity, nil, mapItem.nExpire)
|
||||
local imgAffinityLevel = grid.transform:Find("btnGrid/AnimRoot/tc_item_02/imgAffinityGiftLevel"):GetComponent("Image")
|
||||
local level = mapItem.favourLevel
|
||||
self:SetAtlasSprite(imgAffinityLevel, "11_ico", "zs_present_heart_" .. level)
|
||||
if self.tbChooseItem ~= nil and self.tbChooseItem.nIdx == nIndex then
|
||||
self.tbGridCtrl[nInstanceID]:SetMultiSelected_Blue(true)
|
||||
end
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnBtnClickItemGrid(grid)
|
||||
local nInstanceID = grid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceID] then
|
||||
return
|
||||
end
|
||||
local nIndex = tonumber(grid.name) + 1
|
||||
local mapItem = self.tbItemData[nIndex]
|
||||
local itemCtrl = self.tbGridCtrl[nInstanceID]
|
||||
if self.tbChooseItem ~= nil and self.tbChooseItem[nIndex] ~= nil then
|
||||
itemCtrl:SetMultiSelected_Blue(false)
|
||||
self.tbChooseItem[nIndex] = nil
|
||||
else
|
||||
local nCount = 0
|
||||
if self.tbChooseItem ~= nil then
|
||||
for nIndex, v in pairs(self.tbChooseItem) do
|
||||
if v ~= nil then
|
||||
nCount = nCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
if nCount >= self.nMaxSendGiftCount then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gift_Send_Day_Count_Max"))
|
||||
return
|
||||
end
|
||||
self.tbChooseItem[nIndex] = {
|
||||
nTid = mapItem.nTid,
|
||||
itemCtrl = itemCtrl
|
||||
}
|
||||
itemCtrl:SetMultiSelected_Blue(true)
|
||||
end
|
||||
self:OnItemChosen()
|
||||
self:SetDaySendCount()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:GetGiftFavourLevelById(itemId)
|
||||
if self.PreferenceData == nil then
|
||||
return 2
|
||||
end
|
||||
local itemData = ConfigTable.GetData("AffinityGift", itemId)
|
||||
for k, v in ipairs(itemData.Tags) do
|
||||
for k1, v1 in ipairs(self.PreferenceData.PreferTags) do
|
||||
if v == v1 then
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
for k, v in ipairs(itemData.Tags) do
|
||||
for k1, v1 in ipairs(self.PreferenceData.HateTags) do
|
||||
if v == v1 then
|
||||
return 3
|
||||
end
|
||||
end
|
||||
end
|
||||
return 2
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnItemChosen()
|
||||
local mapCharAffinity = ConfigTable.GetData("CharAffinityTemplate", self.nCharId)
|
||||
if mapCharAffinity == nil then
|
||||
return
|
||||
end
|
||||
if self.curFavourLevel >= self.MaxAffinityLevel then
|
||||
return
|
||||
end
|
||||
local nSelectCount = 0
|
||||
local addedExp = 0
|
||||
for nIndex, v in pairs(self.tbChooseItem) do
|
||||
local data = ConfigTable.GetData("AffinityGift", v.nTid)
|
||||
local level = self:GetGiftFavourLevelById(v.nTid)
|
||||
local AffinityGiftPreferenceProp = ConfigTable.GetConfigNumberArray("AffinityGiftPreferenceProp")
|
||||
local nExp = data.BaseAffinity * (AffinityGiftPreferenceProp[level] / 100 + 1)
|
||||
addedExp = addedExp + nExp
|
||||
end
|
||||
local mapCharAffinity = ConfigTable.GetData("CharAffinityTemplate", self.nCharId)
|
||||
if mapCharAffinity == nil then
|
||||
return
|
||||
end
|
||||
local templateId = mapCharAffinity.TemplateId
|
||||
local addedLevel = self.curFavourLevel
|
||||
local preFinalExp = addedExp + self.curFavourExp
|
||||
if 0 < addedExp then
|
||||
while 0 < preFinalExp and not (addedLevel >= self.MaxAffinityLevel) do
|
||||
local needExp = CacheTable.GetData("_AffinityLevel", templateId)[addedLevel + 1].NeedExp
|
||||
preFinalExp = preFinalExp - needExp
|
||||
if 0 <= preFinalExp then
|
||||
addedLevel = addedLevel + 1
|
||||
if addedLevel >= self.MaxAffinityLevel then
|
||||
preFinalExp = CacheTable.GetData("_AffinityLevel", templateId)[self.MaxAffinityLevel].NeedExp
|
||||
break
|
||||
end
|
||||
else
|
||||
preFinalExp = preFinalExp + needExp
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
self.addedLevel = addedLevel
|
||||
end
|
||||
function DormInteractiveGiftCtrl:GetGiftFavourLevel(tags)
|
||||
if self.PreferenceData == nil then
|
||||
return 2
|
||||
end
|
||||
for k, v in ipairs(tags) do
|
||||
for k1, v1 in ipairs(self.PreferenceData.PreferTags) do
|
||||
if v == v1 then
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
for k, v in ipairs(tags) do
|
||||
for k1, v1 in ipairs(self.PreferenceData.HateTags) do
|
||||
if v == v1 then
|
||||
return 3
|
||||
end
|
||||
end
|
||||
end
|
||||
return 2
|
||||
end
|
||||
function DormInteractiveGiftCtrl:SetDaySendCount()
|
||||
local nCount = 0
|
||||
if self.tbChooseItem ~= nil then
|
||||
for nIndex, v in pairs(self.tbChooseItem) do
|
||||
if v ~= nil then
|
||||
nCount = nCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtGiftCount, orderedFormat(ConfigTable.GetUIText("Phone_Gift_Send_Day_Count_1"), nCount, self.nMaxSendGiftCount))
|
||||
end
|
||||
function DormInteractiveGiftCtrl:Exit()
|
||||
if self.tbGridCtrl then
|
||||
for k, v in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(v)
|
||||
end
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
self.animator:Play("DormGift_out")
|
||||
self:AddTimer(1, 0.3, function()
|
||||
self.gameObject:SetActive(false)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnBtn_ClickSendGift()
|
||||
if #self.tbItemData == 0 then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gift_Send_Item_Empty"))
|
||||
return
|
||||
end
|
||||
if self.tbChooseItem == nil or next(self.tbChooseItem) == nil then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Gift_Send_Not_Select"))
|
||||
return
|
||||
end
|
||||
local sendCount = PlayerData.PlayerDormData:GetCharGiftCountDay(self.nCharId)
|
||||
if sendCount < 1 then
|
||||
local tips = ConfigTable.GetUIText("Gift_Send_Day_Count_Max")
|
||||
EventManager.Hit(EventId.OpenMessageBox, tips)
|
||||
return
|
||||
end
|
||||
local sendGift = function()
|
||||
local tempCount = {}
|
||||
for nIndex, v in pairs(self.tbChooseItem) do
|
||||
if tempCount[v.nTid] == nil then
|
||||
tempCount[v.nTid] = 0
|
||||
end
|
||||
tempCount[v.nTid] = tempCount[v.nTid] + 1
|
||||
end
|
||||
local tbGift = {}
|
||||
for nTid, nCount in pairs(tempCount) do
|
||||
table.insert(tbGift, {Tid = nTid, Qty = nCount})
|
||||
end
|
||||
local nRoomId = self._panel.nCurRoom
|
||||
if self.parent ~= nil then
|
||||
self.parent:SendGiftResult(nRoomId, self.nCharId, tbGift)
|
||||
end
|
||||
end
|
||||
if self.curFavourLevel >= self.MaxAffinityLevel then
|
||||
local TipsTime = LocalData.GetPlayerLocalData("PhoneGiftMax_Tips_Time")
|
||||
local _tipDay = 0
|
||||
if TipsTime ~= nil then
|
||||
_tipDay = tonumber(TipsTime)
|
||||
end
|
||||
local curTimeStamp = CS.ClientManager.Instance.serverTimeStampWithTimeZone
|
||||
local fixedTimeStamp = curTimeStamp + newDayTime * 3600
|
||||
local nYear = tonumber(os.date("!%Y", fixedTimeStamp))
|
||||
local nMonth = tonumber(os.date("!%m", fixedTimeStamp))
|
||||
local nDay = tonumber(os.date("!%d", fixedTimeStamp))
|
||||
local nowD = nYear * 366 + nMonth * 31 + nDay
|
||||
if nowD == _tipDay then
|
||||
sendGift()
|
||||
else
|
||||
local sTip = ConfigTable.GetUIText("PhoneGift_Send_Max_Tip")
|
||||
local isSelectAgain = false
|
||||
local confirmCallback = function()
|
||||
if isSelectAgain then
|
||||
local _curTimeStamp = CS.ClientManager.Instance.serverTimeStampWithTimeZone
|
||||
local _fixedTimeStamp = _curTimeStamp + newDayTime * 3600
|
||||
local _nYear = tonumber(os.date("!%Y", _fixedTimeStamp))
|
||||
local _nMonth = tonumber(os.date("!%m", _fixedTimeStamp))
|
||||
local _nDay = tonumber(os.date("!%d", _fixedTimeStamp))
|
||||
local _nowD = _nYear * 366 + _nMonth * 31 + _nDay
|
||||
LocalData.SetPlayerLocalData("PhoneGiftMax_Tips_Time", tostring(_nowD))
|
||||
end
|
||||
sendGift()
|
||||
end
|
||||
local againCallback = function(isSelect)
|
||||
isSelectAgain = isSelect
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Char,
|
||||
sContent = sTip,
|
||||
nCharId = self.nCharId,
|
||||
callbackConfirm = confirmCallback,
|
||||
callbackAgain = againCallback
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
return
|
||||
end
|
||||
sendGift()
|
||||
end
|
||||
function DormInteractiveGiftCtrl:OnBtnClick_Details()
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Desc,
|
||||
sContent = ConfigTable.GetUIText("Dorm_GiftDesc")
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
return DormInteractiveGiftCtrl
|
||||
@@ -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
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,171 @@
|
||||
local DormEditorPresetDetailCtrl = class("DormEditorPresetDetailCtrl", BaseCtrl)
|
||||
local DefaultPath = "Icon/DormFurnitureSet/DormFurnitureSet_1001"
|
||||
DormEditorPresetDetailCtrl._mapNodeConfig = {
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Preset_DetailTitle"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
btnScreenClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
txtTitlePreview = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Detail_CoverTitle"
|
||||
},
|
||||
imgTitleImg = {sComponentName = "Image"},
|
||||
TMPRoomHint = {sComponentName = "TMP_Text"},
|
||||
txtTitleFurnitureList = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Detail_FurnitureTitle"
|
||||
},
|
||||
lsvList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnUnable = {sComponentName = "UIButton"},
|
||||
txtBtnUnable = {sComponentName = "TMP_Text"},
|
||||
btnApplyNow = {sComponentName = "UIButton"},
|
||||
txtBtnApplNow = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Preset_BtnApplNow"
|
||||
},
|
||||
btnApply = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnApply = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Preset_BtnUse"
|
||||
},
|
||||
txtPresetName = {sComponentName = "TMP_Text"},
|
||||
btnPresetName = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Rename"
|
||||
},
|
||||
Animator = {
|
||||
sNodeName = "---PresetDetail---",
|
||||
sComponentName = "Animator"
|
||||
}
|
||||
}
|
||||
DormEditorPresetDetailCtrl._mapEventConfig = {
|
||||
DormUpdatePresetNameSuc = "OnEvent_DormUpdatePresetNameSuc"
|
||||
}
|
||||
DormEditorPresetDetailCtrl._mapRedDotConfig = {}
|
||||
function DormEditorPresetDetailCtrl:Awake()
|
||||
self.mapFurnitureCtrl = {}
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:FadeIn()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:FadeOut()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
self.mapPreset = tbParam[1]
|
||||
self.bEnable = tbParam[2]
|
||||
self.bCur = false
|
||||
self.nRoom = tbParam[4]
|
||||
self.mapCurEnlabeCount = tbParam[5]
|
||||
self.callback = tbParam[6]
|
||||
local coverSprite = tbParam[7]
|
||||
self.bAllHave = true
|
||||
if coverSprite ~= nil then
|
||||
NovaAPI.SetImageSpriteAsset(self._mapNode.imgTitleImg, coverSprite)
|
||||
else
|
||||
self:SetPngSprite(self._mapNode.img_icon, DefaultPath)
|
||||
end
|
||||
local mapPreset = {}
|
||||
for _, mapFurnitur in ipairs(self.mapPreset.FurnitureList) do
|
||||
if mapPreset[mapFurnitur.FurnitureId] == nil then
|
||||
mapPreset[mapFurnitur.FurnitureId] = 0
|
||||
end
|
||||
mapPreset[mapFurnitur.FurnitureId] = mapPreset[mapFurnitur.FurnitureId] + 1
|
||||
end
|
||||
self.tbFurniture = {}
|
||||
for nFurnitureId, nCount in pairs(mapPreset) do
|
||||
local mapFurnitrueCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapFurnitrueCfg ~= nil and 1 > mapFurnitrueCfg.NotShow then
|
||||
table.insert(self.tbFurniture, {FurnitureId = nFurnitureId, nCount = nCount})
|
||||
if self.mapCurEnlabeCount[nFurnitureId] == nil or self.mapCurEnlabeCount[nFurnitureId] == 0 then
|
||||
self.bAllHave = false
|
||||
end
|
||||
end
|
||||
end
|
||||
self:Refresh()
|
||||
self._mapNode.Animator:Play("t_window_04_t_in")
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnDisable()
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnDestroy()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnRelease()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:Refresh()
|
||||
local sort = function(a, b)
|
||||
return a.FurnitureId < b.FurnitureId
|
||||
end
|
||||
table.sort(self.tbFurniture, sort)
|
||||
local sName = self.mapPreset.BuildName == "" and orderedFormat(ConfigTable.GetUIText("Dorm_PresetDefaultName"), self.mapPreset.BuildId) or self.mapPreset.BuildName
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPresetName, sName)
|
||||
local sHint = orderedFormat(ConfigTable.GetUIText("Dorm_Preset_RoomHIntTitle"), ConfigTable.GetUIText("Dorm_RoomType" .. self.mapPreset.DormType))
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomHint, sHint)
|
||||
self._mapNode.lsvList:Init(#self.tbFurniture, self, self.OnGridRefresh, self.OnGriBtnClick)
|
||||
local nReason = self.mapPreset.DormType == 0 and 2 or 1
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnUnable, ConfigTable.GetUIText("Dorm_SuitHint_RoomType" .. nReason))
|
||||
self._mapNode.btnApplyNow.gameObject:SetActive(self.bCur)
|
||||
self._mapNode.btnUnable.gameObject:SetActive(not self.bEnable)
|
||||
self._mapNode.btnApply.gameObject:SetActive(not self.bCur and self.bEnable)
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:ClosePanel()
|
||||
self._mapNode.Animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormEditorPresetDetailPanel)
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnGridRefresh(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nFurnitureId = self.tbFurniture[nIdx].FurnitureId
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if self.mapFurnitureCtrl[nInstanceId] == nil then
|
||||
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormEditor.TemplateDormFurnitureItem")
|
||||
self.mapFurnitureCtrl[nInstanceId] = mapCtrl
|
||||
end
|
||||
self.mapFurnitureCtrl[nInstanceId]:RefreshInSuitPreset(nFurnitureId, self.mapCurEnlabeCount[nFurnitureId] or 0, self.tbFurniture[nIdx].nCount, self.nRoom)
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnGriBtnClick(goGrid, nIdx)
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
self.mapFurnitureCtrl[nInstanceId]:OnBtnClick_Info()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnBtnClick_Rename()
|
||||
local sName = self.mapPreset.BuildName == "" and orderedFormat(ConfigTable.GetUIText("Dorm_PresetDefaultName"), self.mapPreset.BuildId) or self.mapPreset.BuildName
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormPresetRenamePanel, self.mapPreset.BuildId, sName)
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnBtn_ClickClose()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback(false)
|
||||
end
|
||||
self:ClosePanel()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnBtnClick_Confirm()
|
||||
local confirmCallback = function()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback(true)
|
||||
end
|
||||
self:ClosePanel()
|
||||
end
|
||||
confirmCallback()
|
||||
end
|
||||
function DormEditorPresetDetailCtrl:OnEvent_DormUpdatePresetNameSuc(nBuildId, sName)
|
||||
if nBuildId == self.mapPreset.BuildId then
|
||||
self.mapPreset.BuildName = sName
|
||||
NovaAPI.SetTMPText(self._mapNode.txtPresetName, sName)
|
||||
end
|
||||
end
|
||||
return DormEditorPresetDetailCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormEditorPresetDetailPanel = class("DormEditorPresetDetailPanel", BasePanel)
|
||||
DormEditorPresetDetailPanel._bIsMainPanel = false
|
||||
DormEditorPresetDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormPresetDetailPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormEditor.DormEditorPresetDetailCtrl"
|
||||
}
|
||||
}
|
||||
function DormEditorPresetDetailPanel:Awake()
|
||||
end
|
||||
function DormEditorPresetDetailPanel:OnEnable()
|
||||
end
|
||||
function DormEditorPresetDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function DormEditorPresetDetailPanel:OnDisable()
|
||||
end
|
||||
function DormEditorPresetDetailPanel:OnDestroy()
|
||||
end
|
||||
function DormEditorPresetDetailPanel:OnRelease()
|
||||
end
|
||||
return DormEditorPresetDetailPanel
|
||||
@@ -0,0 +1,235 @@
|
||||
local DormEditorSuitDetailCtrl = class("DormEditorSuitDetailCtrl", BaseCtrl)
|
||||
local DefaultPath = "Icon/DormFurnitureSet/DormFurnitureSet_1001"
|
||||
DormEditorSuitDetailCtrl._mapNodeConfig = {
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Suit_DetailTitle"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
btnScreenClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
txtTitlePreview = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Detail_CoverTitle"
|
||||
},
|
||||
imgTitleImg = {sComponentName = "Image"},
|
||||
imgTag = {},
|
||||
imgMaskTag = {},
|
||||
TMPTagName = {sComponentName = "TMP_Text"},
|
||||
txtTitleFurnitureList = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Detail_FurnitureTitle"
|
||||
},
|
||||
txtTitleFurnitureNum = {sComponentName = "TMP_Text"},
|
||||
lsvList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnUnApply = {sComponentName = "UIButton"},
|
||||
txtBtnUnApply = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Preset_BtnApplNow"
|
||||
},
|
||||
btnReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
btnApply = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnApply = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Preset_BtnUse"
|
||||
},
|
||||
btnGet = {sComponentName = "UIButton"},
|
||||
txtBtnGet = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_SuitDetail_BtnGet"
|
||||
},
|
||||
btnGet2 = {sComponentName = "UIButton"},
|
||||
txtBtnGet2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_SuitDetail_BtnGet"
|
||||
},
|
||||
TMPSuitName = {sComponentName = "TMP_Text"},
|
||||
detailDesc = {sComponentName = "TMP_Text"},
|
||||
txtTips = {sComponentName = "TMP_Text"},
|
||||
Animator = {
|
||||
sNodeName = "---PresetDetail---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
rtBtns = {}
|
||||
}
|
||||
DormEditorSuitDetailCtrl._mapEventConfig = {}
|
||||
DormEditorSuitDetailCtrl._mapRedDotConfig = {}
|
||||
function DormEditorSuitDetailCtrl:Awake()
|
||||
self.mapFurnitureCtrl = {}
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:FadeIn()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:FadeOut()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
self.nSuitId = tbParam[1]
|
||||
self.tbSuitFurniture = tbParam[2]
|
||||
self.mapCurCount = tbParam[3]
|
||||
self.nRoom = tbParam[4]
|
||||
self.mapTotalCount = tbParam[5]
|
||||
self.bCur = false
|
||||
self.callback = tbParam[7]
|
||||
self.nTotalCount = 0
|
||||
self.nCurCount = 0
|
||||
self.bNotHave = true
|
||||
self.mapSuitCfgData = ConfigTable.GetData("DormLayoutReward", self.nSuitId)
|
||||
local mapPreset = {}
|
||||
for _, mapFurnitur in ipairs(self.tbSuitFurniture) do
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", mapFurnitur.FurnitureId)
|
||||
if mapFurnitureCfg ~= nil and 1 > mapFurnitureCfg.NotShow then
|
||||
if mapPreset[mapFurnitur.FurnitureId] == nil then
|
||||
mapPreset[mapFurnitur.FurnitureId] = 0
|
||||
end
|
||||
self.nTotalCount = self.nTotalCount + 1
|
||||
mapPreset[mapFurnitur.FurnitureId] = mapPreset[mapFurnitur.FurnitureId] + 1
|
||||
end
|
||||
end
|
||||
for nFurnitureId, nCount in pairs(self.mapCurCount) do
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapFurnitureCfg ~= nil and 1 > mapFurnitureCfg.NotShow then
|
||||
local nNeedCount = mapPreset[nFurnitureId] == nil and 0 or mapPreset[nFurnitureId]
|
||||
if PlayerData.PlayerDormData:CheckGetFurnitureById(nFurnitureId) then
|
||||
self.bNotHave = false
|
||||
end
|
||||
self.nCurCount = self.nCurCount + math.min(nNeedCount, nCount)
|
||||
end
|
||||
end
|
||||
self.tbFurniture = {}
|
||||
for nFurnitureId, nCount in pairs(mapPreset) do
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapFurnitureCfg ~= nil and mapFurnitureCfg.NotShow == 0 then
|
||||
table.insert(self.tbFurniture, {FurnitureId = nFurnitureId, nCount = nCount})
|
||||
end
|
||||
end
|
||||
self:Refresh()
|
||||
self._mapNode.Animator:Play("t_window_04_t_in")
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnDisable()
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnDestroy()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnRelease()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:Refresh()
|
||||
local sort = function(a, b)
|
||||
return a.FurnitureId < b.FurnitureId
|
||||
end
|
||||
table.sort(self.tbFurniture, sort)
|
||||
if self.mapSuitCfgData ~= nil then
|
||||
self:SetPngSprite(self._mapNode.imgTitleImg, self.mapSuitCfgData.RoomLayoutListIcon .. "_big")
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPSuitName, self.mapSuitCfgData.RoomLayoutName)
|
||||
NovaAPI.SetTMPText(self._mapNode.detailDesc, self.mapSuitCfgData.RoomLayoutDesc)
|
||||
self._mapNode.imgTag:SetActive(self.mapSuitCfgData.RoomLayoutTag ~= "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTagName, self.mapSuitCfgData.RoomLayoutTag)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTips, self.mapSuitCfgData.GetWay)
|
||||
end
|
||||
local bReward = true
|
||||
for _, mapFurniture in ipairs(self.tbFurniture) do
|
||||
if self.mapTotalCount[mapFurniture.FurnitureId] == nil or self.mapTotalCount[mapFurniture.FurnitureId] < mapFurniture.nCount then
|
||||
bReward = false
|
||||
break
|
||||
end
|
||||
end
|
||||
bReward = bReward and not PlayerData.PlayerDormData:CheckLayoutReceived(self.nSuitId)
|
||||
self._mapNode.btnReward.gameObject:SetActive(bReward)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtTitleFurnitureNum, orderedFormat("{0}/{1}", math.min(self.nCurCount, self.nTotalCount), self.nTotalCount))
|
||||
self._mapNode.lsvList:Init(#self.tbFurniture, self, self.OnGridRefresh, self.OnGridBtnClick)
|
||||
local mapRoomConfig
|
||||
local bEnable = false
|
||||
if self.nRoom > 0 then
|
||||
mapRoomConfig = ConfigTable.GetData("DormRoom", self.nRoom)
|
||||
if mapRoomConfig ~= nil then
|
||||
bEnable = mapRoomConfig.RoomType == self.mapSuitCfgData.RoomType
|
||||
end
|
||||
end
|
||||
local bAllHave = self.nCurCount >= self.nTotalCount
|
||||
self._mapNode.btnGet.gameObject:SetActive(self.mapSuitCfgData.JumpTo ~= 0 and not bAllHave)
|
||||
self._mapNode.btnGet2.gameObject:SetActive(self.mapSuitCfgData.JumpTo ~= 0 and self.bNotHave)
|
||||
self._mapNode.btnUnApply.gameObject:SetActive(not bEnable and not self.bNotHave)
|
||||
self._mapNode.btnApply.gameObject:SetActive(bEnable and not self.bNotHave)
|
||||
self._mapNode.txtTips.gameObject:SetActive(self.bNotHave and self.mapSuitCfgData.JumpTo == 0)
|
||||
self._mapNode.rtBtns:SetActive(self.nRoom > 0)
|
||||
if not bEnable then
|
||||
local sHint = orderedFormat(ConfigTable.GetUIText("Dorm_Preset_RoomHIntTitle"), ConfigTable.GetUIText("Dorm_RoomType" .. self.mapSuitCfgData.RoomType))
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnUnApply, sHint)
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtBtnUnApply, ConfigTable.GetUIText("Dorm_BtnState_Cur"))
|
||||
end
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnGridRefresh(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nFurnitureId = self.tbFurniture[nIdx].FurnitureId
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if self.mapFurnitureCtrl[nInstanceId] == nil then
|
||||
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormEditor.TemplateDormFurnitureItem")
|
||||
self.mapFurnitureCtrl[nInstanceId] = mapCtrl
|
||||
end
|
||||
local nCurCount = self.mapCurCount[nFurnitureId] or 0
|
||||
self.mapFurnitureCtrl[nInstanceId]:RefreshInSuitPreset(nFurnitureId, nCurCount, self.tbFurniture[nIdx].nCount, self.nRoom)
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnGridBtnClick(goGrid, nIdx)
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
self.mapFurnitureCtrl[nInstanceId]:OnBtnClick_Info()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:ClosePanel()
|
||||
self._mapNode.Animator:Play("t_window_04_t_out")
|
||||
self:AddTimer(1, 0.2, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormEditorSuitDetailPanel)
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnBtn_ClickClose()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback(false)
|
||||
end
|
||||
self:ClosePanel()
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnBtnClick_Confirm()
|
||||
local confirmCallback = function()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback(true)
|
||||
end
|
||||
self:ClosePanel()
|
||||
end
|
||||
local sContent
|
||||
if self.nCurCount >= self.nTotalCount then
|
||||
sContent = ConfigTable.GetUIText("Dorm_Set_UseHint")
|
||||
else
|
||||
sContent = ConfigTable.GetUIText("Dorm_Set_UseLackHint")
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = sContent,
|
||||
callbackConfirmAfterClose = confirmCallback,
|
||||
bDisableSnap = false,
|
||||
bCloseNoHandler = true
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function DormEditorSuitDetailCtrl:OnBtnClick_Reward()
|
||||
local callback = function(changeInfo, _)
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
UTILS.OpenReceiveByChangeInfo(changeInfo)
|
||||
end
|
||||
PlayerData.PlayerDormData:DormLayoutRewardReceive({
|
||||
self.nSuitId
|
||||
}, callback)
|
||||
end
|
||||
return DormEditorSuitDetailCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormEditorSuitDetailPanel = class("DormEditorSuitDetailPanel", BasePanel)
|
||||
DormEditorSuitDetailPanel._bIsMainPanel = false
|
||||
DormEditorSuitDetailPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormLayoutInfo.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormEditor.DormEditorSuitDetailCtrl"
|
||||
}
|
||||
}
|
||||
function DormEditorSuitDetailPanel:Awake()
|
||||
end
|
||||
function DormEditorSuitDetailPanel:OnEnable()
|
||||
end
|
||||
function DormEditorSuitDetailPanel:OnAfterEnter()
|
||||
end
|
||||
function DormEditorSuitDetailPanel:OnDisable()
|
||||
end
|
||||
function DormEditorSuitDetailPanel:OnDestroy()
|
||||
end
|
||||
function DormEditorSuitDetailPanel:OnRelease()
|
||||
end
|
||||
return DormEditorSuitDetailPanel
|
||||
@@ -0,0 +1,56 @@
|
||||
local DormFurnitureTogCtrl = class("DormFurnitureTogCtrl", BaseCtrl)
|
||||
DormFurnitureTogCtrl._mapNodeConfig = {
|
||||
AnimSwitch = {sComponentName = "Animator"},
|
||||
txt_Select = {sComponentName = "TMP_Text"},
|
||||
txt_unSelect = {sComponentName = "TMP_Text"},
|
||||
imgIcon_Slc = {sComponentName = "Image"},
|
||||
imgIcon_UnSlc = {sComponentName = "Image"},
|
||||
Select = {},
|
||||
unSelect = {}
|
||||
}
|
||||
DormFurnitureTogCtrl._mapEventConfig = {}
|
||||
function DormFurnitureTogCtrl:SetText(sText)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_Select, sText)
|
||||
NovaAPI.SetTMPText(self._mapNode.txt_unSelect, sText)
|
||||
end
|
||||
function DormFurnitureTogCtrl:SetIconSel(sPath)
|
||||
self:SetSprite(self._mapNode.imgIcon_Slc, sPath)
|
||||
end
|
||||
function DormFurnitureTogCtrl:SetIconUnSel(sPath)
|
||||
self:SetSprite(self._mapNode.imgIcon_UnSlc, sPath)
|
||||
end
|
||||
function DormFurnitureTogCtrl:SetDefault(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
end
|
||||
function DormFurnitureTogCtrl:SetDefaultDorm(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == true then
|
||||
self._mapNode.AnimSwitch.enabled = false
|
||||
end
|
||||
self._mapNode.Select:SetActive(bOn)
|
||||
self._mapNode.unSelect:SetActive(not bOn)
|
||||
self._mapNode.txt_Select.gameObject:SetActive(bOn)
|
||||
self._mapNode.txt_unSelect.gameObject:SetActive(not bOn)
|
||||
end
|
||||
function DormFurnitureTogCtrl:SetTrigger(bOn)
|
||||
if self._mapNode.AnimSwitch.enabled == false then
|
||||
self._mapNode.AnimSwitch.enabled = true
|
||||
end
|
||||
if bOn then
|
||||
self._mapNode.AnimSwitch:SetTrigger("tOn")
|
||||
else
|
||||
self._mapNode.AnimSwitch:SetTrigger("tOff")
|
||||
end
|
||||
end
|
||||
function DormFurnitureTogCtrl:ResetTrigger()
|
||||
if self._mapNode.AnimSwitch.enabled == false then
|
||||
self._mapNode.AnimSwitch.enabled = true
|
||||
end
|
||||
self._mapNode.AnimSwitch:ResetTrigger("tOff")
|
||||
end
|
||||
return DormFurnitureTogCtrl
|
||||
@@ -0,0 +1,260 @@
|
||||
local DormPresetGridCtrl = class("DormPresetGridCtrl", BaseCtrl)
|
||||
local DefaultPath = "Icon/DormFurnitureSet/DormFurnitureSet_1001"
|
||||
DormPresetGridCtrl._mapNodeConfig = {
|
||||
imgSelect = {},
|
||||
imgIconMask = {},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
Use_Num = {},
|
||||
TMPNumUse = {sComponentName = "TMP_Text"},
|
||||
rtPreset = {},
|
||||
imgTag = {},
|
||||
TMPTagName = {sComponentName = "TMP_Text"},
|
||||
imgTagMask = {},
|
||||
imgMask = {},
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
btnEdit = {sComponentName = "UIButton"},
|
||||
TMPName = {sComponentName = "TMP_Text"},
|
||||
rtDetail = {},
|
||||
Use_Mask = {},
|
||||
TMPHintUse = {sComponentName = "TMP_Text"},
|
||||
TMPPresetHint = {sComponentName = "TMP_Text"},
|
||||
imgSaveMask = {},
|
||||
btn_use = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Use"
|
||||
},
|
||||
btn_overwrite = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Save"
|
||||
},
|
||||
btn_save = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Save"
|
||||
},
|
||||
goOverWrite = {},
|
||||
btnReward = {sComponentName = "UIButton"},
|
||||
txtBtnSave = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_PresetBtn_Save"
|
||||
},
|
||||
txtBtnUse = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_PresetBtn_Use"
|
||||
},
|
||||
txtBtnOverwrite = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_PresetBtn_OverWrite"
|
||||
}
|
||||
}
|
||||
DormPresetGridCtrl._mapEventConfig = {
|
||||
DormUpdatePresetNameSuc = "OnEvent_DormUpdatePresetNameSuc"
|
||||
}
|
||||
DormPresetGridCtrl._mapRedDotConfig = {}
|
||||
function DormPresetGridCtrl:Awake()
|
||||
self.nIdx = 0
|
||||
self.nType = 0
|
||||
self.bEmpty = true
|
||||
end
|
||||
function DormPresetGridCtrl:FadeIn()
|
||||
end
|
||||
function DormPresetGridCtrl:FadeOut()
|
||||
end
|
||||
function DormPresetGridCtrl:OnEnable()
|
||||
end
|
||||
function DormPresetGridCtrl:OnDisable()
|
||||
end
|
||||
function DormPresetGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormPresetGridCtrl:OnRelease()
|
||||
end
|
||||
function DormPresetGridCtrl:SetSuit(nSuitId, bEnable, bSelect)
|
||||
self.nType = 0
|
||||
self.nId = nSuitId
|
||||
self.bSelect = bSelect
|
||||
self._mapNode.btnEdit.gameObject:SetActive(false)
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
self._mapNode.btnDetail.gameObject:SetActive(true)
|
||||
self._mapNode.imgIconMask:SetActive(true)
|
||||
local mapSuitCfgData = ConfigTable.GetData("DormLayoutReward", nSuitId)
|
||||
if mapSuitCfgData == nil then
|
||||
return
|
||||
end
|
||||
local nCurCount = 0
|
||||
local nTotalCount = 0
|
||||
local mapTempCount = {}
|
||||
local tbFurnitureList = self._panel.mapDormSuitData[nSuitId]
|
||||
if tbFurnitureList ~= nil then
|
||||
for _, mapFurniture in ipairs(tbFurnitureList) do
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", mapFurniture.FurnitureId)
|
||||
if mapFurnitureCfg ~= nil and mapFurnitureCfg.NotShow < 1 then
|
||||
if mapTempCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTempCount[mapFurniture.FurnitureId] = 0
|
||||
end
|
||||
mapTempCount[mapFurniture.FurnitureId] = mapTempCount[mapFurniture.FurnitureId] + 1
|
||||
local nCurBagCount = self._panel:GetFurnitureCountIncludeCurRoom(self._panel.nCurRoom, mapFurniture.FurnitureId)
|
||||
if nCurBagCount >= mapTempCount[mapFurniture.FurnitureId] then
|
||||
nCurCount = nCurCount + 1
|
||||
end
|
||||
nTotalCount = nTotalCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.Use_Num:SetActive(true)
|
||||
local str = nCurCount >= nTotalCount and string.format("%d/%d", nCurCount, nTotalCount) or string.format("<color=#ef3d5c>%d</color>/%d", nCurCount, nTotalCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPNumUse, str)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, mapSuitCfgData.RoomLayoutName)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapSuitCfgData.RoomLayoutListIcon)
|
||||
self._mapNode.rtPreset:SetActive(false)
|
||||
self._mapNode.imgTag:SetActive(mapSuitCfgData.RoomLayoutTag ~= "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTagName, mapSuitCfgData.RoomLayoutTag)
|
||||
self:SetMask(not bEnable)
|
||||
if not bEnable then
|
||||
local nReason = mapSuitCfgData.RoomType == 0 and 2 or 1
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPPresetHint, ConfigTable.GetUIText("Dorm_SuitHint_RoomType" .. nReason))
|
||||
end
|
||||
self:SetSelect(bSelect)
|
||||
end
|
||||
function DormPresetGridCtrl:SetPreset(sName, bEnable, bEmpty, bUse, bSelect, nIdx, nCreateTime, nRoomId)
|
||||
self.nType = 1
|
||||
self.nIdx = nIdx
|
||||
self.bEmpty = bEmpty
|
||||
self.bEnable = bEnable
|
||||
self.bSelect = bSelect
|
||||
self.nCreateTime = nCreateTime
|
||||
self._mapNode.btnEdit.gameObject:SetActive(false)
|
||||
self._mapNode.Use_Num:SetActive(false)
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
self._mapNode.btnDetail.gameObject:SetActive(not self.bEmpty)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, sName)
|
||||
if not self.bEmpty then
|
||||
local spCover = self._panel:GetPresetCover(tostring(nCreateTime))
|
||||
if spCover ~= nil then
|
||||
self._mapNode.imgIconMask:SetActive(true)
|
||||
NovaAPI.SetImageSpriteAsset(self._mapNode.imgIcon, spCover)
|
||||
else
|
||||
self._mapNode.imgIconMask:SetActive(false)
|
||||
end
|
||||
else
|
||||
self._mapNode.imgIconMask:SetActive(false)
|
||||
end
|
||||
self._mapNode.imgTag:SetActive(false)
|
||||
self._mapNode.rtPreset:SetActive(true)
|
||||
self._mapNode.Use_Mask:SetActive(false)
|
||||
self._mapNode.btn_use.gameObject:SetActive(bEnable)
|
||||
if not bEnable then
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", nRoomId)
|
||||
if mapRoomConfig ~= nil then
|
||||
local nReason = mapRoomConfig.RoomType == 0 and 1 or 2
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPPresetHint, ConfigTable.GetUIText("Dorm_SuitHint_RoomType" .. nReason))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPPresetHint, "")
|
||||
end
|
||||
end
|
||||
self:SetMask(not bEnable and not bEmpty)
|
||||
self:SetSelectPreset(bSelect)
|
||||
end
|
||||
function DormPresetGridCtrl:SetSelectPreset(bSelect)
|
||||
self._mapNode.imgSelect:SetActive(bSelect)
|
||||
if self.bEmpty then
|
||||
self._mapNode.imgSaveMask:SetActive(true)
|
||||
self._mapNode.goOverWrite:SetActive(false)
|
||||
else
|
||||
self._mapNode.imgSaveMask:SetActive(false)
|
||||
self._mapNode.goOverWrite:SetActive(bSelect)
|
||||
self._mapNode.rtDetail:SetActive(not bSelect)
|
||||
end
|
||||
end
|
||||
function DormPresetGridCtrl:SetSelect(bSelect)
|
||||
self._mapNode.imgSelect:SetActive(bSelect)
|
||||
end
|
||||
function DormPresetGridCtrl:SetMask(bMask)
|
||||
self._mapNode.imgTagMask:SetActive(bMask)
|
||||
self._mapNode.imgMask:SetActive(bMask)
|
||||
end
|
||||
function DormPresetGridCtrl:OnBtnClick_Save()
|
||||
EventManager.Hit("DormPresetGrid_Save", self.nIdx)
|
||||
end
|
||||
function DormPresetGridCtrl:OnBtnClick_Use()
|
||||
local mapCurEnlabeCount = {}
|
||||
local bAllHave = true
|
||||
local mapPresetData = self._panel.mapPresetInfo[self.nIdx]
|
||||
local mapPresetCount = {}
|
||||
for _, mapFurnitur in ipairs(mapPresetData.FurnitureList) do
|
||||
if mapPresetCount[mapFurnitur.FurnitureId] == nil then
|
||||
mapPresetCount[mapFurnitur.FurnitureId] = 0
|
||||
end
|
||||
mapPresetCount[mapFurnitur.FurnitureId] = mapPresetCount[mapFurnitur.FurnitureId] + 1
|
||||
end
|
||||
for nFurnitureId, nNeedCount in pairs(mapPresetCount) do
|
||||
local nCurCount = self._panel:GetFurnitureCountIncludeCurRoom(self._panel.nCurRoom, nFurnitureId)
|
||||
if nNeedCount > nCurCount then
|
||||
bAllHave = false
|
||||
break
|
||||
end
|
||||
end
|
||||
local confirmCallback = function()
|
||||
EventManager.Hit("DormPresetGrid_Use", self.nIdx)
|
||||
end
|
||||
local sContent
|
||||
if bAllHave then
|
||||
sContent = ConfigTable.GetUIText("Dorm_PresetUseHint")
|
||||
else
|
||||
sContent = ConfigTable.GetUIText("Dorm_PresetUseLackHint")
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = sContent,
|
||||
callbackConfirmAfterClose = confirmCallback,
|
||||
bDisableSnap = false,
|
||||
bCloseNoHandler = true
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function DormPresetGridCtrl:OnBtnClick_Detail()
|
||||
if self.nType == 1 then
|
||||
local callback = function(bConfirm)
|
||||
if bConfirm then
|
||||
self:OnBtnClick_Use()
|
||||
end
|
||||
end
|
||||
local mapPresetData = self._panel.mapPresetInfo[self.nIdx]
|
||||
local spCover = self._panel:GetPresetCover(tostring(self.nCreateTime))
|
||||
local mapCurEnlabeCount = {}
|
||||
for _, mapFurnitur in ipairs(mapPresetData.FurnitureList) do
|
||||
if mapCurEnlabeCount[mapFurnitur.FurnitureId] == nil then
|
||||
mapCurEnlabeCount[mapFurnitur.FurnitureId] = self._panel:GetFurnitureCountIncludeCurRoom(self._panel.nCurRoom, mapFurnitur.FurnitureId)
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormEditorPresetDetailPanel, mapPresetData, self.bEnable, self.bSelect, self._panel.nCurRoom, mapCurEnlabeCount, callback, spCover)
|
||||
else
|
||||
local callback = function(bConfirm)
|
||||
if bConfirm then
|
||||
EventManager.Hit("DormSuitGrid_Use", self.nId)
|
||||
end
|
||||
end
|
||||
local nSuitId = self.nId
|
||||
local tbSuitFurniture = self._panel.mapDormSuitData[nSuitId]
|
||||
local mapCurCount = {}
|
||||
local mapTotalCount = {}
|
||||
for _, mapFurniture in ipairs(tbSuitFurniture) do
|
||||
if mapCurCount[mapFurniture.FurnitureId] == nil then
|
||||
mapCurCount[mapFurniture.FurnitureId] = self._panel:GetFurnitureCountIncludeCurRoom(self._panel.nCurRoom, mapFurniture.FurnitureId)
|
||||
end
|
||||
if mapTotalCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTotalCount[mapFurniture.FurnitureId] = self._panel:GetBagFurnitureCount(mapFurniture.FurnitureId)
|
||||
end
|
||||
end
|
||||
local nRoom = self._panel.nCurRoom
|
||||
local bCurSuit = self.bSelect
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormEditorSuitDetailPanel, nSuitId, tbSuitFurniture, mapCurCount, nRoom, mapTotalCount, bCurSuit, callback)
|
||||
end
|
||||
end
|
||||
function DormPresetGridCtrl:OnEvent_DormUpdatePresetNameSuc(nBuildId, sName)
|
||||
if self.nType == 1 and self.nIdx == nBuildId then
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, sName)
|
||||
end
|
||||
end
|
||||
return DormPresetGridCtrl
|
||||
@@ -0,0 +1,136 @@
|
||||
local TemplateDormFurnitureItem = class("TemplateDormFurnitureItem", BaseCtrl)
|
||||
TemplateDormFurnitureItem._mapNodeConfig = {
|
||||
imgRare = {sComponentName = "Image"},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
txtCount = {sComponentName = "TMP_Text"},
|
||||
TMPMaskHint = {sComponentName = "TMP_Text"},
|
||||
ItemText = {sComponentName = "TMP_Text"},
|
||||
imgMask = {},
|
||||
imgMarkMask = {},
|
||||
imgMark = {},
|
||||
btnInfo = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Info"
|
||||
},
|
||||
rtContent = {},
|
||||
txtX = {}
|
||||
}
|
||||
TemplateDormFurnitureItem._mapEventConfig = {}
|
||||
TemplateDormFurnitureItem._mapRedDotConfig = {}
|
||||
function TemplateDormFurnitureItem:Awake()
|
||||
end
|
||||
function TemplateDormFurnitureItem:FadeIn()
|
||||
end
|
||||
function TemplateDormFurnitureItem:FadeOut()
|
||||
end
|
||||
function TemplateDormFurnitureItem:OnEnable()
|
||||
end
|
||||
function TemplateDormFurnitureItem:OnDisable()
|
||||
end
|
||||
function TemplateDormFurnitureItem:OnDestroy()
|
||||
end
|
||||
function TemplateDormFurnitureItem:OnRelease()
|
||||
end
|
||||
function TemplateDormFurnitureItem:Refresh(nFurnitureId, nCount, nRoomId)
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
local mapFurnitureItemCfg = ConfigTable.GetData("Item", nFurnitureId)
|
||||
if mapFurnitureCfg == nil or mapFurnitureItemCfg == nil then
|
||||
return
|
||||
end
|
||||
self.nFurnitureId = nFurnitureId
|
||||
self.nItemCount = nCount
|
||||
local bEnable = true
|
||||
local nReason = 0
|
||||
if 0 < nRoomId then
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", nRoomId)
|
||||
if mapRoomConfig ~= nil then
|
||||
bEnable = 0 < table.indexof(mapFurnitureCfg.CanIn, mapRoomConfig.RoomType)
|
||||
if not bEnable then
|
||||
nReason = mapRoomConfig.RoomType == 0 and 1 or 2
|
||||
end
|
||||
end
|
||||
end
|
||||
self.bEnable = bEnable
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, nCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.ItemText, mapFurnitureItemCfg.Title)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapFurnitureItemCfg.Icon)
|
||||
local sFrame = AllEnum.FrameType_New.DormFurniture .. AllEnum.FrameColor_New[mapFurnitureItemCfg.Rarity]
|
||||
self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", sFrame)
|
||||
self._mapNode.imgMark:SetActive(0 < mapFurnitureCfg.ActorSD_Id)
|
||||
self:SetMask(not bEnable, nReason)
|
||||
end
|
||||
function TemplateDormFurnitureItem:RefreshHandbook(nFurnitureId, nCount)
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
local mapFurnitureItemCfg = ConfigTable.GetData("Item", nFurnitureId)
|
||||
if mapFurnitureCfg == nil or mapFurnitureItemCfg == nil then
|
||||
return
|
||||
end
|
||||
self.nFurnitureId = nFurnitureId
|
||||
self.nItemCount = nCount
|
||||
self.bEnable = 0 < nCount
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, "")
|
||||
self._mapNode.txtX:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.ItemText, mapFurnitureItemCfg.Title)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapFurnitureItemCfg.Icon)
|
||||
local sFrame = AllEnum.FrameType_New.DormFurniture .. AllEnum.FrameColor_New[mapFurnitureItemCfg.Rarity]
|
||||
self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", sFrame)
|
||||
self._mapNode.imgMark:SetActive(0 < mapFurnitureCfg.ActorSD_Id)
|
||||
self:SetMask(not self.bEnable, 4)
|
||||
end
|
||||
function TemplateDormFurnitureItem:RefreshInSuitPreset(nFurnitureId, nCurCount, nNeedCount, nRoomId)
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
local mapFurnitureItemCfg = ConfigTable.GetData("Item", nFurnitureId)
|
||||
self._mapNode.txtX:SetActive(false)
|
||||
if mapFurnitureCfg == nil or mapFurnitureItemCfg == nil then
|
||||
return
|
||||
end
|
||||
self.nFurnitureId = nFurnitureId
|
||||
self.nItemCount = nNeedCount
|
||||
local bEnable = true
|
||||
if nCurCount < nNeedCount then
|
||||
bEnable = false
|
||||
end
|
||||
local nReason = 0
|
||||
if 0 < nRoomId then
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", nRoomId)
|
||||
if mapRoomConfig ~= nil then
|
||||
local bRoomType = 0 < table.indexof(mapFurnitureCfg.CanIn, mapRoomConfig.RoomType)
|
||||
if not bRoomType then
|
||||
bEnable = false
|
||||
nReason = mapRoomConfig.RoomType == 0 and 1 or 2
|
||||
end
|
||||
end
|
||||
end
|
||||
self.bEnable = bEnable
|
||||
local sCount
|
||||
if nCurCount < nNeedCount then
|
||||
sCount = string.format("<color=#fa4e6c>%d</color>/%d", nCurCount, nNeedCount)
|
||||
else
|
||||
sCount = string.format("%d/%d", nCurCount, nNeedCount)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, sCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.ItemText, mapFurnitureItemCfg.Title)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapFurnitureItemCfg.Icon)
|
||||
local sFrame = AllEnum.FrameType_New.DormFurniture .. AllEnum.FrameColor_New[mapFurnitureItemCfg.Rarity]
|
||||
self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", sFrame)
|
||||
self._mapNode.imgMark:SetActive(0 < mapFurnitureCfg.ActorSD_Id)
|
||||
local bHave = PlayerData.PlayerDormData:CheckGetFurnitureById(nFurnitureId)
|
||||
self:SetMask(not bHave, 4)
|
||||
end
|
||||
function TemplateDormFurnitureItem:SetMask(bMask, nReason)
|
||||
self._mapNode.imgMask:SetActive(bMask)
|
||||
self._mapNode.imgMarkMask:SetActive(bMask)
|
||||
if bMask then
|
||||
local sReason = ConfigTable.GetUIText("Dorm_ItemHint_RoomType" .. nReason)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPMaskHint, sReason)
|
||||
end
|
||||
end
|
||||
function TemplateDormFurnitureItem:SetCount(nCount)
|
||||
self.nItemCount = nCount
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCount, nCount)
|
||||
self:SetMask(nCount < 1, 3)
|
||||
end
|
||||
function TemplateDormFurnitureItem:OnBtnClick_Info()
|
||||
UTILS.ClickItemGridWithTips(self.nFurnitureId, self._mapNode.rtContent, false, false, false)
|
||||
end
|
||||
return TemplateDormFurnitureItem
|
||||
@@ -0,0 +1,121 @@
|
||||
local DormFriendCtrl = class("DormFriendCtrl", BaseCtrl)
|
||||
DormFriendCtrl._mapNodeConfig = {
|
||||
srSearchList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_ClickClose"
|
||||
},
|
||||
TMPEmptyHint = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormFriend_EmptyHint"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Friend_PanelTitle"
|
||||
},
|
||||
Animator = {
|
||||
sNodeName = "---Friend---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
goEmpty = {},
|
||||
goContent = {
|
||||
sNodeName = "---Friend---"
|
||||
}
|
||||
}
|
||||
DormFriendCtrl._mapEventConfig = {
|
||||
DormFriendLikeSuc = "OnEvent_DormFriendLikeSuc",
|
||||
DormGridVisitFriendRoomClick = "OnEvent_DormGridVisitFriendRoomClick"
|
||||
}
|
||||
DormFriendCtrl._mapRedDotConfig = {}
|
||||
function DormFriendCtrl:Awake()
|
||||
end
|
||||
function DormFriendCtrl:FadeIn()
|
||||
end
|
||||
function DormFriendCtrl:FadeOut()
|
||||
end
|
||||
function DormFriendCtrl:OnEnable()
|
||||
self.mapFriendDormDetailData = nil
|
||||
self.mapFriendDetailData = {}
|
||||
self.tbActiveUID = {}
|
||||
self.mapGrid = {}
|
||||
self._mapNode.srSearchList.gameObject:SetActive(false)
|
||||
self._mapNode.goEmpty:SetActive(false)
|
||||
local wait = function()
|
||||
self._mapNode.goContent.gameObject:SetActive(false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.UIEffectSnapShotCapture(self._mapNode.snapshot.gameObject)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.goContent.gameObject:SetActive(true)
|
||||
self._mapNode.Animator:Play("t_window_04_t_in")
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
local GeFriendDormDataCallback = function(mapFriendDetailData)
|
||||
self.mapFriendDormDetailData = mapFriendDetailData
|
||||
self:Refresh()
|
||||
end
|
||||
local GetFriendcallback = function()
|
||||
local tbFriendDetailData = PlayerData.Friend:GetFriendListData()
|
||||
for _, mapFriendDetailData in ipairs(tbFriendDetailData) do
|
||||
self.mapFriendDetailData[mapFriendDetailData.nUId] = mapFriendDetailData
|
||||
end
|
||||
PlayerData.PlayerDormData:DormGetFriendList(GeFriendDormDataCallback)
|
||||
end
|
||||
PlayerData.Friend:SendFriendListGetReq(GetFriendcallback)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {61})
|
||||
end
|
||||
function DormFriendCtrl:OnFriendGridRefresh(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nUid = self.tbActiveUID[nIdx]
|
||||
local instanceId = goGrid:GetInstanceID()
|
||||
if self.mapGrid[instanceId] == nil then
|
||||
self.mapGrid[instanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormFriend.DormFriendGridCtrl")
|
||||
end
|
||||
self.mapGrid[instanceId]:Refresh(self.mapFriendDormDetailData[nUid], self.mapFriendDetailData[nUid])
|
||||
end
|
||||
function DormFriendCtrl:Refresh()
|
||||
for nUid, mapFriendDetailData in pairs(self.mapFriendDetailData) do
|
||||
if self.mapFriendDormDetailData[nUid] ~= nil then
|
||||
table.insert(self.tbActiveUID, mapFriendDetailData.nUId)
|
||||
end
|
||||
end
|
||||
if #self.tbActiveUID > 0 then
|
||||
self._mapNode.srSearchList.gameObject:SetActive(true)
|
||||
self._mapNode.goEmpty:SetActive(false)
|
||||
self._mapNode.srSearchList:Init(#self.tbActiveUID, self, self.OnFriendGridRefresh)
|
||||
else
|
||||
self._mapNode.srSearchList.gameObject:SetActive(false)
|
||||
self._mapNode.goEmpty:SetActive(true)
|
||||
end
|
||||
end
|
||||
function DormFriendCtrl:OnDisable()
|
||||
for nInstanceId, mapCtrl in pairs(self.mapGrid) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
self.mapGrid[nInstanceId] = nil
|
||||
end
|
||||
self.mapGrid = {}
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {0})
|
||||
end
|
||||
function DormFriendCtrl:OnDestroy()
|
||||
end
|
||||
function DormFriendCtrl:OnRelease()
|
||||
end
|
||||
function DormFriendCtrl:OnBtn_ClickClose()
|
||||
self._mapNode.Animator:Play("t_window_04_t_out")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
self:AddTimer(1, 0.3, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormFriendPanel)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormFriendCtrl:OnEvent_DormFriendLikeSuc(nUid)
|
||||
end
|
||||
function DormFriendCtrl:OnEvent_DormGridVisitFriendRoomClick(nUid)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormFriendPanel)
|
||||
EventManager.Hit("DormVisitFriendRoom", nUid, 701001)
|
||||
end
|
||||
return DormFriendCtrl
|
||||
@@ -0,0 +1,81 @@
|
||||
local DormFriendGridCtrl = class("DormFriendGridCtrl", BaseCtrl)
|
||||
DormFriendGridCtrl._mapNodeConfig = {
|
||||
btnLike = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Like"
|
||||
},
|
||||
iconLike = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_iconLike"
|
||||
},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
txtNameDorm = {sComponentName = "TMP_Text"},
|
||||
TMPLikeCount = {sComponentName = "TMP_Text"},
|
||||
TMPiconLike = {sComponentName = "TMP_Text"},
|
||||
goHonor = {
|
||||
sNodeName = "goHonorTitle_",
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.FriendEx.HonorTitleCtrl"
|
||||
},
|
||||
btnVisit = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Visit"
|
||||
},
|
||||
imgHead = {sComponentName = "Image"},
|
||||
TMPBtnVisit = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_Visit"
|
||||
}
|
||||
}
|
||||
DormFriendGridCtrl._mapEventConfig = {}
|
||||
DormFriendGridCtrl._mapRedDotConfig = {}
|
||||
function DormFriendGridCtrl:Awake()
|
||||
end
|
||||
function DormFriendGridCtrl:FadeIn()
|
||||
end
|
||||
function DormFriendGridCtrl:FadeOut()
|
||||
end
|
||||
function DormFriendGridCtrl:OnEnable()
|
||||
end
|
||||
function DormFriendGridCtrl:OnDisable()
|
||||
end
|
||||
function DormFriendGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormFriendGridCtrl:OnRelease()
|
||||
end
|
||||
function DormFriendGridCtrl:Refresh(mapFriendDormDetail, mapFriendDetail)
|
||||
self.mapFriendDormDetail = mapFriendDormDetail
|
||||
self.mapFriendDetail = mapFriendDetail
|
||||
local mapCfg = ConfigTable.GetData("PlayerHead", mapFriendDetail.nHeadIconId)
|
||||
if mapCfg then
|
||||
self:SetPngSprite(self._mapNode.imgHead, mapCfg.Icon)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapFriendDetail.sName)
|
||||
local tbHonorTitle = mapFriendDetail.tbHonorTitle or {}
|
||||
local nLevel = PlayerData.PlayerDormData:GetHonorTitleLevel(self.mapFriendDormDetail.CollectionValue)
|
||||
self._mapNode.goHonor[1].gameObject:SetActive(true)
|
||||
self._mapNode.goHonor[1]:SetHonotTitle(140001, true, nLevel)
|
||||
local sDormName = (mapFriendDormDetail.DormName == nil or mapFriendDormDetail.DormName == "") and ConfigTable.GetUIText("Dorm_DefaultName") or mapFriendDormDetail.DormName
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNameDorm, sDormName)
|
||||
self._mapNode.btnLike.gameObject:SetActive(not mapFriendDormDetail.IsLike)
|
||||
self._mapNode.iconLike.gameObject:SetActive(mapFriendDormDetail.IsLike)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPLikeCount, mapFriendDormDetail.LikeNum)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPiconLike, mapFriendDormDetail.LikeNum)
|
||||
end
|
||||
function DormFriendGridCtrl:OnBtnClick_Like()
|
||||
local callback = function()
|
||||
self._mapNode.btnLike.gameObject:SetActive(false)
|
||||
self._mapNode.iconLike.gameObject:SetActive(true)
|
||||
self.mapFriendDormDetail.LikeNum = self.mapFriendDormDetail.LikeNum + 1
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPLikeCount, self.mapFriendDormDetail.LikeNum)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPiconLike, self.mapFriendDormDetail.LikeNum)
|
||||
end
|
||||
PlayerData.PlayerDormData:DormFriendLike(self.mapFriendDormDetail.uid, callback)
|
||||
end
|
||||
function DormFriendGridCtrl:OnBtnClick_iconLike()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DormTips_LikeForToday"))
|
||||
end
|
||||
function DormFriendGridCtrl:OnBtnClick_Visit()
|
||||
EventManager.Hit("DormGridVisitFriendRoomClick", self.mapFriendDormDetail.uid)
|
||||
end
|
||||
return DormFriendGridCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormFriendPanel = class("DormFriendPanel", BasePanel)
|
||||
DormFriendPanel._bIsMainPanel = false
|
||||
DormFriendPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormFriendPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormFriend.DormFriendCtrl"
|
||||
}
|
||||
}
|
||||
function DormFriendPanel:Awake()
|
||||
end
|
||||
function DormFriendPanel:OnEnable()
|
||||
end
|
||||
function DormFriendPanel:OnAfterEnter()
|
||||
end
|
||||
function DormFriendPanel:OnDisable()
|
||||
end
|
||||
function DormFriendPanel:OnDestroy()
|
||||
end
|
||||
function DormFriendPanel:OnRelease()
|
||||
end
|
||||
return DormFriendPanel
|
||||
@@ -0,0 +1,145 @@
|
||||
local DormFriendRootCtrl = class("DormFriendRootCtrl", BaseCtrl)
|
||||
DormFriendRootCtrl._mapNodeConfig = {
|
||||
imgHead = {sComponentName = "Image"},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
txtNameDorm = {sComponentName = "TMP_Text"},
|
||||
goHonor = {
|
||||
sNodeName = "goHonorTitle_",
|
||||
nCount = 3,
|
||||
sCtrlName = "Game.UI.FriendEx.HonorTitleCtrl"
|
||||
},
|
||||
btnHome = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_DormBackHome"
|
||||
},
|
||||
btnFriendRootVisit = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Friend"
|
||||
},
|
||||
btnCharacter = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Elevator"
|
||||
},
|
||||
iconLike = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_LikeIcon"
|
||||
},
|
||||
btnLike = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Like"
|
||||
},
|
||||
TMPLikeCount = {sComponentName = "TMP_Text"},
|
||||
TMPiconLike = {sComponentName = "TMP_Text"},
|
||||
btnHideUIFriend = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_HideUI"
|
||||
},
|
||||
rtContact = {
|
||||
sCtrlName = "Game.UI.Dorm.DormContact.DormContactBtnListCtrl"
|
||||
},
|
||||
goJoystick = {
|
||||
sNodeName = "--joystick--"
|
||||
},
|
||||
txtBtnHome = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_friendRoot_GoHome"
|
||||
},
|
||||
txtBtnFriendRootVisit = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_FriendRoot_Visit"
|
||||
},
|
||||
txtBtnCharacter = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_FriendRoot_Elevator"
|
||||
}
|
||||
}
|
||||
DormFriendRootCtrl._mapEventConfig = {
|
||||
ACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_ActiveHud",
|
||||
DEACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_DeactiveHud",
|
||||
DormFriendLikeSuc = "OnEvent_DormFriendLikeSuc"
|
||||
}
|
||||
DormFriendRootCtrl._mapRedDotConfig = {}
|
||||
function DormFriendRootCtrl:Awake()
|
||||
end
|
||||
function DormFriendRootCtrl:FadeIn()
|
||||
end
|
||||
function DormFriendRootCtrl:FadeOut()
|
||||
end
|
||||
function DormFriendRootCtrl:OnEnable()
|
||||
end
|
||||
function DormFriendRootCtrl:OnDisable()
|
||||
end
|
||||
function DormFriendRootCtrl:OnDestroy()
|
||||
end
|
||||
function DormFriendRootCtrl:OnRelease()
|
||||
end
|
||||
function DormFriendRootCtrl:Refresh(mapFriendDormDetail, mapFriendDetail)
|
||||
self.mapFriendDormDetail = mapFriendDormDetail
|
||||
self.mapFriendDetail = mapFriendDetail
|
||||
local mapCfg = ConfigTable.GetData("PlayerHead", mapFriendDetail.nHeadIconId)
|
||||
if mapCfg then
|
||||
self:SetPngSprite(self._mapNode.imgHead, mapCfg.Icon)
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, mapFriendDetail.sName)
|
||||
local nLevel = PlayerData.PlayerDormData:GetHonorTitleLevel(self.mapFriendDormDetail.CollectionValue)
|
||||
self._mapNode.goHonor[1].gameObject:SetActive(true)
|
||||
self._mapNode.goHonor[1]:SetHonotTitle(140001, true, nLevel)
|
||||
self._mapNode.goHonor[2].gameObject:SetActive(false)
|
||||
self._mapNode.goHonor[3].gameObject:SetActive(false)
|
||||
local sDormName = (mapFriendDormDetail.DormName == nil or mapFriendDormDetail.DormName == "") and ConfigTable.GetUIText("Dorm_DefaultName") or mapFriendDormDetail.DormName
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNameDorm, sDormName)
|
||||
self._mapNode.btnLike.gameObject:SetActive(not mapFriendDormDetail.IsLike)
|
||||
self._mapNode.iconLike.gameObject:SetActive(mapFriendDormDetail.IsLike)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPLikeCount, mapFriendDormDetail.LikeNum)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPiconLike, mapFriendDormDetail.LikeNum)
|
||||
self._mapNode.rtContact:RemoveAllInteractiveBtn()
|
||||
end
|
||||
function DormFriendRootCtrl:RegisterVirtualJoystick()
|
||||
NovaAPI.UnRegisterVirtualJoystick("Horizontal", "Vertical")
|
||||
NovaAPI.RegisterVirtualJoystick("Horizontal", "Vertical", self._mapNode.goJoystick)
|
||||
end
|
||||
function DormFriendRootCtrl:OnEvent_ActiveHud(rtTransform, nType, nDataId, nEntityId, canInteract)
|
||||
if self._panel.nCurMode ~= 3 then
|
||||
return
|
||||
end
|
||||
if nType == 1 and canInteract then
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, nType, nDataId, nEntityId)
|
||||
end
|
||||
end
|
||||
function DormFriendRootCtrl:OnEvent_DeactiveHud(nEntityId, nType)
|
||||
if self._panel.nCurMode ~= 3 then
|
||||
return
|
||||
end
|
||||
self._mapNode.rtContact:RemoveInteractiveBtn(nEntityId)
|
||||
end
|
||||
function DormFriendRootCtrl:OnEvent_DormFriendLikeSuc(nUid)
|
||||
if self.mapFriendDormDetail ~= nil and nUid == self.mapFriendDormDetail.uid then
|
||||
self.mapFriendDormDetail.IsLike = true
|
||||
self._mapNode.btnLike.gameObject:SetActive(false)
|
||||
self._mapNode.iconLike.gameObject:SetActive(true)
|
||||
self.mapFriendDormDetail.LikeNum = self.mapFriendDormDetail.LikeNum + 1
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPLikeCount, self.mapFriendDormDetail.LikeNum)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPiconLike, self.mapFriendDormDetail.LikeNum)
|
||||
end
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_Like()
|
||||
local callback = function()
|
||||
end
|
||||
PlayerData.PlayerDormData:DormFriendLike(self.mapFriendDormDetail.uid, callback)
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_LikeIcon()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("DormTips_LikeForToday"))
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_DormBackHome()
|
||||
EventManager.Hit("DormBackHome")
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_Elevator()
|
||||
EventManager.Hit("DormPanel_NextRoom")
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_Friend()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormFriendPanel)
|
||||
end
|
||||
function DormFriendRootCtrl:OnBtnClick_HideUI()
|
||||
EventManager.Hit("Dorm_HideUI")
|
||||
end
|
||||
return DormFriendRootCtrl
|
||||
@@ -0,0 +1,794 @@
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
local DormGuideAdapter = {}
|
||||
DormGuideAdapter.APPROACH_AVG_ID = "BBm_DormApproach"
|
||||
DormGuideAdapter.APPROACH_AVG_GROUP = "1"
|
||||
DormGuideAdapter.ROOM2_ID = 701002
|
||||
DormGuideAdapter.CHAR_ID = 103
|
||||
local nAbortCooldown = 3
|
||||
function DormGuideAdapter._Ctrl()
|
||||
return DormGuideUI._objDormCtrl
|
||||
end
|
||||
function DormGuideAdapter._Panel()
|
||||
local objCtrl = DormGuideAdapter._Ctrl()
|
||||
if objCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
return objCtrl._panel
|
||||
end
|
||||
function DormGuideAdapter._Editor()
|
||||
return DormGuideUI._GetEditorNode()
|
||||
end
|
||||
function DormGuideAdapter._Interactive()
|
||||
return DormGuideUI._GetInteractiveNode()
|
||||
end
|
||||
function DormGuideAdapter._Select()
|
||||
return DormGuideUI._GetCharSelectCtrl()
|
||||
end
|
||||
function DormGuideAdapter.NodeTr(node)
|
||||
if node == nil then
|
||||
return nil
|
||||
end
|
||||
local tr = node.transform
|
||||
if tr == nil and node.gameObject ~= nil then
|
||||
tr = node.gameObject.transform
|
||||
end
|
||||
return tr
|
||||
end
|
||||
function DormGuideAdapter.GetQuestCardTransform()
|
||||
local obj = DormGuideAdapter._Interactive()
|
||||
if obj == nil or obj._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local mapNode = obj._mapNode
|
||||
local btn = mapNode.btnQuestInteractiveSide
|
||||
if btn ~= nil then
|
||||
local trBtn = DormGuideAdapter.NodeTr(btn)
|
||||
if trBtn ~= nil then
|
||||
return trBtn
|
||||
end
|
||||
end
|
||||
local rtQuest = mapNode.rtQuest
|
||||
if rtQuest == nil then
|
||||
return nil
|
||||
end
|
||||
local trRoot = rtQuest.transform
|
||||
if trRoot == nil and rtQuest.gameObject ~= nil then
|
||||
trRoot = rtQuest.gameObject.transform
|
||||
end
|
||||
if trRoot == nil then
|
||||
return nil
|
||||
end
|
||||
local trChild = trRoot:Find("btnQuestInteractiveSide")
|
||||
if trChild ~= nil then
|
||||
return trChild
|
||||
end
|
||||
return trRoot
|
||||
end
|
||||
function DormGuideAdapter.FindChild(trRoot, sPath)
|
||||
if trRoot == nil or sPath == nil then
|
||||
return nil
|
||||
end
|
||||
return trRoot:Find(sPath)
|
||||
end
|
||||
function DormGuideAdapter.QuestStatus(nQuestId)
|
||||
local mapQuest = PlayerData.Quest:GetDormQuestDataById(nQuestId)
|
||||
if mapQuest ~= nil then
|
||||
return mapQuest.nStatus
|
||||
end
|
||||
local objDorm = PlayerData.PlayerDormData
|
||||
if objDorm == nil or objDorm.bHasRoomData ~= true or objDorm.mapDromBaseInfo == nil or objDorm.mapDromBaseInfo.TaskGroup == nil then
|
||||
return nil
|
||||
end
|
||||
local nCurGroup = objDorm.mapDromBaseInfo.TaskGroup.Version
|
||||
if nCurGroup == nil then
|
||||
return nil
|
||||
end
|
||||
if nCurGroup == 0 then
|
||||
return 2
|
||||
end
|
||||
local mapCfg = ConfigTable.GetData("DormQuest", nQuestId)
|
||||
if mapCfg == nil then
|
||||
return nil
|
||||
end
|
||||
if nCurGroup > mapCfg.DormQuestGroup then
|
||||
return 2
|
||||
end
|
||||
if nCurGroup < mapCfg.DormQuestGroup then
|
||||
return 0
|
||||
end
|
||||
return 2
|
||||
end
|
||||
function DormGuideAdapter.AnimatorSettled(anim, sStateName)
|
||||
if anim == nil or sStateName == nil or anim.GetCurrentAnimatorStateInfo == nil then
|
||||
return true
|
||||
end
|
||||
local ok, bDone = pcall(function()
|
||||
if anim:IsInTransition(0) then
|
||||
local nextInfo = anim:GetNextAnimatorStateInfo(0)
|
||||
if nextInfo:IsName(sStateName) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
local info = anim:GetCurrentAnimatorStateInfo(0)
|
||||
if info:IsName(sStateName) then
|
||||
return info.normalizedTime >= 1 and not anim:IsInTransition(0)
|
||||
end
|
||||
return true
|
||||
end)
|
||||
if not ok then
|
||||
return true
|
||||
end
|
||||
return bDone == true
|
||||
end
|
||||
function DormGuideAdapter.Mode()
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.nCurMode == nil then
|
||||
return nil
|
||||
end
|
||||
return objPanel.nCurMode
|
||||
end
|
||||
function DormGuideAdapter.ObserveState()
|
||||
local objInteractive = DormGuideAdapter._Interactive()
|
||||
if objInteractive == nil or objInteractive.nCurState == nil then
|
||||
return nil
|
||||
end
|
||||
return objInteractive.nCurState
|
||||
end
|
||||
function DormGuideAdapter.IsOwnRoom(nRoomId)
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.nCurRoom == nil then
|
||||
return nil
|
||||
end
|
||||
if objPanel.nCurMode == 3 then
|
||||
return false
|
||||
end
|
||||
return objPanel.nCurRoom == nRoomId
|
||||
end
|
||||
function DormGuideAdapter.RoomKnown(nRoomId)
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.mapDormRoomInfo == nil then
|
||||
local mapInfo = PlayerData.PlayerDormData.mapDormRoomInfo
|
||||
if mapInfo == nil then
|
||||
return nil
|
||||
end
|
||||
return mapInfo[nRoomId] ~= nil
|
||||
end
|
||||
return objPanel.mapDormRoomInfo[nRoomId] ~= nil
|
||||
end
|
||||
function DormGuideAdapter.RoleInRoom(nRoleId)
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.mapDormRoomInfo == nil or objPanel.nCurRoom == nil then
|
||||
return nil
|
||||
end
|
||||
local mapRoom = objPanel.mapDormRoomInfo[objPanel.nCurRoom]
|
||||
if mapRoom == nil or mapRoom.RoleList == nil then
|
||||
return nil
|
||||
end
|
||||
for _, mapRole in ipairs(mapRoom.RoleList) do
|
||||
if mapRole.RoleId == nRoleId then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
function DormGuideAdapter.FurnitureState(nFurnitureId)
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.mapDormRoomInfo == nil or objPanel.mapFurnitureBag == nil or objPanel.mapFurnitureUsedCount == nil or objPanel.nCurRoom == nil then
|
||||
return "unknown"
|
||||
end
|
||||
local mapRoom = objPanel.mapDormRoomInfo[objPanel.nCurRoom]
|
||||
if mapRoom == nil or mapRoom.FurnitureList == nil then
|
||||
return "unknown"
|
||||
end
|
||||
local bSaved = false
|
||||
for _, mapFur in ipairs(mapRoom.FurnitureList) do
|
||||
if mapFur.FurnitureId == nFurnitureId then
|
||||
bSaved = true
|
||||
break
|
||||
end
|
||||
end
|
||||
local nEdit = objPanel.tempEditCount[nFurnitureId]
|
||||
if nEdit ~= nil and nEdit ~= 0 then
|
||||
return "editing"
|
||||
end
|
||||
local objEditor = DormGuideAdapter._Editor()
|
||||
if objEditor ~= nil and objEditor.nCurEditFurniture == nFurnitureId then
|
||||
return "editing"
|
||||
end
|
||||
if bSaved then
|
||||
return "saved"
|
||||
end
|
||||
return "none"
|
||||
end
|
||||
function DormGuideAdapter.CanPlace(nFurnitureId)
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.mapFurnitureBag == nil or objPanel.mapFurnitureUsedCount == nil then
|
||||
return nil
|
||||
end
|
||||
if type(objPanel.GetFurnitureCount) ~= "function" then
|
||||
return nil
|
||||
end
|
||||
return 0 < (objPanel:GetFurnitureCount(nFurnitureId) or 0)
|
||||
end
|
||||
function DormGuideAdapter.ResolveTab(nFurnitureId)
|
||||
local objEditor = DormGuideAdapter._Editor()
|
||||
if objEditor == nil or objEditor.tbFurTab1 == nil or objEditor.tbFurTab2 == nil or objEditor.nGuideEditorVer == nil then
|
||||
return "unknown", nil, nil
|
||||
end
|
||||
local mapCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapCfg == nil or mapCfg.Tab == nil then
|
||||
return "missing", nil, nil
|
||||
end
|
||||
for i, nTab in ipairs(objEditor.tbFurTab1) do
|
||||
if nTab == mapCfg.Tab then
|
||||
return "ok", 1, i
|
||||
end
|
||||
end
|
||||
for i, nTab in ipairs(objEditor.tbFurTab2) do
|
||||
if nTab == mapCfg.Tab then
|
||||
return "ok", 2, i
|
||||
end
|
||||
end
|
||||
return "missing", nil, nil
|
||||
end
|
||||
function DormGuideAdapter.EditorReady(nFurnitureId)
|
||||
local objEditor = DormGuideAdapter._Editor()
|
||||
local nMode = DormGuideAdapter.Mode()
|
||||
if nMode ~= 2 or objEditor == nil or objEditor.nGuideEditorVer == nil then
|
||||
return false
|
||||
end
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel ~= nil and objEditor.nGuideEditorRoom ~= nil and objEditor.nGuideEditorRoom ~= objPanel.nCurRoom then
|
||||
return false
|
||||
end
|
||||
local sState = DormGuideAdapter.FurnitureState(nFurnitureId)
|
||||
if sState == "unknown" then
|
||||
return false
|
||||
end
|
||||
local sTab = DormGuideAdapter.ResolveTab(nFurnitureId)
|
||||
if sTab == "unknown" then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
function DormGuideAdapter.HasPendingSave()
|
||||
local objEditor = DormGuideAdapter._Editor()
|
||||
if objEditor == nil or objEditor._mapNode == nil or objEditor._mapNode.btnSaveRoom == nil then
|
||||
return nil
|
||||
end
|
||||
local go = objEditor._mapNode.btnSaveRoom.gameObject
|
||||
if go == nil then
|
||||
return nil
|
||||
end
|
||||
return go.activeSelf == true
|
||||
end
|
||||
function DormGuideAdapter.GiftState()
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if objPanel == nil or objPanel.mapDormBaseData == nil or type(objPanel.GetDormRewardId) ~= "function" then
|
||||
return nil
|
||||
end
|
||||
local tbReward = objPanel:GetDormRewardId()
|
||||
if tbReward == nil then
|
||||
return nil
|
||||
end
|
||||
return 0 < #tbReward
|
||||
end
|
||||
function DormGuideAdapter.InContact()
|
||||
local objInteractive = DormGuideAdapter._Interactive()
|
||||
if objInteractive == nil or objInteractive._mapNode == nil or objInteractive._mapNode.rtContact == nil then
|
||||
return false
|
||||
end
|
||||
return objInteractive._mapNode.rtContact.mapCurCharInfo ~= nil
|
||||
end
|
||||
function DormGuideAdapter.ContactRole()
|
||||
local objInteractive = DormGuideAdapter._Interactive()
|
||||
if objInteractive == nil or objInteractive._mapNode == nil or objInteractive._mapNode.rtContact == nil then
|
||||
return nil
|
||||
end
|
||||
local mapInfo = objInteractive._mapNode.rtContact.mapCurCharInfo
|
||||
if mapInfo == nil then
|
||||
return nil
|
||||
end
|
||||
return tonumber(mapInfo.nDataId)
|
||||
end
|
||||
function DormGuideAdapter.BeginDormEnter()
|
||||
DormGuideAdapter._nEnterGen = (DormGuideAdapter._nEnterGen or 0) + 1
|
||||
DormGuideAdapter._mapEnter = {
|
||||
nGen = DormGuideAdapter._nEnterGen,
|
||||
bLoad = false,
|
||||
bTimeline = nil
|
||||
}
|
||||
return DormGuideAdapter._nEnterGen
|
||||
end
|
||||
function DormGuideAdapter.MarkDormLoad()
|
||||
if DormGuideAdapter._mapEnter ~= nil then
|
||||
DormGuideAdapter._mapEnter.bLoad = true
|
||||
end
|
||||
DormGuideAdapter.MarkRoomLoaded()
|
||||
end
|
||||
function DormGuideAdapter.MarkTimeline(bSuccess)
|
||||
if DormGuideAdapter._mapEnter ~= nil and DormGuideAdapter._mapEnter.bTimeline == nil then
|
||||
DormGuideAdapter._mapEnter.bTimeline = bSuccess == true
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.EnterLoadReady(nGen)
|
||||
local mapEnter = DormGuideAdapter._mapEnter
|
||||
return mapEnter ~= nil and mapEnter.nGen == nGen and mapEnter.bLoad == true
|
||||
end
|
||||
function DormGuideAdapter.TimelineState(nGen)
|
||||
local mapEnter = DormGuideAdapter._mapEnter
|
||||
if mapEnter == nil or mapEnter.nGen ~= nGen or mapEnter.bLoad ~= true then
|
||||
return nil
|
||||
end
|
||||
return mapEnter.bTimeline
|
||||
end
|
||||
function DormGuideAdapter._EnsureSave()
|
||||
if DormGuideAdapter._bSaveListen then
|
||||
return
|
||||
end
|
||||
DormGuideAdapter._bSaveListen = true
|
||||
EventManager.Add("DormGuide_SaveResult", DormGuideAdapter, DormGuideAdapter._OnSaveResult)
|
||||
EventManager.Add("DormGuide_SaveCutsceneEnd", DormGuideAdapter, DormGuideAdapter._OnSaveCutscene)
|
||||
end
|
||||
function DormGuideAdapter.BeginSave()
|
||||
DormGuideAdapter._EnsureSave()
|
||||
local mapCur = DormGuideAdapter._mapSave
|
||||
if mapCur ~= nil and mapCur.sPhase == "pending" then
|
||||
return mapCur.nId, false
|
||||
end
|
||||
DormGuideAdapter._nSaveGen = (DormGuideAdapter._nSaveGen or 0) + 1
|
||||
DormGuideAdapter._mapSave = {
|
||||
nId = DormGuideAdapter._nSaveGen,
|
||||
sPhase = "pending",
|
||||
bCutscene = false
|
||||
}
|
||||
return DormGuideAdapter._nSaveGen, true
|
||||
end
|
||||
function DormGuideAdapter._OnSaveResult(_, bOk, sKind)
|
||||
local mapSave = DormGuideAdapter._mapSave
|
||||
if mapSave == nil or mapSave.sPhase ~= "pending" then
|
||||
return
|
||||
end
|
||||
if bOk == true then
|
||||
mapSave.sPhase = "done"
|
||||
mapSave.sKind = sKind or "done"
|
||||
mapSave.bCutscene = true
|
||||
else
|
||||
mapSave.sPhase = "rejected"
|
||||
mapSave.sKind = sKind or "rejected"
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter._OnSaveCutscene()
|
||||
local mapSave = DormGuideAdapter._mapSave
|
||||
if mapSave ~= nil then
|
||||
mapSave.bCutscene = false
|
||||
mapSave.bCutsceneDone = true
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.SavePhase(nId)
|
||||
local mapSave = DormGuideAdapter._mapSave
|
||||
if mapSave == nil or nId ~= nil and mapSave.nId ~= nId then
|
||||
return nil
|
||||
end
|
||||
return mapSave.sPhase
|
||||
end
|
||||
function DormGuideAdapter.SaveCutscenePlaying(nId)
|
||||
local mapSave = DormGuideAdapter._mapSave
|
||||
if mapSave == nil or nId ~= nil and mapSave.nId ~= nId then
|
||||
return false
|
||||
end
|
||||
return mapSave.bCutscene == true and mapSave.bCutsceneDone ~= true
|
||||
end
|
||||
function DormGuideAdapter.SaveSettled(nId)
|
||||
local mapSave = DormGuideAdapter._mapSave
|
||||
if mapSave == nil or mapSave.nId ~= nId then
|
||||
return false
|
||||
end
|
||||
if mapSave.sPhase ~= "done" then
|
||||
return false
|
||||
end
|
||||
if DormGuideAdapter.SaveCutscenePlaying(nId) then
|
||||
return false
|
||||
end
|
||||
local nMode = DormGuideAdapter.Mode()
|
||||
return nMode == 0 or nMode == 1
|
||||
end
|
||||
function DormGuideAdapter.QuestCardSettled()
|
||||
local objCtrl = DormGuideAdapter._Ctrl()
|
||||
if objCtrl == nil then
|
||||
return false
|
||||
end
|
||||
return DormGuideAdapter.AnimatorSettled(objCtrl.animator, "DormPanel_in")
|
||||
end
|
||||
function DormGuideAdapter.BeginQuest(nQuestId)
|
||||
local mapCur = DormGuideAdapter._mapQuest
|
||||
if mapCur ~= nil and mapCur.sPhase == "pending" then
|
||||
return mapCur.nId, false
|
||||
end
|
||||
DormGuideAdapter._nQuestGen = (DormGuideAdapter._nQuestGen or 0) + 1
|
||||
DormGuideAdapter._mapQuest = {
|
||||
nId = DormGuideAdapter._nQuestGen,
|
||||
nQuestId = nQuestId,
|
||||
sPhase = "pending"
|
||||
}
|
||||
return DormGuideAdapter._nQuestGen, true
|
||||
end
|
||||
function DormGuideAdapter.NoteQuest(nQuestId, bOk)
|
||||
local mapQuest = DormGuideAdapter._mapQuest
|
||||
if mapQuest == nil or mapQuest.sPhase ~= "pending" then
|
||||
return
|
||||
end
|
||||
if nQuestId ~= nil and mapQuest.nQuestId ~= nil and mapQuest.nQuestId ~= nQuestId then
|
||||
return
|
||||
end
|
||||
mapQuest.sPhase = bOk and "done" or "rejected"
|
||||
EventManager.Hit("DormGuide_QuestReceive", mapQuest.nId, mapQuest.nQuestId, bOk == true)
|
||||
end
|
||||
function DormGuideAdapter.QuestPhase(nId)
|
||||
local mapQuest = DormGuideAdapter._mapQuest
|
||||
if mapQuest == nil or nId ~= nil and mapQuest.nId ~= nId then
|
||||
return nil
|
||||
end
|
||||
return mapQuest.sPhase
|
||||
end
|
||||
function DormGuideAdapter.BeginCharConfirm()
|
||||
local mapCur = DormGuideAdapter._mapChar
|
||||
if mapCur ~= nil and mapCur.sPhase == "pending" then
|
||||
return mapCur.nId, false
|
||||
end
|
||||
DormGuideAdapter._nCharGen = (DormGuideAdapter._nCharGen or 0) + 1
|
||||
DormGuideAdapter._mapChar = {
|
||||
nId = DormGuideAdapter._nCharGen,
|
||||
sPhase = "pending",
|
||||
bClosed = false
|
||||
}
|
||||
return DormGuideAdapter._nCharGen, true
|
||||
end
|
||||
function DormGuideAdapter.NoteCharResult(bOk)
|
||||
local mapChar = DormGuideAdapter._mapChar
|
||||
if mapChar == nil or mapChar.sPhase == "done" or mapChar.sPhase == "rejected" then
|
||||
return
|
||||
end
|
||||
mapChar.sPhase = bOk and "accepted" or "rejected"
|
||||
end
|
||||
function DormGuideAdapter.NoteCharClosed()
|
||||
local mapChar = DormGuideAdapter._mapChar
|
||||
if mapChar ~= nil then
|
||||
mapChar.bClosed = true
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.CharConfirmReady(nId, nRoleId)
|
||||
local mapChar = DormGuideAdapter._mapChar
|
||||
if mapChar == nil or mapChar.nId ~= nId then
|
||||
return false
|
||||
end
|
||||
if mapChar.sPhase ~= "accepted" then
|
||||
return false
|
||||
end
|
||||
if DormGuideAdapter.RoleInRoom(nRoleId) ~= true then
|
||||
return false
|
||||
end
|
||||
local objSelect = DormGuideAdapter._Select()
|
||||
if objSelect ~= nil and objSelect.bOpen == true then
|
||||
return false
|
||||
end
|
||||
local nMode = DormGuideAdapter.Mode()
|
||||
return nMode == 0 or nMode == 1
|
||||
end
|
||||
function DormGuideAdapter.BeginCaress()
|
||||
local mapCur = DormGuideAdapter._mapCaress
|
||||
if mapCur ~= nil and (mapCur.sPhase == "accepted" or mapCur.sPhase == "performing" or mapCur.sPhase == "reward" or mapCur.sPhase == "level") then
|
||||
return mapCur.nId, false
|
||||
end
|
||||
DormGuideAdapter._nCaressGen = (DormGuideAdapter._nCaressGen or 0) + 1
|
||||
DormGuideAdapter._mapCaress = {
|
||||
nId = DormGuideAdapter._nCaressGen,
|
||||
sPhase = "opened"
|
||||
}
|
||||
DormGuideAdapter._nFocusRole = nil
|
||||
DormGuideAdapter._nFocusAt = nil
|
||||
return DormGuideAdapter._nCaressGen, true
|
||||
end
|
||||
function DormGuideAdapter.NoteCaressRejected()
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress ~= nil and mapCaress.sPhase == "opened" then
|
||||
mapCaress.sPhase = "rejected"
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.NoteCaressPhase(sPhase)
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress == nil or mapCaress.sPhase == "done" or mapCaress.sPhase == "rejected" then
|
||||
return
|
||||
end
|
||||
mapCaress.sPhase = sPhase
|
||||
end
|
||||
function DormGuideAdapter.NoteCaressDone()
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress == nil or mapCaress.sPhase == "rejected" then
|
||||
return
|
||||
end
|
||||
mapCaress.sPhase = "done"
|
||||
EventManager.Hit("DormGuide_CaressDone", mapCaress.nId)
|
||||
end
|
||||
function DormGuideAdapter.WatchPanel(nPanelId)
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress == nil then
|
||||
return
|
||||
end
|
||||
mapCaress.nWatchPanel = nPanelId
|
||||
if not DormGuideAdapter._bPanelListen then
|
||||
DormGuideAdapter._bPanelListen = true
|
||||
EventManager.Add("Guide_CloseDisposablePanel", DormGuideAdapter, DormGuideAdapter._OnPanelClose)
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter._OnPanelClose(_, nPanelId)
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress == nil or mapCaress.nWatchPanel ~= nPanelId then
|
||||
return
|
||||
end
|
||||
mapCaress.nWatchPanel = nil
|
||||
if mapCaress.sPhase == "level" or mapCaress.sPhase == "reward" then
|
||||
DormGuideAdapter.NoteCaressDone()
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.CaressPhase(nId)
|
||||
local mapCaress = DormGuideAdapter._mapCaress
|
||||
if mapCaress == nil or nId ~= nil and mapCaress.nId ~= nId then
|
||||
return nil
|
||||
end
|
||||
return mapCaress.sPhase
|
||||
end
|
||||
function DormGuideAdapter.MarkFocus(nRoleId)
|
||||
if DormGuideAdapter.ContactRole() ~= nRoleId then
|
||||
DormGuideAdapter._nFocusRole = nil
|
||||
DormGuideAdapter._nFocusAt = nil
|
||||
return false
|
||||
end
|
||||
if DormGuideAdapter._nFocusRole ~= nRoleId then
|
||||
DormGuideAdapter._nFocusRole = nRoleId
|
||||
DormGuideAdapter._nFocusAt = TimerManager.GetUnscaledTime()
|
||||
return false
|
||||
end
|
||||
return TimerManager.GetUnscaledTime() - (DormGuideAdapter._nFocusAt or 0) >= 0.7
|
||||
end
|
||||
function DormGuideAdapter.ResetFocus()
|
||||
DormGuideAdapter._nFocusRole = nil
|
||||
DormGuideAdapter._nFocusAt = nil
|
||||
end
|
||||
function DormGuideAdapter.BeginRoomEnter(nRoomId, bElevator)
|
||||
DormGuideAdapter._nRoomGen = (DormGuideAdapter._nRoomGen or 0) + 1
|
||||
DormGuideAdapter._mapRoomEnter = {
|
||||
nId = DormGuideAdapter._nRoomGen,
|
||||
nRoomId = nRoomId,
|
||||
bElevator = bElevator == true,
|
||||
bLoaded = false,
|
||||
bWalkout = false,
|
||||
bConfirm = false
|
||||
}
|
||||
return DormGuideAdapter._nRoomGen
|
||||
end
|
||||
function DormGuideAdapter.NoteRoomConfirm(bOk, nRoomId, bElevator)
|
||||
if bOk ~= true then
|
||||
local mapEnter = DormGuideAdapter._mapRoomEnter
|
||||
if mapEnter ~= nil and mapEnter.bLoaded ~= true then
|
||||
mapEnter.sPhase = "rejected"
|
||||
end
|
||||
return
|
||||
end
|
||||
if DormGuideAdapter._mapRoomEnter == nil or DormGuideAdapter._mapRoomEnter.bLoaded == true then
|
||||
DormGuideAdapter.BeginRoomEnter(nRoomId, bElevator)
|
||||
end
|
||||
DormGuideAdapter._mapRoomEnter.bConfirm = true
|
||||
DormGuideAdapter._mapRoomEnter.nRoomId = nRoomId
|
||||
DormGuideAdapter._mapRoomEnter.bElevator = bElevator == true
|
||||
DormGuideAdapter._mapRoomEnter.sPhase = "accepted"
|
||||
end
|
||||
function DormGuideAdapter.MarkRoomLoaded()
|
||||
local mapEnter = DormGuideAdapter._mapRoomEnter
|
||||
local objPanel = DormGuideAdapter._Panel()
|
||||
if mapEnter == nil or objPanel == nil then
|
||||
return
|
||||
end
|
||||
if objPanel.nCurRoom == mapEnter.nRoomId and objPanel.nCurMode ~= 3 then
|
||||
mapEnter.bLoaded = true
|
||||
end
|
||||
DormGuideAdapter.FlushPassive()
|
||||
end
|
||||
function DormGuideAdapter.MarkWalkout()
|
||||
if DormGuideAdapter._mapRoomEnter ~= nil then
|
||||
DormGuideAdapter._mapRoomEnter.bWalkout = true
|
||||
end
|
||||
DormGuideAdapter.FlushPassive()
|
||||
end
|
||||
function DormGuideAdapter.RoomArrived(nRoomId)
|
||||
if DormGuideAdapter.IsOwnRoom(nRoomId) ~= true then
|
||||
return false
|
||||
end
|
||||
local mapEnter = DormGuideAdapter._mapRoomEnter
|
||||
if mapEnter == nil or mapEnter.nRoomId ~= nRoomId or mapEnter.sPhase == "rejected" then
|
||||
return false
|
||||
end
|
||||
return mapEnter.bLoaded == true
|
||||
end
|
||||
function DormGuideAdapter.RoomEnterReady(nRoomId)
|
||||
if DormGuideAdapter.IsOwnRoom(nRoomId) ~= true then
|
||||
return false
|
||||
end
|
||||
local mapEnter = DormGuideAdapter._mapRoomEnter
|
||||
if mapEnter == nil or mapEnter.nRoomId ~= nRoomId or mapEnter.bLoaded ~= true then
|
||||
return false
|
||||
end
|
||||
if mapEnter.bElevator and mapEnter.bWalkout ~= true then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
function DormGuideAdapter.NotePassive(sMsg)
|
||||
DormGuideAdapter._mapPending = DormGuideAdapter._mapPending or {}
|
||||
DormGuideAdapter._nSession = DormGuideAdapter._nSession or 1
|
||||
DormGuideAdapter._mapPending[sMsg] = {
|
||||
nSession = DormGuideAdapter._nSession
|
||||
}
|
||||
end
|
||||
function DormGuideAdapter.ClearPending()
|
||||
DormGuideAdapter._nSession = (DormGuideAdapter._nSession or 1) + 1
|
||||
DormGuideAdapter._mapPending = {}
|
||||
if DormGuideAdapter._objFlush ~= nil then
|
||||
TimerManager.Remove(DormGuideAdapter._objFlush)
|
||||
DormGuideAdapter._objFlush = nil
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter._PendingValid(sMsg)
|
||||
if NovaAPI.GetCurrentModuleName() ~= "DormModuleScene" then
|
||||
return false
|
||||
end
|
||||
if sMsg == "Guide_DormEnterRoom2" then
|
||||
return DormGuideAdapter.RoomEnterReady(DormGuideAdapter.ROOM2_ID)
|
||||
end
|
||||
local nMode = DormGuideAdapter.Mode()
|
||||
if nMode == nil or nMode == 2 or nMode == 3 then
|
||||
return false
|
||||
end
|
||||
local PanelManager = require("GameCore.UI.PanelManager")
|
||||
if PanelManager.CheckPanelOpen(PanelId.DormQuestPanel) then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
function DormGuideAdapter.FlushPassive()
|
||||
if DormGuideAdapter._objFlush ~= nil then
|
||||
return
|
||||
end
|
||||
local nSession = DormGuideAdapter._nSession or 1
|
||||
DormGuideAdapter._objFlush = TimerManager.Add(1, 0, DormGuideAdapter, function()
|
||||
DormGuideAdapter._objFlush = nil
|
||||
if nSession ~= (DormGuideAdapter._nSession or 1) then
|
||||
return
|
||||
end
|
||||
if PlayerData.Guide ~= nil and PlayerData.Guide.isProcessing then
|
||||
return
|
||||
end
|
||||
local mapPending = DormGuideAdapter._mapPending
|
||||
if mapPending == nil then
|
||||
return
|
||||
end
|
||||
for sMsg, mapInfo in pairs(mapPending) do
|
||||
if mapInfo.nSession ~= nSession or not DormGuideAdapter._PendingValid(sMsg) then
|
||||
if mapInfo.nSession ~= nSession then
|
||||
mapPending[sMsg] = nil
|
||||
end
|
||||
else
|
||||
mapPending[sMsg] = nil
|
||||
EventManager.Hit("Guide_PassiveCheck_Msg", sMsg)
|
||||
if PlayerData.Guide ~= nil and PlayerData.Guide.isProcessing then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormGuideAdapter.OnGuideReleased()
|
||||
DormGuideUI.TryBroadcastEnter()
|
||||
DormGuideAdapter.FlushPassive()
|
||||
end
|
||||
function DormGuideAdapter.ApplyPolicy(mapPolicy)
|
||||
if mapPolicy == nil then
|
||||
return
|
||||
end
|
||||
DormGuideUI._mapShowExcept = mapPolicy.tbShowExcept
|
||||
if mapPolicy.bHideChrome then
|
||||
DormGuideUI.HideChrome(mapPolicy.bKeepContact == true)
|
||||
elseif mapPolicy.bLockLeave then
|
||||
DormGuideUI._bLockLeave = true
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = mapPolicy.bKeepContact == true
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
else
|
||||
DormGuideUI._bLockLeave = false
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
if not DormGuideAdapter.InContact() then
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
end
|
||||
end
|
||||
if mapPolicy.nSceneCap ~= nil then
|
||||
DormGuideUI.SetOwnerCap("guide", mapPolicy.nSceneCap)
|
||||
end
|
||||
DormGuideUI.SetQuestLock(mapPolicy.bLockQuest == true)
|
||||
if DormGuideUI._objParentBarrier ~= nil then
|
||||
DormGuideUI._objParentBarrier(mapPolicy.bUiBarrier == true)
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.HandOffDormUi()
|
||||
DormGuideUI._mapShowExcept = nil
|
||||
DormGuideUI._bLockLeave = false
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
DormGuideUI.SetOwnerCap("guide", nil)
|
||||
DormGuideUI.SetQuestLock(false)
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
local objCtrl = DormGuideAdapter._Ctrl()
|
||||
if objCtrl ~= nil and objCtrl.bHide ~= true and objCtrl._mapNode ~= nil and objCtrl._mapNode.rtMenu ~= nil then
|
||||
objCtrl._mapNode.rtMenu:SetActive(true)
|
||||
end
|
||||
if DormGuideAdapter.InContact() then
|
||||
EventManager.Hit("DormShowInteractiveBtns", false)
|
||||
end
|
||||
end
|
||||
function DormGuideAdapter.ReleaseGuide()
|
||||
DormGuideAdapter.ResetFocus()
|
||||
DormGuideUI._mapShowExcept = nil
|
||||
DormGuideUI._bLockLeave = false
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
DormGuideUI.SetOwnerCap("guide", nil)
|
||||
DormGuideUI.SetQuestLock(false)
|
||||
local RestoreMenu = function()
|
||||
local objCtrl = DormGuideAdapter._Ctrl()
|
||||
if objCtrl == nil or objCtrl.bHide == true or objCtrl._mapNode == nil or objCtrl._mapNode.rtMenu == nil then
|
||||
return
|
||||
end
|
||||
objCtrl._mapNode.rtMenu:SetActive(true)
|
||||
end
|
||||
if DormGuideAdapter.InContact() then
|
||||
DormGuideAdapter.HandOffDormUi()
|
||||
return
|
||||
end
|
||||
local bShow = DormGuideUI._bBusinessShowBtns ~= false
|
||||
local objInteractive = DormGuideAdapter._Interactive()
|
||||
if objInteractive ~= nil and objInteractive._mapNode ~= nil and objInteractive._mapNode.rtListHideRoot ~= nil then
|
||||
objInteractive._mapNode.rtListHideRoot:SetActive(bShow)
|
||||
end
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
RestoreMenu()
|
||||
end
|
||||
function DormGuideAdapter.ExitEditorOnce()
|
||||
if DormGuideAdapter.Mode() ~= 2 then
|
||||
return true
|
||||
end
|
||||
if DormGuideAdapter.HasPendingSave() ~= false then
|
||||
return false
|
||||
end
|
||||
local objCtrl = DormGuideAdapter._Ctrl()
|
||||
if objCtrl == nil or type(objCtrl.OnEvent_InteractiveMode) ~= "function" then
|
||||
return false
|
||||
end
|
||||
if not DormGuideAdapter._bExitEditor then
|
||||
DormGuideAdapter._bExitEditor = true
|
||||
objCtrl:OnEvent_InteractiveMode(true)
|
||||
end
|
||||
return DormGuideAdapter.Mode() ~= 2
|
||||
end
|
||||
function DormGuideAdapter.ResetExitEditor()
|
||||
DormGuideAdapter._bExitEditor = false
|
||||
end
|
||||
return DormGuideAdapter
|
||||
@@ -0,0 +1,761 @@
|
||||
local TimerManager = require("GameCore.Timer.TimerManager")
|
||||
local PanelManager = require("GameCore.UI.PanelManager")
|
||||
local DormGuideUI = {}
|
||||
DormGuideUI.InputCap = {
|
||||
Pan = 1,
|
||||
Rotate = 2,
|
||||
Zoom = 4,
|
||||
Move = 8,
|
||||
PickActor = 16,
|
||||
PickFur = 32
|
||||
}
|
||||
DormGuideUI.DEFAULT_BLOCK = DormGuideUI.InputCap.Zoom | DormGuideUI.InputCap.PickActor | DormGuideUI.InputCap.PickFur
|
||||
local nMoveBit = DormGuideUI.InputCap.Move
|
||||
DormGuideUI._objDormCtrl = nil
|
||||
DormGuideUI._mapOverlay = {}
|
||||
DormGuideUI._bLockLeave = false
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
DormGuideUI._nInputCap = 0
|
||||
DormGuideUI._bTriggerEventBound = false
|
||||
DormGuideUI._bInterceptEventBound = false
|
||||
DormGuideUI._bPendingRoom2Guide = false
|
||||
DormGuideUI._nRoom2Timer = nil
|
||||
DormGuideUI.ROOM2_ID = 701002
|
||||
DormGuideUI.ROOM2_ENTER_DELAY = 1.5
|
||||
DormGuideUI.GUIDE_GROUP_ID = {
|
||||
[521] = true,
|
||||
[522] = true,
|
||||
[523] = true,
|
||||
[524] = true,
|
||||
[525] = true,
|
||||
[526] = true,
|
||||
[527] = true,
|
||||
[528] = true
|
||||
}
|
||||
function DormGuideUI.BuildBindPath(tr, sStopName)
|
||||
if tr == nil then
|
||||
return nil
|
||||
end
|
||||
local tbName = {}
|
||||
while tr ~= nil do
|
||||
local sName = tr.name
|
||||
table.insert(tbName, 1, sName)
|
||||
if sStopName ~= nil and sName == sStopName then
|
||||
break
|
||||
end
|
||||
tr = tr.parent
|
||||
end
|
||||
if #tbName == 0 then
|
||||
return nil
|
||||
end
|
||||
return table.concat(tbName, "/")
|
||||
end
|
||||
function DormGuideUI.GetNodeBindPath(mapNode, sStopName)
|
||||
if mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local tr = mapNode.transform
|
||||
if tr == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.BuildBindPath(tr, sStopName or "DormPanel")
|
||||
end
|
||||
function DormGuideUI._EnsureTriggerEvents()
|
||||
if DormGuideUI._bTriggerEventBound then
|
||||
return
|
||||
end
|
||||
DormGuideUI._bTriggerEventBound = true
|
||||
EventManager.Add("OnEvent_DormLevelLoadComplete", DormGuideUI, DormGuideUI.OnEvent_DormLevelLoadComplete)
|
||||
EventManager.Add("DormRoomSelect_ChangeRoomResult", DormGuideUI, DormGuideUI.OnEvent_ChangeRoomResult)
|
||||
EventManager.Add("Guide_CloseDisposablePanel", DormGuideUI, DormGuideUI.OnEvent_CloseDisposablePanel)
|
||||
EventManager.Add("DormGuide_ModeApplied", DormGuideUI, DormGuideUI.OnEvent_ModeApplied)
|
||||
EventManager.Add("DORM_CS2LUA_BORN_TIMELINE_DONE", DormGuideUI, DormGuideUI.OnEvent_BornTimeline)
|
||||
end
|
||||
function DormGuideUI._RemoveTriggerEvents()
|
||||
if not DormGuideUI._bTriggerEventBound then
|
||||
return
|
||||
end
|
||||
DormGuideUI._bTriggerEventBound = false
|
||||
EventManager.Remove("OnEvent_DormLevelLoadComplete", DormGuideUI, DormGuideUI.OnEvent_DormLevelLoadComplete)
|
||||
EventManager.Remove("DormRoomSelect_ChangeRoomResult", DormGuideUI, DormGuideUI.OnEvent_ChangeRoomResult)
|
||||
EventManager.Remove("Guide_CloseDisposablePanel", DormGuideUI, DormGuideUI.OnEvent_CloseDisposablePanel)
|
||||
EventManager.Remove("DormGuide_ModeApplied", DormGuideUI, DormGuideUI.OnEvent_ModeApplied)
|
||||
EventManager.Remove("DORM_CS2LUA_BORN_TIMELINE_DONE", DormGuideUI, DormGuideUI.OnEvent_BornTimeline)
|
||||
end
|
||||
function DormGuideUI._EnsureInterceptEvents()
|
||||
if DormGuideUI._bInterceptEventBound then
|
||||
return
|
||||
end
|
||||
DormGuideUI._bInterceptEventBound = true
|
||||
EventManager.Add("DORM_CS_SET_FUR_HUD", DormGuideUI, DormGuideUI._ApplyExtraBtns)
|
||||
EventManager.Add("DORM_CS_SWITCH_FURNITURE", DormGuideUI, DormGuideUI._ApplyExtraBtns)
|
||||
end
|
||||
function DormGuideUI._RemoveInterceptEvents()
|
||||
if not DormGuideUI._bInterceptEventBound then
|
||||
return
|
||||
end
|
||||
DormGuideUI._bInterceptEventBound = false
|
||||
EventManager.Remove("DORM_CS_SET_FUR_HUD", DormGuideUI, DormGuideUI._ApplyExtraBtns)
|
||||
EventManager.Remove("DORM_CS_SWITCH_FURNITURE", DormGuideUI, DormGuideUI._ApplyExtraBtns)
|
||||
end
|
||||
function DormGuideUI._ApplyInterceptUI()
|
||||
if not DormGuideUI._bLockLeave then
|
||||
return
|
||||
end
|
||||
DormGuideUI._EnsureInterceptEvents()
|
||||
if DormGuideUI._bHideChrome then
|
||||
DormGuideUI._ApplyChrome(true)
|
||||
end
|
||||
DormGuideUI._ApplyInputCap()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
end
|
||||
function DormGuideUI._NeedGuide()
|
||||
if DormGuideUI._bLockLeave or DormGuideUI._bHideChrome then
|
||||
return true
|
||||
end
|
||||
local objGuide = PlayerData.Guide
|
||||
if objGuide ~= nil and objGuide.isProcessing then
|
||||
local nRunId = tonumber(objGuide.runGroupId)
|
||||
if nRunId ~= nil and DormGuideUI.GUIDE_GROUP_ID[nRunId] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
if EditorSettings ~= nil and EditorSettings.bJumpGuide then
|
||||
return false
|
||||
end
|
||||
if objGuide == nil then
|
||||
return false
|
||||
end
|
||||
for nId, _ in pairs(DormGuideUI.GUIDE_GROUP_ID) do
|
||||
local mapData = ConfigTable.GetData("GuideGroup", nId)
|
||||
if mapData ~= nil and mapData.IsActive and not objGuide:CheckGuideFinishById(nId) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
function DormGuideUI.Bind(objCtrl)
|
||||
DormGuideUI._objDormCtrl = objCtrl
|
||||
if not DormGuideUI._NeedGuide() then
|
||||
return
|
||||
end
|
||||
DormGuideUI._EnsureTriggerEvents()
|
||||
DormGuideUI._ApplyInterceptUI()
|
||||
end
|
||||
function DormGuideUI.Unbind(objCtrl)
|
||||
if DormGuideUI._objDormCtrl == nil then
|
||||
return
|
||||
end
|
||||
if objCtrl ~= nil and DormGuideUI._objDormCtrl ~= objCtrl then
|
||||
return
|
||||
end
|
||||
DormGuideUI._RemoveTriggerEvents()
|
||||
DormGuideUI._objDormCtrl = nil
|
||||
end
|
||||
function DormGuideUI.BindOverlay(sKey, objCtrl)
|
||||
if sKey == nil then
|
||||
return
|
||||
end
|
||||
DormGuideUI._mapOverlay[sKey] = objCtrl
|
||||
end
|
||||
function DormGuideUI.UnbindOverlay(sKey, objCtrl)
|
||||
if sKey == nil then
|
||||
return
|
||||
end
|
||||
if objCtrl ~= nil and DormGuideUI._mapOverlay[sKey] ~= objCtrl then
|
||||
return
|
||||
end
|
||||
DormGuideUI._mapOverlay[sKey] = nil
|
||||
end
|
||||
function DormGuideUI._GetOverlay(sKey)
|
||||
return DormGuideUI._mapOverlay[sKey]
|
||||
end
|
||||
function DormGuideUI.IsLeaveLocked()
|
||||
return DormGuideUI._bLockLeave == true
|
||||
end
|
||||
function DormGuideUI.IsExtraBtnLocked()
|
||||
return DormGuideUI._bLockLeave == true
|
||||
end
|
||||
function DormGuideUI.HideChrome(bKeepContact)
|
||||
DormGuideUI._bLockLeave = true
|
||||
DormGuideUI._bHideChrome = true
|
||||
DormGuideUI._bKeepContact = bKeepContact == true
|
||||
if DormGuideUI._nInputCap == 0 then
|
||||
DormGuideUI._nInputCap = DormGuideUI.DEFAULT_BLOCK
|
||||
end
|
||||
DormGuideUI._ApplyInterceptUI()
|
||||
end
|
||||
function DormGuideUI.ShowAll()
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
DormGuideUI._ApplyInputCap()
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
end
|
||||
function DormGuideUI.SetOwnerCap(sOwner, nMask)
|
||||
DormGuideUI._mapOwnerCap = DormGuideUI._mapOwnerCap or {}
|
||||
if nMask == nil then
|
||||
DormGuideUI._mapOwnerCap[sOwner] = nil
|
||||
else
|
||||
DormGuideUI._mapOwnerCap[sOwner] = nMask
|
||||
end
|
||||
local nCap = 0
|
||||
for _, nOne in pairs(DormGuideUI._mapOwnerCap) do
|
||||
nCap = nCap | nOne
|
||||
end
|
||||
DormGuideUI._nInputCap = nCap
|
||||
DormGuideUI._ApplyInputCap()
|
||||
end
|
||||
function DormGuideUI.SetInputCap(nMask)
|
||||
DormGuideUI.SetOwnerCap("guide", nMask or 0)
|
||||
end
|
||||
function DormGuideUI.SetQuestLock(bLock)
|
||||
DormGuideUI._bQuestLock = bLock == true
|
||||
local objQuest = DormGuideUI._GetOverlay("quest")
|
||||
if objQuest ~= nil and type(objQuest.SetGuideOperateLock) == "function" then
|
||||
objQuest:SetGuideOperateLock(DormGuideUI._bQuestLock)
|
||||
end
|
||||
end
|
||||
function DormGuideUI.Clear()
|
||||
DormGuideUI._bLockLeave = false
|
||||
DormGuideUI._bHideChrome = false
|
||||
DormGuideUI._bKeepContact = false
|
||||
DormGuideUI._mapShowExcept = nil
|
||||
DormGuideUI.SetOwnerCap("guide", nil)
|
||||
DormGuideUI.SetQuestLock(false)
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
if not DormGuideAdapter.InContact() then
|
||||
DormGuideUI._ApplyChrome(false)
|
||||
end
|
||||
DormGuideUI._ApplyExtraBtns()
|
||||
DormGuideUI._ApplyLeaveBtns()
|
||||
DormGuideUI._RemoveInterceptEvents()
|
||||
end
|
||||
function DormGuideUI._CancelRoom2Timer()
|
||||
if DormGuideUI._nRoom2Timer ~= nil then
|
||||
TimerManager.Remove(DormGuideUI._nRoom2Timer)
|
||||
DormGuideUI._nRoom2Timer = nil
|
||||
end
|
||||
end
|
||||
function DormGuideUI.TryBroadcastEnter()
|
||||
if NovaAPI.GetCurrentModuleName() ~= "DormModuleScene" then
|
||||
return
|
||||
end
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._panel == nil then
|
||||
return
|
||||
end
|
||||
local nMode = objCtrl._panel.nCurMode
|
||||
if nMode == 2 or nMode == 3 then
|
||||
return
|
||||
end
|
||||
if PanelManager.CheckPanelOpen(PanelId.DormQuestPanel) then
|
||||
return
|
||||
end
|
||||
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_DormEnter")
|
||||
end
|
||||
function DormGuideUI._TryBroadcastRoom2()
|
||||
if not DormGuideUI._bPendingRoom2Guide then
|
||||
return
|
||||
end
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._panel == nil or objCtrl._panel.nCurRoom ~= DormGuideUI.ROOM2_ID then
|
||||
return
|
||||
end
|
||||
DormGuideUI._bPendingRoom2Guide = false
|
||||
DormGuideUI._CancelRoom2Timer()
|
||||
DormGuideUI._nRoom2Timer = TimerManager.Add(1, DormGuideUI.ROOM2_ENTER_DELAY, DormGuideUI, function()
|
||||
DormGuideUI._nRoom2Timer = nil
|
||||
EventManager.Hit("Guide_PassiveCheck_Msg", "Guide_DormEnterRoom2")
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormGuideUI.OnEvent_DormLevelLoadComplete()
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
DormGuideAdapter.MarkDormLoad()
|
||||
DormGuideUI.TryBroadcastEnter()
|
||||
end
|
||||
function DormGuideUI.OnEvent_ModeApplied()
|
||||
DormGuideUI._ApplyInputCap()
|
||||
end
|
||||
function DormGuideUI.OnEvent_BornTimeline(_, bSuccess)
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
DormGuideAdapter.MarkTimeline(bSuccess)
|
||||
end
|
||||
function DormGuideUI.OnEvent_ChangeRoomResult(_, bConfirm, nRoomId)
|
||||
if bConfirm and nRoomId == DormGuideUI.ROOM2_ID then
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
DormGuideAdapter.NotePassive("Guide_DormEnterRoom2")
|
||||
end
|
||||
end
|
||||
function DormGuideUI.OnEvent_CloseDisposablePanel(_, nPanelId)
|
||||
if nPanelId ~= PanelId.DormQuestPanel then
|
||||
return
|
||||
end
|
||||
if DormGuideUI._objEnterTimer ~= nil then
|
||||
TimerManager.Remove(DormGuideUI._objEnterTimer)
|
||||
DormGuideUI._objEnterTimer = nil
|
||||
end
|
||||
DormGuideUI._objEnterTimer = TimerManager.Add(1, 0, DormGuideUI, function(_, timer)
|
||||
if timer ~= nil then
|
||||
timer:Cancel(false)
|
||||
end
|
||||
DormGuideUI._objEnterTimer = nil
|
||||
DormGuideUI.TryBroadcastEnter()
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
function DormGuideUI._GetInteractiveNode()
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local objInteractive = objCtrl._mapNode.rtInteractiveRoot
|
||||
if objInteractive == nil or objInteractive._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
return objInteractive
|
||||
end
|
||||
function DormGuideUI._GetEditorNode()
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local objEditor = objCtrl._mapNode.rtEditorRoot
|
||||
if objEditor == nil or objEditor._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
return objEditor
|
||||
end
|
||||
local SetNodeActive = function(node, bOn)
|
||||
if node == nil then
|
||||
return
|
||||
end
|
||||
local go = node.gameObject
|
||||
if go ~= nil then
|
||||
go:SetActive(bOn)
|
||||
end
|
||||
end
|
||||
function DormGuideUI._GetCharSelectCtrl()
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
return objCtrl._mapNode.CharListRoot
|
||||
end
|
||||
function DormGuideUI.PrepareCharSelect(nCharId)
|
||||
local objSelect = DormGuideUI._GetCharSelectCtrl()
|
||||
if objSelect == nil or not objSelect.bOpen then
|
||||
return false
|
||||
end
|
||||
PlayerData.Filter:Reset({
|
||||
AllEnum.ChooseOption.Char_Element,
|
||||
AllEnum.ChooseOption.Char_Rarity,
|
||||
AllEnum.ChooseOption.Char_PowerStyle,
|
||||
AllEnum.ChooseOption.Char_TacticalStyle,
|
||||
AllEnum.ChooseOption.Char_AffiliatedForces
|
||||
})
|
||||
objSelect.tbFilterCfg = {}
|
||||
objSelect.bInFavorite = false
|
||||
if type(objSelect.RefreshFavoriteTopState) == "function" then
|
||||
objSelect:RefreshFavoriteTopState()
|
||||
end
|
||||
objSelect:Refresh()
|
||||
EventManager.Hit("Guide_PositionCharPos", nCharId)
|
||||
return true
|
||||
end
|
||||
function DormGuideUI.IsCharSelected(nCharId)
|
||||
local objSelect = DormGuideUI._GetCharSelectCtrl()
|
||||
if objSelect == nil or objSelect.curChar == nil then
|
||||
return false
|
||||
end
|
||||
return table.indexof(objSelect.curChar, nCharId) > 0
|
||||
end
|
||||
function DormGuideUI.GetCharGridBindIcon(nCharId)
|
||||
local objSelect = DormGuideUI._GetCharSelectCtrl()
|
||||
if objSelect == nil or objSelect.mapGridCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
for _, mapCtrl in pairs(objSelect.mapGridCtrl) do
|
||||
if mapCtrl.nCharId == nCharId and mapCtrl._mapNode ~= nil and mapCtrl._mapNode.btnGrid ~= nil then
|
||||
return DormGuideUI.BuildBindPath(mapCtrl._mapNode.btnGrid.transform, "DormPanel")
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function DormGuideUI.GetCharSelectConfirmBindIcon()
|
||||
local objSelect = DormGuideUI._GetCharSelectCtrl()
|
||||
if objSelect == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.GetNodeBindPath(objSelect._mapNode.btnConfirm, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.GetInteractiveBtnPath(sNodeName)
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.GetNodeBindPath(objInteractive._mapNode[sNodeName], "DormPanel")
|
||||
end
|
||||
function DormGuideUI._GetFurnitureCtrl(nFurnitureId)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or objEditor.mapFurnitureCtrl == nil then
|
||||
return nil, nil
|
||||
end
|
||||
for _, mapCtrl in pairs(objEditor.mapFurnitureCtrl) do
|
||||
if mapCtrl.nFurnitureId == nFurnitureId and mapCtrl.gameObject ~= nil then
|
||||
return objEditor, mapCtrl
|
||||
end
|
||||
end
|
||||
return objEditor, nil
|
||||
end
|
||||
function DormGuideUI.GetFurnitureListIndex(nFurnitureId)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or objEditor.nCurMainTab == 3 or objEditor.mapFurnitureType == nil then
|
||||
return nil
|
||||
end
|
||||
local nCurTabIdx = objEditor.nCurMainTab == 1 and objEditor.tbFurTab1[objEditor.nCurFurniturTab1] or objEditor.tbFurTab2[objEditor.nCurFurniturTab2]
|
||||
local tbCurTab = objEditor.mapFurnitureType[nCurTabIdx]
|
||||
if tbCurTab == nil then
|
||||
return nil
|
||||
end
|
||||
local nIdx = table.indexof(tbCurTab, nFurnitureId)
|
||||
if nIdx == nil or nIdx <= 0 then
|
||||
return nil
|
||||
end
|
||||
return nIdx
|
||||
end
|
||||
function DormGuideUI.PositionFurniture(nFurnitureId)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or objEditor._mapNode == nil or objEditor._mapNode.svFurniture == nil then
|
||||
return false
|
||||
end
|
||||
local nIdx = DormGuideUI.GetFurnitureListIndex(nFurnitureId)
|
||||
if nIdx == nil then
|
||||
return false
|
||||
end
|
||||
objEditor._mapNode.svFurniture:SetScrollGridPos(nIdx - 1, 0, 0)
|
||||
return true
|
||||
end
|
||||
function DormGuideUI.ClickFurniture(nFurnitureId)
|
||||
local objEditor, mapCtrl = DormGuideUI._GetFurnitureCtrl(nFurnitureId)
|
||||
local nIdx = DormGuideUI.GetFurnitureListIndex(nFurnitureId)
|
||||
if objEditor == nil or mapCtrl == nil or nIdx == nil then
|
||||
return false
|
||||
end
|
||||
objEditor:OnFurnitureBtnClickGrid(mapCtrl.gameObject, nIdx - 1)
|
||||
return true
|
||||
end
|
||||
function DormGuideUI.GetFurnitureBindIcon(nFurnitureId)
|
||||
local _, mapCtrl = DormGuideUI._GetFurnitureCtrl(nFurnitureId)
|
||||
if mapCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
local tr
|
||||
if mapCtrl._mapNode ~= nil and mapCtrl._mapNode.rtContent ~= nil then
|
||||
tr = mapCtrl._mapNode.rtContent.transform
|
||||
elseif mapCtrl.gameObject ~= nil then
|
||||
tr = mapCtrl.gameObject.transform
|
||||
end
|
||||
if tr == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.BuildBindPath(tr, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.GetSaveBindIcon()
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.GetNodeBindPath(objEditor._mapNode.btnSaveRoom, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.GetHudConfirmBindIcon()
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or objEditor._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local node = objEditor._mapNode.btnHudCancel or objEditor._mapNode.btnHudConfirm
|
||||
return DormGuideUI.GetNodeBindPath(node, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.ClickHudConfirm()
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or type(objEditor.OnBtnClick_ExitEditor) ~= "function" then
|
||||
return false
|
||||
end
|
||||
objEditor:OnBtnClick_ExitEditor()
|
||||
return true
|
||||
end
|
||||
function DormGuideUI.GetRewardHudBindIcon(nFurId)
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil or objInteractive.mapHudCtrls == nil then
|
||||
return nil
|
||||
end
|
||||
for _, mapCtrl in pairs(objInteractive.mapHudCtrls) do
|
||||
if mapCtrl.nFurId == nFurId and mapCtrl._mapNode ~= nil and mapCtrl._mapNode.btnFurnitureIcon ~= nil then
|
||||
return DormGuideUI.BuildBindPath(mapCtrl._mapNode.btnFurnitureIcon.transform, "DormPanel")
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function DormGuideUI.IsTargetCharInteractive(nRoleId)
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil or objInteractive._mapNode == nil or objInteractive._mapNode.rtContact == nil then
|
||||
return false
|
||||
end
|
||||
local mapInfo = objInteractive._mapNode.rtContact.mapCurCharInfo
|
||||
if mapInfo == nil then
|
||||
return false
|
||||
end
|
||||
return tonumber(mapInfo.nDataId) == nRoleId
|
||||
end
|
||||
function DormGuideUI.GetCharCaressBindIcon(nRoleId)
|
||||
if not DormGuideUI.IsTargetCharInteractive(nRoleId) then
|
||||
return nil
|
||||
end
|
||||
local objContact = DormGuideUI._GetInteractiveNode()._mapNode.rtContact
|
||||
if objContact._mapNode == nil or objContact._mapNode.btnInteractive1 == nil then
|
||||
return nil
|
||||
end
|
||||
return DormGuideUI.GetNodeBindPath(objContact._mapNode.btnInteractive1, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.ClickCharCaress()
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil or objInteractive._mapNode == nil or objInteractive._mapNode.rtContact == nil then
|
||||
return false
|
||||
end
|
||||
local objContact = objInteractive._mapNode.rtContact
|
||||
if type(objContact.OnBtnClick_Interactive1) ~= "function" then
|
||||
return false
|
||||
end
|
||||
objContact:OnBtnClick_Interactive1()
|
||||
return true
|
||||
end
|
||||
function DormGuideUI.GetCharTalkBindIcon(nRoleId)
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil or objInteractive._mapNode.rtContact == nil then
|
||||
return nil
|
||||
end
|
||||
local objContact = objInteractive._mapNode.rtContact
|
||||
if objContact.mapListBtn == nil then
|
||||
return nil
|
||||
end
|
||||
for _, mapBtn in pairs(objContact.mapListBtn) do
|
||||
if mapBtn.nDataId == nRoleId and mapBtn.nType ~= 1 and mapBtn.goItem ~= nil then
|
||||
local tr = mapBtn.goItem.transform
|
||||
if tr ~= nil then
|
||||
return DormGuideUI.BuildBindPath(tr, "DormPanel")
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function DormGuideUI.GetReceiveBindIcon(nQuestId)
|
||||
local objInst = DormGuideUI._GetOverlay("quest")
|
||||
if objInst == nil or objInst._mapCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
for _, objCtrl in pairs(objInst._mapCtrl) do
|
||||
if objCtrl.mapDormQuest ~= nil and objCtrl.mapDormQuest.nTid == nQuestId and objCtrl._mapNode ~= nil and objCtrl._mapNode.btnReceive ~= nil then
|
||||
return DormGuideUI.BuildBindPath(objCtrl._mapNode.btnReceive.transform, "DormQuestPanel")
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function DormGuideUI.HasRoom(nRoomId)
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl ~= nil and objCtrl._panel ~= nil and objCtrl._panel.mapDormRoomInfo ~= nil then
|
||||
return objCtrl._panel.mapDormRoomInfo[nRoomId] ~= nil
|
||||
end
|
||||
local mapInfo = PlayerData.PlayerDormData.mapDormRoomInfo
|
||||
return mapInfo ~= nil and mapInfo[nRoomId] ~= nil
|
||||
end
|
||||
function DormGuideUI.GetRoomGoBindIcon(nRoomId)
|
||||
local objInst = DormGuideUI._GetOverlay("roomSelect")
|
||||
if objInst == nil or objInst.mapGridCtrl == nil then
|
||||
return nil
|
||||
end
|
||||
for _, objCtrl in pairs(objInst.mapGridCtrl) do
|
||||
if objCtrl.nRoomId == nRoomId and objCtrl._mapNode ~= nil and objCtrl._mapNode.btnGo ~= nil and objCtrl._mapNode.btnGo.gameObject.activeInHierarchy then
|
||||
return DormGuideUI.BuildBindPath(objCtrl._mapNode.btnGo.transform, "DormRoomSelectPanel")
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
function DormGuideUI.IsObserveMode()
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil then
|
||||
return false
|
||||
end
|
||||
return objInteractive.nCurState == 1
|
||||
end
|
||||
function DormGuideUI.GetFurnitureCount(nFurnitureId)
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._panel == nil then
|
||||
return 0
|
||||
end
|
||||
if type(objCtrl._panel.GetFurnitureCount) ~= "function" then
|
||||
return 0
|
||||
end
|
||||
return objCtrl._panel:GetFurnitureCount(nFurnitureId) or 0
|
||||
end
|
||||
function DormGuideUI.GetEditorBtnPath(sNodeName, nIdx)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or objEditor._mapNode == nil then
|
||||
return nil
|
||||
end
|
||||
local node = objEditor._mapNode[sNodeName]
|
||||
if node == nil then
|
||||
return nil
|
||||
end
|
||||
if nIdx ~= nil then
|
||||
node = node[nIdx]
|
||||
end
|
||||
return DormGuideUI.GetNodeBindPath(node, "DormPanel")
|
||||
end
|
||||
function DormGuideUI.ResolveFurnitureTab(nFurnitureId)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil then
|
||||
return nil, nil
|
||||
end
|
||||
local nMainTab = 1
|
||||
local nSubIdx = 1
|
||||
local mapCfg = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
local nType = mapCfg ~= nil and mapCfg.Tab or nil
|
||||
local FindIn = function(tb)
|
||||
if tb == nil or nType == nil then
|
||||
return nil
|
||||
end
|
||||
for i, nTab in ipairs(tb) do
|
||||
if nTab == nType then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
local nIdx = FindIn(objEditor.tbFurTab1)
|
||||
if nIdx ~= nil then
|
||||
return 1, nIdx
|
||||
end
|
||||
nIdx = FindIn(objEditor.tbFurTab2)
|
||||
if nIdx ~= nil then
|
||||
return 2, nIdx
|
||||
end
|
||||
return nMainTab, nSubIdx
|
||||
end
|
||||
function DormGuideUI.EnsureFurnitureTab(nFurnitureId)
|
||||
local nMainTab, nSubIdx = DormGuideUI.ResolveFurnitureTab(nFurnitureId)
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor == nil or nMainTab == nil then
|
||||
return false
|
||||
end
|
||||
if objEditor.nCurMainTab ~= nMainTab then
|
||||
objEditor:OnBtnClick_MainTabTog(nil, nMainTab)
|
||||
end
|
||||
if nMainTab == 1 and objEditor.nCurFurniturTab1 ~= nSubIdx then
|
||||
objEditor:OnBtnClick_FurnitureTabTog(nil, nSubIdx)
|
||||
elseif nMainTab == 2 and objEditor.nCurFurniturTab2 ~= nSubIdx then
|
||||
objEditor:OnBtnClick_FurnitureTabTog(nil, nSubIdx)
|
||||
end
|
||||
return true
|
||||
end
|
||||
function DormGuideUI._ApplyChrome(bHide)
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil then
|
||||
return
|
||||
end
|
||||
local mapNode = objInteractive._mapNode
|
||||
if mapNode.rtListHideRoot ~= nil then
|
||||
mapNode.rtListHideRoot:SetActive(true)
|
||||
end
|
||||
if mapNode.rtInteractiveHide ~= nil then
|
||||
mapNode.rtInteractiveHide:SetActive(not bHide)
|
||||
end
|
||||
if bHide then
|
||||
SetNodeActive(mapNode.rtQuest, false)
|
||||
local bGiftExcept = DormGuideUI._mapShowExcept ~= nil and DormGuideUI._mapShowExcept.rtGiftHint == true
|
||||
local bGiftOn = false
|
||||
if bGiftExcept and objInteractive._panel ~= nil and type(objInteractive._panel.GetDormRewardId) == "function" then
|
||||
local tbRewardIds = objInteractive._panel:GetDormRewardId()
|
||||
bGiftOn = tbRewardIds ~= nil and 0 < #tbRewardIds
|
||||
end
|
||||
SetNodeActive(mapNode.rtGiftHint, bGiftOn)
|
||||
SetNodeActive(mapNode.rtGiftNumHint, bGiftOn)
|
||||
SetNodeActive(mapNode.rtDormName, false)
|
||||
if mapNode.rtContact ~= nil then
|
||||
mapNode.rtContact.gameObject:SetActive(DormGuideUI._bKeepContact == true)
|
||||
end
|
||||
else
|
||||
if type(objInteractive.SetQuestInfo) == "function" then
|
||||
objInteractive:SetQuestInfo()
|
||||
end
|
||||
local bGiftExcept = DormGuideUI._mapShowExcept ~= nil and DormGuideUI._mapShowExcept.rtGiftHint == true
|
||||
local bGiftOn = false
|
||||
if (not DormGuideUI._bLockLeave or bGiftExcept) and objInteractive._panel ~= nil and type(objInteractive._panel.GetDormRewardId) == "function" then
|
||||
local tbRewardIds = objInteractive._panel:GetDormRewardId()
|
||||
bGiftOn = tbRewardIds ~= nil and 0 < #tbRewardIds
|
||||
end
|
||||
SetNodeActive(mapNode.rtGiftHint, bGiftOn)
|
||||
SetNodeActive(mapNode.rtGiftNumHint, bGiftOn)
|
||||
SetNodeActive(mapNode.rtDormName, not DormGuideUI._bLockLeave)
|
||||
if mapNode.rtContact ~= nil then
|
||||
mapNode.rtContact.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormGuideUI._ApplyInputCap()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {
|
||||
DormGuideUI._nInputCap
|
||||
})
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive == nil then
|
||||
return
|
||||
end
|
||||
local goJoystick = objInteractive._mapNode.goJoystick
|
||||
if goJoystick == nil then
|
||||
return
|
||||
end
|
||||
local bMoveBlocked = DormGuideUI._nInputCap & nMoveBit ~= 0
|
||||
if DormGuideUI._bHideChrome then
|
||||
goJoystick:SetActive(not bMoveBlocked)
|
||||
else
|
||||
goJoystick:SetActive(true)
|
||||
end
|
||||
end
|
||||
function DormGuideUI._ApplyExtraBtns()
|
||||
local bShow = not DormGuideUI.IsExtraBtnLocked()
|
||||
local objInteractive = DormGuideUI._GetInteractiveNode()
|
||||
if objInteractive ~= nil then
|
||||
local mapNode = objInteractive._mapNode
|
||||
SetNodeActive(mapNode.btnHideUI, bShow)
|
||||
SetNodeActive(mapNode.btnInteractive, bShow)
|
||||
end
|
||||
local objEditor = DormGuideUI._GetEditorNode()
|
||||
if objEditor ~= nil then
|
||||
local mapNode = objEditor._mapNode
|
||||
SetNodeActive(mapNode.btnHudRotation, bShow)
|
||||
SetNodeActive(mapNode.btnHudDelete, bShow)
|
||||
end
|
||||
end
|
||||
function DormGuideUI._ApplyLeaveBtns()
|
||||
local objCtrl = DormGuideUI._objDormCtrl
|
||||
if objCtrl == nil or objCtrl._mapNode == nil then
|
||||
return
|
||||
end
|
||||
local bOn = not DormGuideUI.IsLeaveLocked()
|
||||
local btnBack = objCtrl._mapNode.btnBackMain
|
||||
if btnBack ~= nil then
|
||||
btnBack.interactable = bOn
|
||||
if btnBack.gameObject ~= nil then
|
||||
btnBack.gameObject:SetActive(bOn)
|
||||
end
|
||||
end
|
||||
local btnHome = objCtrl._mapNode.btnHomeMain
|
||||
if btnHome ~= nil then
|
||||
btnHome.interactable = bOn
|
||||
if btnHome.gameObject ~= nil then
|
||||
btnHome.gameObject:SetActive(bOn)
|
||||
end
|
||||
end
|
||||
end
|
||||
return DormGuideUI
|
||||
@@ -0,0 +1,89 @@
|
||||
local DormHandbookAchievementGridCtrl = class("DormHandbookAchievementGridCtrl", BaseCtrl)
|
||||
local nTotalLength = 411
|
||||
local ntotalHeight = 37
|
||||
DormHandbookAchievementGridCtrl._mapNodeConfig = {
|
||||
imgSelect = {},
|
||||
imgIcon = {sNodeName = "imgIconCup", sComponentName = "Image"},
|
||||
TMPTitle = {sComponentName = "TMP_Text"},
|
||||
TMPDesc = {sComponentName = "TMP_Text"},
|
||||
TMPDate = {sComponentName = "TMP_Text"},
|
||||
txtProgress = {sComponentName = "TMP_Text"},
|
||||
rtProgressFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
Item = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl",
|
||||
nCount = 3
|
||||
},
|
||||
btnItem = {
|
||||
sNodeName = "btnItem",
|
||||
sComponentName = "UIButton",
|
||||
nCount = 3,
|
||||
callback = "OnBtnClick_Item"
|
||||
},
|
||||
goRed = {}
|
||||
}
|
||||
DormHandbookAchievementGridCtrl._mapEventConfig = {}
|
||||
DormHandbookAchievementGridCtrl._mapRedDotConfig = {}
|
||||
function DormHandbookAchievementGridCtrl:Awake()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:FadeIn()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:FadeOut()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:OnEnable()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:OnDisable()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:OnRelease()
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:Refresh(nAchievementId, bReceived, nTotal)
|
||||
local mapAchievementCfgData = ConfigTable.GetData("DormAchievement", nAchievementId)
|
||||
if mapAchievementCfgData == nil then
|
||||
self.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self.mapAchievementCfg = mapAchievementCfgData
|
||||
local nTime = PlayerData.PlayerDormData:GetDormAchievementCompleteTime(nAchievementId)
|
||||
if 0 < nTime then
|
||||
self._mapNode.TMPDate.gameObject:SetActive(true)
|
||||
local sTime = os.date("%Y/%m/%d", nTime)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDate, sTime)
|
||||
else
|
||||
self._mapNode.TMPDate.gameObject:SetActive(false)
|
||||
end
|
||||
self.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTitle, mapAchievementCfgData.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDesc, mapAchievementCfgData.Desc)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapAchievementCfgData.Icon)
|
||||
local nGoal = mapAchievementCfgData.CompleteParams[1]
|
||||
if nGoal == nil then
|
||||
nGoal = 1
|
||||
end
|
||||
local nShowCur = nTotal >= nGoal and nGoal or nTotal
|
||||
if bReceived then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, ConfigTable.GetUIText("Quest_Complete"))
|
||||
self._mapNode.rtProgressFill.sizeDelta = Vector2(nTotalLength, ntotalHeight)
|
||||
else
|
||||
self._mapNode.rtProgressFill.sizeDelta = Vector2(nShowCur / nGoal * nTotalLength, ntotalHeight)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%d/%d", nShowCur, nGoal))
|
||||
end
|
||||
self.bCanReceive = nTotal >= nGoal and not bReceived
|
||||
self._mapNode.imgSelect:SetActive(self.bCanReceive)
|
||||
self._mapNode.goRed:SetActive(self.bCanReceive)
|
||||
for i = 1, 3 do
|
||||
local nTid = mapAchievementCfgData["Tid" .. i]
|
||||
local nQty = mapAchievementCfgData["Qty" .. i]
|
||||
self._mapNode.Item[i].gameObject:SetActive(nTid ~= nil and 0 < nTid)
|
||||
if nTid ~= nil and 0 < nTid then
|
||||
self._mapNode.Item[i]:SetItem(nTid, nil, nQty, nil, bReceived)
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormHandbookAchievementGridCtrl:OnBtnClick_Item(btn, nIdx)
|
||||
local nTid = self.mapAchievementCfg["Tid" .. nIdx]
|
||||
UTILS.ClickItemGridWithTips(nTid, self._mapNode.Item[nIdx].gameObject, true, false, false)
|
||||
end
|
||||
return DormHandbookAchievementGridCtrl
|
||||
@@ -0,0 +1,324 @@
|
||||
local DormHandbookCtrl = class("DormHandbookCtrl", BaseCtrl)
|
||||
DormHandbookCtrl._mapNodeConfig = {
|
||||
svAchievement = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
svPreset = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
svFurniture = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtBar = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtQuest = {sComponentName = "Animator"},
|
||||
listTog = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateToggleCtrl",
|
||||
nCount = 3
|
||||
},
|
||||
btnToggle = {
|
||||
sNodeName = "listTog",
|
||||
nCount = 3,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Toggle"
|
||||
},
|
||||
rtFurniture = {},
|
||||
rtPreset = {
|
||||
sNodeName = "rtPresetList"
|
||||
},
|
||||
rtAchievement = {},
|
||||
txtChapter = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_HandBook_Title"
|
||||
},
|
||||
btnCloseQuest = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
goHonorTitle = {
|
||||
sCtrlName = "Game.UI.FriendEx.HonorTitleCtrl"
|
||||
},
|
||||
imgHead = {sComponentName = "Image"},
|
||||
txtChrDeatil = {sComponentName = "TMP_Text"},
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
goRedAchievement = {},
|
||||
goRedFurniture = {}
|
||||
}
|
||||
DormHandbookCtrl._mapEventConfig = {}
|
||||
DormHandbookCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.DormRecord_Achievement] = {
|
||||
sNodeName = "goRedAchievement"
|
||||
},
|
||||
[RedDotDefine.DormRecord_Furniture] = {
|
||||
sNodeName = "goRedFurniture"
|
||||
}
|
||||
}
|
||||
function DormHandbookCtrl:Awake()
|
||||
self._mapCtrlAchievement = {}
|
||||
self._mapCtrlPreset = {}
|
||||
self._mapCtrlFurniture = {}
|
||||
self._mapCtrlFurnitureToggle = {}
|
||||
end
|
||||
function DormHandbookCtrl:FadeIn()
|
||||
end
|
||||
function DormHandbookCtrl:FadeOut()
|
||||
end
|
||||
function DormHandbookCtrl:OnEnable()
|
||||
local wait = function()
|
||||
self._mapNode.rtQuest.gameObject:SetActive(false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.UIEffectSnapShotCapture(self._mapNode.snapshot.gameObject)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.rtQuest.gameObject:SetActive(true)
|
||||
self._mapNode.rtQuest:Play("HandBookrtQuest_in")
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
local tbParam = self:GetPanelParam()
|
||||
self._panel.nCurRoom = tbParam[1]
|
||||
local bHasAchievement = RedDotManager.GetValid(RedDotDefine.DormRecord_Achievement)
|
||||
local bHasFurniture = RedDotManager.GetValid(RedDotDefine.DormRecord_Furniture)
|
||||
self.nCurTog = bHasAchievement and 1 or bHasFurniture and 2 or 1
|
||||
self.nFurnitureTog = 1
|
||||
self._mapNode.listTog[1]:SetText(ConfigTable.GetUIText("Dorm_HandBook_Tog1"))
|
||||
self._mapNode.listTog[2]:SetText(ConfigTable.GetUIText("Dorm_HandBook_Tog2"))
|
||||
self._mapNode.listTog[3]:SetText(ConfigTable.GetUIText("Dorm_HandBook_Tog3"))
|
||||
self._mapNode.listTog[1]:SetDefaultDorm(self.nCurTog == 1)
|
||||
self._mapNode.listTog[2]:SetDefaultDorm(self.nCurTog == 2)
|
||||
self._mapNode.listTog[3]:SetDefaultDorm(self.nCurTog == 3)
|
||||
self._mapNode.rtAchievement:SetActive(self.nCurTog == 1)
|
||||
self._mapNode.rtPreset:SetActive(self.nCurTog == 2)
|
||||
self._mapNode.rtFurniture:SetActive(self.nCurTog == 3)
|
||||
self.tbAchievement = {}
|
||||
self.mapAchievementState = {}
|
||||
local receivedIds, nTotalCollection = PlayerData.PlayerDormData:GetDormAchievementData()
|
||||
self.tbreceivedAchievementIds = receivedIds
|
||||
self.nTotalCollection = nTotalCollection
|
||||
local GetAchievementState = function(mapData)
|
||||
local bReceived = table.indexof(self.tbreceivedAchievementIds, mapData.Id) > 0
|
||||
if bReceived then
|
||||
return 0
|
||||
end
|
||||
local nGoal = mapData.CompleteParams[1]
|
||||
if nGoal == nil then
|
||||
nGoal = 1
|
||||
end
|
||||
if nGoal <= self.nTotalCollection then
|
||||
return 2
|
||||
else
|
||||
return 1
|
||||
end
|
||||
end
|
||||
local foreachTableAchievement = function(mapData)
|
||||
local nState = GetAchievementState(mapData)
|
||||
self.mapAchievementState[mapData.Id] = nState
|
||||
table.insert(self.tbAchievement, mapData.Id)
|
||||
end
|
||||
local sortAchievement = function(a, b)
|
||||
return a < b
|
||||
end
|
||||
ForEachTableLine(DataTable.DormAchievement, foreachTableAchievement)
|
||||
table.sort(self.tbAchievement, sortAchievement)
|
||||
self.mapFurniture = {}
|
||||
local foreachTableFurniture = function(mapData)
|
||||
if mapData.NotShow < 1 then
|
||||
if self.mapFurniture[mapData.Tab] == nil then
|
||||
self.mapFurniture[mapData.Tab] = {}
|
||||
end
|
||||
table.insert(self.mapFurniture[mapData.Tab], mapData.Id)
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.DormFurniture, foreachTableFurniture)
|
||||
for _, tbItem in pairs(self.mapFurniture) do
|
||||
local sort = function(a, b)
|
||||
local mapCfgA = ConfigTable.GetData("DormFurniture", a)
|
||||
local mapCfgB = ConfigTable.GetData("DormFurniture", b)
|
||||
if mapCfgA.CollectionValue ~= mapCfgB.CollectionValue then
|
||||
return mapCfgA.CollectionValue > mapCfgB.CollectionValue
|
||||
end
|
||||
return a < b
|
||||
end
|
||||
table.sort(tbItem, sort)
|
||||
end
|
||||
self.tbSuit = {}
|
||||
local foreachTableSuit = function(mapData)
|
||||
if not mapData.noShow then
|
||||
table.insert(self.tbSuit, mapData.Id)
|
||||
end
|
||||
end
|
||||
table.sort(self.tbSuit)
|
||||
ForEachTableLine(DataTable.DormLayoutReward, foreachTableSuit)
|
||||
self.mapBag = {}
|
||||
local GetBagInfoCallback = function(mapBag)
|
||||
self.mapBag = mapBag
|
||||
local nAchievementIdx = 0
|
||||
for idx, nId in ipairs(self.tbAchievement) do
|
||||
local nState = self.mapAchievementState[nId] or 0
|
||||
if nState == 2 then
|
||||
nAchievementIdx = idx
|
||||
break
|
||||
end
|
||||
end
|
||||
self._mapNode.svAchievement:Init(#self.tbAchievement, self, self.OnAchievementGridRefresh, self.OnAchievementGridClick)
|
||||
self._mapNode.svAchievement:SetScrollGridPos(nAchievementIdx - 1)
|
||||
self._mapNode.svPreset:Init(#self.tbSuit, self, self.OnSuitGridRefresh, self.OnSuitGridClick)
|
||||
self._mapNode.rtBar:Init(8, self, self.OnFurnitureTogGridRefresh, self.OnFurnitureTogGridClick)
|
||||
local curTab = self.mapFurniture[self.nFurnitureTog] == nil and {} or self.mapFurniture[self.nFurnitureTog]
|
||||
if #curTab == 0 then
|
||||
self._mapNode.svFurniture.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.svFurniture.gameObject:SetActive(true)
|
||||
self._mapNode.svFurniture:Init(#curTab, self, self.OnFurnitureGridRefresh, self.OnFurnitureGridClick)
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:GetBagInfo(GetBagInfoCallback)
|
||||
local nHeadId = PlayerData.Base:GetPlayerHeadId()
|
||||
local mapCfg = ConfigTable.GetData("PlayerHead", nHeadId)
|
||||
if mapCfg then
|
||||
self:SetPngSprite(self._mapNode.imgHead, mapCfg.Icon)
|
||||
end
|
||||
local nLevel = PlayerData.PlayerDormData:GetHonorTitleLevel()
|
||||
self._mapNode.goHonorTitle:SetHonotTitle(140001, true, nLevel)
|
||||
local sName = PlayerData.Base:GetPlayerNickName()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtChrDeatil, sName)
|
||||
end
|
||||
function DormHandbookCtrl:OnDisable()
|
||||
for goGrid, mapCtrl in pairs(self._mapCtrlAchievement) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self._mapCtrlAchievement = {}
|
||||
for goGrid, mapCtrl in pairs(self._mapCtrlPreset) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self._mapCtrlPreset = {}
|
||||
for goGrid, mapCtrl in pairs(self._mapCtrlFurniture) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self._mapCtrlFurniture = {}
|
||||
for goGrid, mapCtrl in pairs(self._mapCtrlFurnitureToggle) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self._mapCtrlFurnitureToggle = {}
|
||||
end
|
||||
function DormHandbookCtrl:OnDestroy()
|
||||
end
|
||||
function DormHandbookCtrl:OnRelease()
|
||||
end
|
||||
function DormHandbookCtrl:OnAchievementGridRefresh(goGrid, nIdx)
|
||||
if self._mapCtrlAchievement[goGrid] == nil then
|
||||
self._mapCtrlAchievement[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormHandBook.DormHandbookAchievementGridCtrl")
|
||||
end
|
||||
nIdx = nIdx + 1
|
||||
local nAchievementId = self.tbAchievement[nIdx]
|
||||
local bReceived = table.indexof(self.tbreceivedAchievementIds, nAchievementId) > 0
|
||||
self._mapCtrlAchievement[goGrid]:Refresh(nAchievementId, bReceived, self.nTotalCollection)
|
||||
end
|
||||
function DormHandbookCtrl:OnAchievementGridClick(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nAchievementId = self.tbAchievement[nIdx]
|
||||
local callback = function(msgData)
|
||||
UTILS.OpenReceiveByChangeInfo(msgData.ChangeInfo)
|
||||
local unreceivedIds, nTotalCollection = PlayerData.PlayerDormData:GetDormAchievementData()
|
||||
self.tbreceivedAchievementIds = unreceivedIds
|
||||
self.nTotalCollection = nTotalCollection
|
||||
self._mapNode.svAchievement:Init(#self.tbAchievement, self, self.OnAchievementGridRefresh, self.OnAchievementGridClick, true)
|
||||
local nLevel = PlayerData.PlayerDormData:GetHonorTitleLevel()
|
||||
self._mapNode.goHonorTitle:SetHonotTitle(140001, true, nLevel)
|
||||
end
|
||||
if self._mapCtrlAchievement[goGrid].bCanReceive then
|
||||
PlayerData.PlayerDormData:ReceiveDormAchievement({nAchievementId}, callback)
|
||||
end
|
||||
end
|
||||
function DormHandbookCtrl:OnSuitGridRefresh(goGrid, nIdx)
|
||||
if self._mapCtrlPreset[goGrid] == nil then
|
||||
self._mapCtrlPreset[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormHandBook.DormHandbookSuitGridCtrl")
|
||||
end
|
||||
nIdx = nIdx + 1
|
||||
local nSuitId = self.tbSuit[nIdx]
|
||||
local bReceived = PlayerData.PlayerDormData:CheckLayoutReceived(nSuitId)
|
||||
self._mapCtrlPreset[goGrid]:SetSuit(nSuitId, true, bReceived, self.mapBag)
|
||||
end
|
||||
function DormHandbookCtrl:OnSuitGridClick(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nSuitId = self.tbSuit[nIdx]
|
||||
local tbSuitFurniture = self._panel.mapDormSuitData[nSuitId]
|
||||
local mapCurCount = {}
|
||||
local mapTotalCount = {}
|
||||
for _, mapFurniture in ipairs(tbSuitFurniture) do
|
||||
if mapCurCount[mapFurniture.FurnitureId] == nil then
|
||||
mapCurCount[mapFurniture.FurnitureId] = self.mapBag[mapFurniture.FurnitureId]
|
||||
end
|
||||
if mapTotalCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTotalCount[mapFurniture.FurnitureId] = self.mapBag[mapFurniture.FurnitureId]
|
||||
end
|
||||
end
|
||||
local nRoom = self._panel.nCurRoom or 0
|
||||
local bCurSuit = false
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormEditorSuitDetailPanel, nSuitId, tbSuitFurniture, mapCurCount, 0, mapTotalCount, bCurSuit, nil)
|
||||
end
|
||||
function DormHandbookCtrl:OnFurnitureGridRefresh(goGrid, nIdx)
|
||||
if self._mapCtrlFurniture[goGrid] == nil then
|
||||
self._mapCtrlFurniture[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormEditor.TemplateDormFurnitureItem")
|
||||
end
|
||||
nIdx = nIdx + 1
|
||||
local curTab = self.mapFurniture[self.nFurnitureTog]
|
||||
if curTab ~= nil then
|
||||
local nFurnitrueId = curTab[nIdx]
|
||||
local nCount = self.mapBag[nFurnitrueId] == nil and 0 or self.mapBag[nFurnitrueId]
|
||||
self._mapCtrlFurniture[goGrid]:RefreshHandbook(nFurnitrueId, nCount)
|
||||
end
|
||||
end
|
||||
function DormHandbookCtrl:OnFurnitureGridClick(goGrid, nIdx)
|
||||
self._mapCtrlFurniture[goGrid]:OnBtnClick_Info()
|
||||
end
|
||||
function DormHandbookCtrl:OnFurnitureTogGridRefresh(goGrid, nIdx)
|
||||
if self._mapCtrlFurnitureToggle[goGrid] == nil then
|
||||
self._mapCtrlFurnitureToggle[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.TemplateEx.TemplateToggleCtrl")
|
||||
end
|
||||
nIdx = nIdx + 1
|
||||
self._mapCtrlFurnitureToggle[goGrid]:SetText(ConfigTable.GetUIText(string.format("Dorm_FurnitureList_Tog%d", nIdx)))
|
||||
self._mapCtrlFurnitureToggle[goGrid]:SetDefault(nIdx == self.nFurnitureTog)
|
||||
end
|
||||
function DormHandbookCtrl:OnFurnitureTogGridClick(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
if self.nFurnitureTog == nIdx then
|
||||
return
|
||||
end
|
||||
self.nFurnitureTog = nIdx
|
||||
for goGridKey, mapCtrl in pairs(self._mapCtrlFurnitureToggle) do
|
||||
mapCtrl:SetDefault(goGridKey == goGrid)
|
||||
end
|
||||
local curTab = self.mapFurniture[self.nFurnitureTog] == nil and {} or self.mapFurniture[self.nFurnitureTog]
|
||||
if #curTab == 0 then
|
||||
self._mapNode.svFurniture.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.svFurniture.gameObject:SetActive(true)
|
||||
self._mapNode.svFurniture:Init(#curTab, self, self.OnFurnitureGridRefresh, self.OnFurnitureGridClick)
|
||||
end
|
||||
end
|
||||
function DormHandbookCtrl:OnBtnClick_Toggle(btn, nIdx)
|
||||
if nIdx == self.nCurTog then
|
||||
return
|
||||
end
|
||||
self.nCurTog = nIdx
|
||||
self._mapNode.listTog[1]:SetDefaultDorm(nIdx == 1)
|
||||
self._mapNode.listTog[2]:SetDefaultDorm(nIdx == 2)
|
||||
self._mapNode.listTog[3]:SetDefaultDorm(nIdx == 3)
|
||||
self._mapNode.rtAchievement:SetActive(nIdx == 1)
|
||||
self._mapNode.rtPreset:SetActive(nIdx == 2)
|
||||
self._mapNode.rtFurniture:SetActive(nIdx == 3)
|
||||
if nIdx == 3 then
|
||||
self._mapNode.rtBar:Init(8, self, self.OnFurnitureTogGridRefresh, self.OnFurnitureTogGridClick, true)
|
||||
end
|
||||
end
|
||||
function DormHandbookCtrl:OnBtnClick_Close()
|
||||
self._mapNode.rtQuest:Play("HandBookrtQuest_out")
|
||||
self:AddTimer(1, 0.25, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormHandbookPanel)
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.25)
|
||||
end
|
||||
return DormHandbookCtrl
|
||||
@@ -0,0 +1,35 @@
|
||||
local DormHandbookPanel = class("DormHandbookPanel", BasePanel)
|
||||
DormHandbookPanel._bIsMainPanel = false
|
||||
DormHandbookPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormHandBookPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormHandBook.DormHandbookCtrl"
|
||||
}
|
||||
}
|
||||
function DormHandbookPanel:Awake()
|
||||
self.mapDormSuitData = {}
|
||||
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 DormHandbookPanel:OnEnable()
|
||||
end
|
||||
function DormHandbookPanel:OnAfterEnter()
|
||||
end
|
||||
function DormHandbookPanel:OnDisable()
|
||||
end
|
||||
function DormHandbookPanel:OnDestroy()
|
||||
end
|
||||
function DormHandbookPanel:OnRelease()
|
||||
end
|
||||
return DormHandbookPanel
|
||||
@@ -0,0 +1,173 @@
|
||||
local DormHandbookSuitGridCtrl = class("DormHandbookSuitGridCtrl", BaseCtrl)
|
||||
local DefaultPath = "Icon/DormFurnitureSet/DormFurnitureSet_1001"
|
||||
DormHandbookSuitGridCtrl._mapNodeConfig = {
|
||||
imgSelect = {},
|
||||
imgIcon = {sComponentName = "Image"},
|
||||
Use_Num = {},
|
||||
TMPNum = {sComponentName = "TMP_Text"},
|
||||
rtPreset = {},
|
||||
imgTag = {},
|
||||
TMPTagName = {sComponentName = "TMP_Text"},
|
||||
imgTagMask = {},
|
||||
imgMask = {},
|
||||
btnDetail = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Detail"
|
||||
},
|
||||
btnEdit = {sComponentName = "UIButton"},
|
||||
TMPName = {sComponentName = "TMP_Text"},
|
||||
rtDetail = {},
|
||||
Use_Mask = {},
|
||||
TMPHintUse = {sComponentName = "TMP_Text"},
|
||||
imgSaveMask = {},
|
||||
goOverWrite = {},
|
||||
btnReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Reward"
|
||||
}
|
||||
}
|
||||
DormHandbookSuitGridCtrl._mapEventConfig = {
|
||||
DormUpdatePresetNameSuc = "OnEvent_DormUpdatePresetNameSuc",
|
||||
DormLayoutRewardReceive = "OnEvent_LayoutRewardReceive"
|
||||
}
|
||||
DormHandbookSuitGridCtrl._mapRedDotConfig = {}
|
||||
function DormHandbookSuitGridCtrl:Awake()
|
||||
self.nIdx = 0
|
||||
self.nType = 0
|
||||
self.bEmpty = true
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:FadeIn()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:FadeOut()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnEnable()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnDisable()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnRelease()
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:SetSuit(nSuitId, bEnable, bReceived, mapBagCount)
|
||||
self.nType = 0
|
||||
self.nId = nSuitId
|
||||
self._mapNode.btnEdit.gameObject:SetActive(false)
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
self._mapNode.btnDetail.gameObject:SetActive(false)
|
||||
local mapSuitCfgData = ConfigTable.GetData("DormLayoutReward", nSuitId)
|
||||
if mapSuitCfgData == nil then
|
||||
return
|
||||
end
|
||||
local nCurCount = 0
|
||||
local nTotalCount = 0
|
||||
local mapTempCount = {}
|
||||
local tbFurnitureList = self._panel.mapDormSuitData[nSuitId]
|
||||
if tbFurnitureList ~= nil then
|
||||
for _, mapFurniture in ipairs(tbFurnitureList) do
|
||||
local mapFurnitureCfg = ConfigTable.GetData("DormFurniture", mapFurniture.FurnitureId)
|
||||
if mapFurnitureCfg ~= nil and mapFurnitureCfg.NotShow < 1 then
|
||||
if mapTempCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTempCount[mapFurniture.FurnitureId] = 0
|
||||
end
|
||||
mapTempCount[mapFurniture.FurnitureId] = mapTempCount[mapFurniture.FurnitureId] + 1
|
||||
local nCurBagCount = mapBagCount[mapFurniture.FurnitureId] == nil and 0 or mapBagCount[mapFurniture.FurnitureId]
|
||||
if nCurBagCount >= mapTempCount[mapFurniture.FurnitureId] then
|
||||
nCurCount = nCurCount + 1
|
||||
end
|
||||
nTotalCount = nTotalCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.Use_Num:SetActive(false)
|
||||
if bReceived then
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
local str = string.format("%d/%d", nTotalCount, nTotalCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPNum, str)
|
||||
else
|
||||
self._mapNode.btnReward.gameObject:SetActive(nCurCount >= nTotalCount)
|
||||
local str = nCurCount >= nTotalCount and string.format("%d/%d", nCurCount, nTotalCount) or string.format("<color=#ef3d5c>%d</color>/%d", nCurCount, nTotalCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPNum, str)
|
||||
end
|
||||
self.nCurCount = nCurCount
|
||||
self.nTotalCount = nTotalCount
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, mapSuitCfgData.RoomLayoutName)
|
||||
self:SetPngSprite(self._mapNode.imgIcon, mapSuitCfgData.RoomLayoutListIcon)
|
||||
self._mapNode.rtPreset:SetActive(false)
|
||||
self._mapNode.imgTag:SetActive(mapSuitCfgData.RoomLayoutTag ~= "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTagName, mapSuitCfgData.RoomLayoutTag)
|
||||
self:SetMask(not bEnable)
|
||||
self:SetSelect(false)
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:SetSelectPreset(bSelect)
|
||||
self._mapNode.imgSelect:SetActive(bSelect)
|
||||
if self.bEmpty then
|
||||
self._mapNode.imgSaveMask:SetActive(true)
|
||||
self._mapNode.goOverWrite:SetActive(false)
|
||||
else
|
||||
self._mapNode.imgSaveMask:SetActive(false)
|
||||
self._mapNode.goOverWrite:SetActive(bSelect)
|
||||
self._mapNode.rtDetail:SetActive(not bSelect)
|
||||
end
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:SetSelect(bSelect)
|
||||
self._mapNode.imgSelect:SetActive(bSelect)
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:SetMask(bMask)
|
||||
self._mapNode.imgTagMask:SetActive(bMask)
|
||||
self._mapNode.imgMask:SetActive(bMask)
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnBtnClick_Detail()
|
||||
if self.nType == 1 then
|
||||
local callback = function(bConfirm)
|
||||
if bConfirm then
|
||||
self:OnBtnClick_Use()
|
||||
end
|
||||
end
|
||||
local mapPresetData = self._panel.mapPresetInfo[self.nIdx]
|
||||
local spCover = self._panel:GetPresetCover(tostring(self.nCreateTime))
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormEditorPresetDetailPanel, mapPresetData, self.bEnable, self.bSelect, self._panel.nCurRoom, callback, spCover)
|
||||
else
|
||||
local callback = function(bConfirm)
|
||||
if bConfirm then
|
||||
EventManager.Hit("DormSuitGrid_Use", self.nId)
|
||||
end
|
||||
end
|
||||
local nSuitId = self.nId
|
||||
local tbSuitFurniture = self._panel.mapDormSuitData[nSuitId]
|
||||
local mapCurCount = {}
|
||||
local mapTotalCount = {}
|
||||
for _, mapFurniture in ipairs(tbSuitFurniture) do
|
||||
if mapCurCount[mapFurniture.FurnitureId] == nil then
|
||||
mapCurCount[mapFurniture.FurnitureId] = self._panel:GetFurnitureCountIncludeCurRoom(self._panel.nCurRoom, mapFurniture.FurnitureId)
|
||||
end
|
||||
if mapTotalCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTotalCount[mapFurniture.FurnitureId] = self._panel:GetBagFurnitureCount(mapFurniture.FurnitureId)
|
||||
end
|
||||
end
|
||||
local nRoom = self._panel.nCurRoom
|
||||
local bCurSuit = self.bSelect
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormEditorSuitDetailPanel, nSuitId, tbSuitFurniture, mapCurCount, nRoom, mapTotalCount, bCurSuit, callback)
|
||||
end
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnBtnClick_Reward(btn)
|
||||
local callback = function(changeInfo, _)
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
UTILS.OpenReceiveByChangeInfo(changeInfo)
|
||||
end
|
||||
PlayerData.PlayerDormData:DormLayoutRewardReceive({
|
||||
self.nId
|
||||
}, callback)
|
||||
end
|
||||
function DormHandbookSuitGridCtrl:OnEvent_LayoutRewardReceive()
|
||||
local bReceived = PlayerData.PlayerDormData:CheckLayoutReceived(self.nId)
|
||||
if bReceived then
|
||||
self._mapNode.btnReward.gameObject:SetActive(false)
|
||||
local str = string.format("%d/%d", self.nTotalCount, self.nTotalCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPNum, str)
|
||||
else
|
||||
self._mapNode.btnReward.gameObject:SetActive(self.nCurCount >= self.nTotalCount)
|
||||
local str = self.nCurCount >= self.nTotalCount and string.format("%d/%d", self.nCurCount, self.nTotalCount) or string.format("<color=#ef3d5c>%d</color>/%d", self.nCurCount, self.nTotalCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPNum, str)
|
||||
end
|
||||
end
|
||||
return DormHandbookSuitGridCtrl
|
||||
@@ -0,0 +1,47 @@
|
||||
local DormInteractiveAffinityCharGridCtrl = class("DormInteractiveAffinityCharGridCtrl", BaseCtrl)
|
||||
DormInteractiveAffinityCharGridCtrl._mapNodeConfig = {
|
||||
tc_head = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateHeadCtrl"
|
||||
},
|
||||
TMPFovor = {sComponentName = "TMP_Text"},
|
||||
TMPGift = {sComponentName = "TMP_Text"},
|
||||
imgIconGift = {sComponentName = "Image"}
|
||||
}
|
||||
DormInteractiveAffinityCharGridCtrl._mapEventConfig = {}
|
||||
DormInteractiveAffinityCharGridCtrl._mapRedDotConfig = {}
|
||||
function DormInteractiveAffinityCharGridCtrl:Awake()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:FadeIn()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:FadeOut()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:OnEnable()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:OnDisable()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:OnRelease()
|
||||
end
|
||||
function DormInteractiveAffinityCharGridCtrl:Refresh(nCharId, nAffinity, nGiftId)
|
||||
local mapChar = ConfigTable.GetData_Character(nCharId)
|
||||
if mapChar == nil then
|
||||
return
|
||||
end
|
||||
local nSkinId = mapChar.DefaultSkinId
|
||||
self._mapNode.tc_head:SetCharHead(nSkinId)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPFovor, orderedFormat(ConfigTable.GetUIText("Dorm_AffinityUp"), nAffinity))
|
||||
if nGiftId == 0 then
|
||||
self._mapNode.TMPGift.gameObject:SetActive(false)
|
||||
else
|
||||
local mapGiftItemCfgData = ConfigTable.GetData_Item(nGiftId)
|
||||
if mapGiftItemCfgData ~= nil then
|
||||
self._mapNode.TMPGift.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPGift, mapGiftItemCfgData.Title)
|
||||
self:SetPngSprite(self._mapNode.imgIconGift, mapGiftItemCfgData.Icon)
|
||||
else
|
||||
self._mapNode.TMPGift.gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
return DormInteractiveAffinityCharGridCtrl
|
||||
@@ -0,0 +1,66 @@
|
||||
local DormInteractiveAffinityCtrl = class("DormInteractiveAffinityCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
DormInteractiveAffinityCtrl._mapNodeConfig = {
|
||||
rtProgress = {
|
||||
sNodeName = "---progress---"
|
||||
},
|
||||
rtReward = {
|
||||
sNodeName = "---reward---"
|
||||
},
|
||||
rtChar = {
|
||||
nCount = 6,
|
||||
sCtrlName = "Game.UI.Dorm.DormInteractive.DormInteractiveAffinityCharGridCtrl"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
}
|
||||
}
|
||||
DormInteractiveAffinityCtrl._mapEventConfig = {}
|
||||
DormInteractiveAffinityCtrl._mapRedDotConfig = {}
|
||||
function DormInteractiveAffinityCtrl:Awake()
|
||||
self.animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:FadeIn()
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:FadeOut()
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:OnEnable()
|
||||
local param = self:GetPanelParam()
|
||||
self.tbData = param[1]
|
||||
self.callback = param[2]
|
||||
self:Refresh()
|
||||
self.animator:Play("DormCharInteractivePanel_in")
|
||||
WwiseAudioMgr:PostEvent("Home_UI_favourup")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 3.3)
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:OnDisable()
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:OnDestroy()
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:OnRelease()
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:Refresh()
|
||||
for i = 1, 6 do
|
||||
if self.tbData[i] ~= nil then
|
||||
self._mapNode.rtChar[i].gameObject:SetActive(true)
|
||||
local nCharId = self.tbData[i].AffinityInfo.CharId
|
||||
local nGiftId = self.tbData[i].ItemInfo.Tid
|
||||
local nAffinity = self.tbData[i].AffinityInfo.nExpChange or 0
|
||||
self._mapNode.rtChar[i]:Refresh(nCharId, nAffinity, nGiftId)
|
||||
else
|
||||
self._mapNode.rtChar[i].gameObject:SetActive(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormInteractiveAffinityCtrl:OnBtnClick_Close(btn)
|
||||
self.animator:Play("DormCharInteractivePanel_out")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
self:AddTimer(1, 0.3, function()
|
||||
if self.callback ~= nil and type(self.callback) == "function" then
|
||||
self.callback()
|
||||
end
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormInteractiveAffinityPanel)
|
||||
end, true, true, true, nil)
|
||||
end
|
||||
return DormInteractiveAffinityCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormInteractiveAffinityPanel = class("DormInteractiveAffinityPanel", BasePanel)
|
||||
DormInteractiveAffinityPanel._bIsMainPanel = false
|
||||
DormInteractiveAffinityPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormCharInteractivePanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormInteractive.DormInteractiveAffinityCtrl"
|
||||
}
|
||||
}
|
||||
function DormInteractiveAffinityPanel:Awake()
|
||||
end
|
||||
function DormInteractiveAffinityPanel:OnEnable()
|
||||
end
|
||||
function DormInteractiveAffinityPanel:OnAfterEnter()
|
||||
end
|
||||
function DormInteractiveAffinityPanel:OnDisable()
|
||||
end
|
||||
function DormInteractiveAffinityPanel:OnDestroy()
|
||||
end
|
||||
function DormInteractiveAffinityPanel:OnRelease()
|
||||
end
|
||||
return DormInteractiveAffinityPanel
|
||||
@@ -0,0 +1,672 @@
|
||||
local DormInteractiveCtrl = class("DormInteractiveCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
local totalLength = 292
|
||||
local totalHeight = 37
|
||||
DormInteractiveCtrl._mapNodeConfig = {
|
||||
rtObserve = {},
|
||||
rtOperate = {},
|
||||
rtInteractiveBtn = {},
|
||||
rtListHideRoot = {},
|
||||
rtInteractiveHide = {},
|
||||
rtDormName = {},
|
||||
rtGiftHint = {},
|
||||
btnRewardHint = {
|
||||
sComponentName = "UIButton",
|
||||
sNodeName = "rtGiftHint",
|
||||
callback = "OnBtnClick_ReceiveDormReward"
|
||||
},
|
||||
btnHideUI = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_HideUI"
|
||||
},
|
||||
btnPrintScreen = {sComponentName = "UIButton"},
|
||||
btnPhone = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Phone"
|
||||
},
|
||||
btnInteractive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_FastInteractive"
|
||||
},
|
||||
btnEditor = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_EditMode"
|
||||
},
|
||||
btnOperate = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Operate"
|
||||
},
|
||||
btnObserve = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Observe"
|
||||
},
|
||||
btnCharacter = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Character"
|
||||
},
|
||||
btnVisit = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Visit"
|
||||
},
|
||||
btnElevator = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Elevator"
|
||||
},
|
||||
txtnum = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguage = "DormBtn_InteractiveMode"
|
||||
},
|
||||
TMPDormName = {sComponentName = "TMP_Text"},
|
||||
rtHudPool = {},
|
||||
rtHud = {},
|
||||
goCharHud = {
|
||||
sNodeName = "goFurnitureHud"
|
||||
},
|
||||
goCharHudRoot = {},
|
||||
txtBtnOperate = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_ViewMode"
|
||||
},
|
||||
txtBtnObserve = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_BossMode"
|
||||
},
|
||||
txtBtnEditor = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_Edior"
|
||||
},
|
||||
txtBtnCharacter = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_Role"
|
||||
},
|
||||
txtBtnVisit = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_Visit"
|
||||
},
|
||||
txtBtnElevator = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormBtn_Elevator"
|
||||
},
|
||||
txtGiftHint = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormReward_FastReceive"
|
||||
},
|
||||
rtCharHint = {},
|
||||
goJoystick = {
|
||||
sNodeName = "--joystick--"
|
||||
},
|
||||
rtContact = {
|
||||
sCtrlName = "Game.UI.Dorm.DormContact.DormContactBtnListCtrl"
|
||||
},
|
||||
cgBtnInteractive = {
|
||||
sComponentName = "CanvasGroup"
|
||||
},
|
||||
rtQuest = {},
|
||||
TMPTitleQuest = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormQuest_Title"
|
||||
},
|
||||
TMPDescQuest = {sComponentName = "TMP_Text"},
|
||||
TMPProcess = {sComponentName = "TMP_Text"},
|
||||
rtBarFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
goRedDotQuest = {},
|
||||
btnQuestInteractiveSide = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Quest"
|
||||
},
|
||||
goRedDotElevator = {},
|
||||
goRedDotMainMenu = {}
|
||||
}
|
||||
DormInteractiveCtrl._mapEventConfig = {
|
||||
ACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_ActiveHud",
|
||||
DEACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_DeactiveHud",
|
||||
DORM_CS2LUA_CLOSE_INTERACTIVE_ICON = "OnEvent_CloseContactHud",
|
||||
DormShowInteractiveBtns = "OnEvent_DormShowInteractiveBtns",
|
||||
DORM_CS2LUA_ENTER_CHAR_ACTIVE = "OnEvent_DormEnterActive",
|
||||
FurnitureFunctionBtnClick = "OnEvent_FurnitureFunctionBtnClick",
|
||||
[EventId.QuestDataRefresh] = "OnEvent_QuestRefresh",
|
||||
DormNameUpdate = "OnEvent_DormNameUpdate",
|
||||
DormRoleInteraction = "OnEvent_DormRoleInteraction"
|
||||
}
|
||||
DormInteractiveCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.DormElevator] = {
|
||||
sNodeName = "goRedDotElevator"
|
||||
},
|
||||
[RedDotDefine.DormMainMenu] = {
|
||||
sNodeName = "goRedDotMainMenu"
|
||||
}
|
||||
}
|
||||
function DormInteractiveCtrl:Awake()
|
||||
self.mapHudCtrls = {}
|
||||
self.tbHudPool = {}
|
||||
end
|
||||
function DormInteractiveCtrl:FadeIn()
|
||||
end
|
||||
function DormInteractiveCtrl:FadeOut()
|
||||
end
|
||||
function DormInteractiveCtrl:OnEnable()
|
||||
self.gameObject:SetActive(true)
|
||||
self._mapNode.rtCharHint:SetActive(false)
|
||||
if NovaAPI.GetCurrentModuleName() == "DormModuleScene" then
|
||||
NovaAPI.DispatchEventWithData("DormJoystickPrefabLoadComplete")
|
||||
end
|
||||
self:SetCharCount()
|
||||
local tbRewardIds = self._panel:GetDormRewardId()
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
local bGift = false
|
||||
if self._panel ~= nil and type(self._panel.GetDormRewardId) == "function" then
|
||||
local tbIds = self._panel:GetDormRewardId()
|
||||
bGift = tbIds ~= nil and 0 < #tbIds
|
||||
end
|
||||
local bExcept = DormGuideUI._mapShowExcept ~= nil and DormGuideUI._mapShowExcept.rtGiftHint == true
|
||||
if DormGuideUI.IsLeaveLocked() and not bExcept then
|
||||
self._mapNode.rtGiftHint:SetActive(false)
|
||||
if self._mapNode.rtGiftNumHint ~= nil then
|
||||
self._mapNode.rtGiftNumHint:SetActive(false)
|
||||
end
|
||||
if self._mapNode.rtDormName ~= nil then
|
||||
self._mapNode.rtDormName:SetActive(false)
|
||||
end
|
||||
else
|
||||
self._mapNode.rtGiftHint:SetActive(0 < #tbRewardIds)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnDisable()
|
||||
self:ClearAllInteractiveHudCtrl()
|
||||
end
|
||||
function DormInteractiveCtrl:OnDestroy()
|
||||
self:RemoveAllHUD()
|
||||
end
|
||||
function DormInteractiveCtrl:OnRelease()
|
||||
end
|
||||
function DormInteractiveCtrl:RemoveAllHUD()
|
||||
for _, mapCtrl in pairs(self.mapHudCtrls) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.mapHudCtrls = {}
|
||||
for _, mapCtrl in ipairs(self.tbHudPool) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.tbHudPool = {}
|
||||
end
|
||||
function DormInteractiveCtrl:SetRoom(nRoomId)
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", nRoomId)
|
||||
if mapRoomConfig == nil then
|
||||
return
|
||||
end
|
||||
local sDormName = self._panel.mapDormRoomInfo[self._panel.nCurRoom].RoomName
|
||||
if sDormName == nil or sDormName == "" then
|
||||
sDormName = mapRoomConfig.DefaultName
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDormName, sDormName)
|
||||
self:SetFastInteractiveBtn()
|
||||
end
|
||||
function DormInteractiveCtrl:SetMode(nState)
|
||||
self.nCurState = nState
|
||||
self._mapNode.rtObserve:SetActive(nState == 1)
|
||||
self._mapNode.rtOperate:SetActive(nState == 0)
|
||||
self._mapNode.btnOperate.gameObject:SetActive(nState == 1)
|
||||
self._mapNode.btnObserve.gameObject:SetActive(nState == 0)
|
||||
if nState == 1 then
|
||||
self._mapNode.rtContact:RemoveAllInteractiveBtn()
|
||||
self:InitFurnitureBtns()
|
||||
else
|
||||
self:RecycleAllInteractiveHudCtrl()
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:RegisterVirtualJoystick()
|
||||
NovaAPI.UnRegisterVirtualJoystick("Horizontal", "Vertical")
|
||||
NovaAPI.RegisterVirtualJoystick("Horizontal", "Vertical", self._mapNode.goJoystick)
|
||||
end
|
||||
function DormInteractiveCtrl:GetInteractiveHudCtrl()
|
||||
if #self.tbHudPool == 0 then
|
||||
local goHud = instantiate(self._mapNode.goCharHud, self._mapNode.rtHud.transform)
|
||||
local mapCtrl = self:BindCtrlByNode(goHud, "Game.UI.Dorm.DormInteractive.InteractiveHUDCtrl")
|
||||
mapCtrl.gameObject:SetActive(true)
|
||||
return mapCtrl
|
||||
else
|
||||
local mapCtrl = table.remove(self.tbHudPool, 1)
|
||||
mapCtrl.gameObject.transform:SetParent(self._mapNode.rtHud.transform)
|
||||
mapCtrl.gameObject:SetActive(true)
|
||||
return mapCtrl
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:RecycleInteractiveHudCtrl(nUid)
|
||||
local mapCtrl = self.mapHudCtrls[nUid]
|
||||
if mapCtrl == nil then
|
||||
return
|
||||
end
|
||||
self.mapHudCtrls[nUid] = nil
|
||||
mapCtrl:Hide()
|
||||
mapCtrl.gameObject.transform:SetParent(self._mapNode.rtHudPool.transform)
|
||||
mapCtrl.gameObject:SetActive(false)
|
||||
table.insert(self.tbHudPool, mapCtrl)
|
||||
end
|
||||
function DormInteractiveCtrl:RecycleAllInteractiveHudCtrl()
|
||||
local tbUids = {}
|
||||
for nUid, _ in pairs(self.mapHudCtrls) do
|
||||
table.insert(tbUids, nUid)
|
||||
end
|
||||
for _, nUid in ipairs(tbUids) do
|
||||
self:RecycleInteractiveHudCtrl(nUid)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:ClearAllInteractiveHudCtrl()
|
||||
self:RecycleAllInteractiveHudCtrl()
|
||||
for _, mapCtrl in ipairs(self.tbHudPool) do
|
||||
local go = mapCtrl.gameObject
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
destroyImmediate(go)
|
||||
end
|
||||
self.tbHudPool = {}
|
||||
end
|
||||
function DormInteractiveCtrl:InitFurnitureBtns()
|
||||
self:RecycleAllInteractiveHudCtrl()
|
||||
local mapData = self._panel.mapDormRoomInfo[self._panel.nCurRoom]
|
||||
local tbFurnitureList = mapData.FurnitureList
|
||||
local mapAddedFurniture = {}
|
||||
for _, mapFurniture in ipairs(tbFurnitureList) do
|
||||
local mapFurnitureCfgData = ConfigTable.GetData("DormFurniture", mapFurniture.FurnitureId)
|
||||
if mapFurnitureCfgData ~= nil then
|
||||
local bHasReward = false
|
||||
if #mapFurnitureCfgData.ProduceItemId > 0 and mapAddedFurniture[mapFurniture.FurnitureId] == nil then
|
||||
for _, nRewardId in ipairs(mapFurnitureCfgData.ProduceItemId) do
|
||||
if PlayerData.PlayerDormData:CheckHasRewardById(nRewardId) then
|
||||
bHasReward = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if bHasReward or 0 < mapFurnitureCfgData.Function then
|
||||
local tbEntityId, tbTransform = safe_call_cs_func2(CS.DormModuleHelper_HotFix.GetFur_EntityId_RootBubbleTrans, mapFurniture.FurnitureId)
|
||||
if tbEntityId ~= nil and tbTransform ~= nil then
|
||||
local nCount = tbEntityId.Length
|
||||
for i = 0, nCount - 1 do
|
||||
local nUid = tbEntityId[i]
|
||||
local rtItemTransform = tbTransform[i]
|
||||
if self.mapHudCtrls[nUid] ~= nil then
|
||||
return
|
||||
end
|
||||
local mapCtrl = self:GetInteractiveHudCtrl()
|
||||
self.mapHudCtrls[nUid] = mapCtrl
|
||||
mapCtrl:Show(nUid, rtItemTransform, mapFurniture.FurnitureId, mapFurnitureCfgData.BubbleIcon)
|
||||
end
|
||||
mapAddedFurniture[mapFurniture.FurnitureId] = nCount
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:CheckRewardFurnitureHuds()
|
||||
local removedHud = {}
|
||||
for nUid, mapCtrl in pairs(self.mapHudCtrls) do
|
||||
local nFurnitureId = mapCtrl.nFurId
|
||||
local mapTempFurnitureCfgData = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
local bShow = false
|
||||
if mapTempFurnitureCfgData ~= nil then
|
||||
if mapTempFurnitureCfgData.Function > 0 then
|
||||
bShow = true
|
||||
else
|
||||
for _, nRewardId in ipairs(mapTempFurnitureCfgData.ProduceItemId) do
|
||||
if PlayerData.PlayerDormData:CheckHasRewardById(nRewardId) then
|
||||
bShow = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not bShow then
|
||||
table.insert(removedHud, nUid)
|
||||
end
|
||||
end
|
||||
for _, nUid in ipairs(removedHud) do
|
||||
self:RecycleInteractiveHudCtrl(nUid)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:SetShowBtns(bShow)
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
DormGuideUI._bBusinessShowBtns = bShow
|
||||
if DormGuideUI._bHideChrome then
|
||||
self._mapNode.rtListHideRoot:SetActive(true)
|
||||
DormGuideUI._ApplyChrome(true)
|
||||
return
|
||||
end
|
||||
self._mapNode.rtListHideRoot:SetActive(bShow)
|
||||
end
|
||||
function DormInteractiveCtrl:SetCharCount()
|
||||
local mapRoomInfo = self._panel.mapDormRoomInfo[self._panel.nCurRoom]
|
||||
local mapDormRoomCfgData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
|
||||
local maxCharCount = 0
|
||||
if mapDormRoomCfgData ~= nil then
|
||||
maxCharCount = mapDormRoomCfgData.RoleNum
|
||||
end
|
||||
if mapRoomInfo ~= nil then
|
||||
local tbRoleList = mapRoomInfo.RoleList
|
||||
NovaAPI.SetTMPText(self._mapNode.txtnum, string.format("%d/%d", #tbRoleList, maxCharCount))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtnum, string.format("%d/%d", 0, maxCharCount))
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:SetFastInteractiveBtn()
|
||||
local bEnable = true
|
||||
local nDayCount = PlayerData.PlayerDormData:GetRoleInteractionDayCount()
|
||||
if nDayCount < 1 then
|
||||
bEnable = false
|
||||
end
|
||||
if not bEnable then
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgBtnInteractive, 0.5)
|
||||
return
|
||||
end
|
||||
local nActiveChar = 0
|
||||
for nRoomId, mapRoomData in pairs(self._panel.mapDormRoomInfo) do
|
||||
for _, mapRoleInfo in ipairs(mapRoomData.RoleList) do
|
||||
if not PlayerData.PlayerDormData:CheckRoleInteraction(mapRoleInfo.RoleId) then
|
||||
nActiveChar = nActiveChar + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
if nActiveChar < 1 then
|
||||
bEnable = false
|
||||
end
|
||||
if not bEnable then
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgBtnInteractive, 0.5)
|
||||
else
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgBtnInteractive, 1)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:SetQuestInfo()
|
||||
local nCurGroup, nGroupState, tbQuestOri = PlayerData.PlayerDormData:GetDormQuestDataWithGroup()
|
||||
if tbQuestOri == nil then
|
||||
self._mapNode.rtQuest:SetActive(false)
|
||||
self.curShowQuestData = nil
|
||||
return
|
||||
end
|
||||
local tbQuest = {}
|
||||
for _, value in ipairs(tbQuestOri) do
|
||||
if value.nStatus < 2 then
|
||||
table.insert(tbQuest, value)
|
||||
end
|
||||
end
|
||||
if #tbQuest == 0 then
|
||||
if nGroupState == 1 then
|
||||
self._mapNode.rtQuest:SetActive(false)
|
||||
self.curShowQuestData = nil
|
||||
else
|
||||
self.curShowQuestData = {nStatus = 0, nCurProgress = 0}
|
||||
local nTotalCount = 0
|
||||
local nCurCount = 0
|
||||
if tbQuestOri ~= nil then
|
||||
for _, v in ipairs(tbQuestOri) do
|
||||
nTotalCount = nTotalCount + 1
|
||||
if v.nStatus == 2 then
|
||||
nCurCount = nCurCount + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.goRedDotQuest:SetActive(nTotalCount <= nCurCount)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDescQuest, ConfigTable.GetUIText("Dorm_Interactive_GroupTitle"))
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPProcess, string.format("%d/%d", nCurCount, nTotalCount))
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(nCurCount / nTotalCount * totalLength, totalHeight)
|
||||
end
|
||||
return
|
||||
end
|
||||
local statusOrder = {
|
||||
[0] = 1,
|
||||
[1] = 2,
|
||||
[2] = 0
|
||||
}
|
||||
local sort = function(a, b)
|
||||
if a.nStatus ~= b.nStatus then
|
||||
return statusOrder[a.nStatus] > statusOrder[b.nStatus]
|
||||
end
|
||||
return a.nTid < b.nTid
|
||||
end
|
||||
table.sort(tbQuest, sort)
|
||||
local mapQuest = tbQuest[1]
|
||||
local mapQuestCfgData = ConfigTable.GetData("DormQuest", mapQuest.nTid)
|
||||
if mapQuestCfgData ~= nil then
|
||||
self.curShowQuestData = clone(mapQuest)
|
||||
self._mapNode.rtQuest:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDescQuest, mapQuestCfgData.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPProcess, string.format("%d/%d", mapQuest.nCurProgress, mapQuest.nGoal))
|
||||
self._mapNode.rtBarFill.sizeDelta = Vector2(mapQuest.nCurProgress / mapQuest.nGoal * totalLength, totalHeight)
|
||||
else
|
||||
self._mapNode.rtQuest:SetActive(false)
|
||||
self.curShowQuestData = nil
|
||||
return
|
||||
end
|
||||
self._mapNode.goRedDotQuest:SetActive(mapQuest.nStatus == 1)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_QuestRefresh(sType)
|
||||
if sType ~= "Dorm" then
|
||||
return
|
||||
end
|
||||
self:SetQuestInfo()
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Quest(btn)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormQuestPanel)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_ActiveHud(rtTransform, nType, nDataId, nEntityId, canInteract)
|
||||
if self._panel.nCurMode == 3 then
|
||||
return
|
||||
end
|
||||
if nType == 0 then
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, nType, nDataId, nEntityId)
|
||||
else
|
||||
if canInteract then
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, nType, nDataId, nEntityId)
|
||||
end
|
||||
local mapFurnitureCfgData = ConfigTable.GetData("DormFurniture", nDataId)
|
||||
if mapFurnitureCfgData ~= nil then
|
||||
local bHasReward = false
|
||||
if 0 < #mapFurnitureCfgData.ProduceItemId then
|
||||
for _, nRewardId in ipairs(mapFurnitureCfgData.ProduceItemId) do
|
||||
if PlayerData.PlayerDormData:CheckHasRewardById(nRewardId) then
|
||||
bHasReward = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if 0 < mapFurnitureCfgData.Function then
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, 3, nDataId, nEntityId)
|
||||
elseif bHasReward then
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, 4, nDataId, nEntityId)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DeactiveHud(nEntityId, nType)
|
||||
if self._panel.nCurMode == 3 then
|
||||
return
|
||||
end
|
||||
self._mapNode.rtContact:RemoveInteractiveBtn(nEntityId)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormEnterActive(rtTransform, nType, nDataId, nEntityId)
|
||||
WwiseAudioMgr:PostEvent("Home_UI_char_point")
|
||||
self._mapNode.rtContact:EnterCharActiveViewMode(rtTransform, nType, nDataId, nEntityId)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormShowInteractiveBtns(bShow)
|
||||
if bShow then
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
if DormGuideUI._bHideChrome then
|
||||
return
|
||||
end
|
||||
end
|
||||
self._mapNode.rtInteractiveHide:SetActive(bShow)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_FurnitureFunctionBtnClick(nUid, nFurId)
|
||||
local mapFurnitureCfgData = ConfigTable.GetData("DormFurniture", nFurId)
|
||||
if mapFurnitureCfgData ~= nil then
|
||||
local tbRewardIds = mapFurnitureCfgData.ProduceItemId
|
||||
if 0 < #tbRewardIds then
|
||||
local callback = function(changeInfo, tbRewardIds)
|
||||
if self._panel.mapDormBaseData ~= nil then
|
||||
self._panel.mapDormBaseData.rewardIds = tbRewardIds
|
||||
end
|
||||
local afterIds = self._panel:GetDormRewardId()
|
||||
self._mapNode.rtGiftHint:SetActive(0 < #afterIds)
|
||||
self._mapNode.rtContact:RemoveRewardHud(nUid, nFurId)
|
||||
self:CheckRewardFurnitureHuds()
|
||||
UTILS.OpenReceiveByChangeInfo(changeInfo)
|
||||
end
|
||||
PlayerData.PlayerDormData:DormRewardReceive(tbRewardIds, callback)
|
||||
elseif mapFurnitureCfgData.Function > 0 then
|
||||
if mapFurnitureCfgData.Function == 1 then
|
||||
PlayerData.Phone:OpenPhonePanel()
|
||||
elseif mapFurnitureCfgData.Function == 2 then
|
||||
local callback = function()
|
||||
PanelManager.SetMainViewSkipAnimIn(false)
|
||||
local func = function()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Crafting)
|
||||
end
|
||||
EventManager.Hit(EventId.SetTransition, 5, func)
|
||||
end
|
||||
PlayerData.Base:CheckFunctionBtn(GameEnum.OpenFuncType.Crafting, callback)
|
||||
elseif mapFurnitureCfgData.Function == 3 then
|
||||
local mapDormInfo = clone(self._panel.mapDormRoomInfo)
|
||||
local tbDormInfo = {}
|
||||
for _, mapDormInfo in pairs(mapDormInfo) do
|
||||
table.insert(tbDormInfo, mapDormInfo)
|
||||
end
|
||||
local sort = function(a, b)
|
||||
return a.DormRoomId < b.DormRoomId
|
||||
end
|
||||
table.sort(tbDormInfo, sort)
|
||||
local nCurRoom = self._panel.nCurRoom
|
||||
local nIdx = 1
|
||||
for index, mapRoomInfo in ipairs(tbDormInfo) do
|
||||
if nCurRoom == mapRoomInfo.DormRoomId then
|
||||
nIdx = index
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormMusicSelectPanel, nIdx, tbDormInfo)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormNameUpdate(nRoomId, sName)
|
||||
if nRoomId == self._panel.nCurRoom then
|
||||
self._panel.mapDormRoomInfo[self._panel.nCurRoom].RoomName = sName
|
||||
if sName == nil or sName == "" then
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
|
||||
if mapRoomConfig ~= nil then
|
||||
sName = mapRoomConfig.DefaultName
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPDormName, sName)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormRoleInteraction()
|
||||
self:SetFastInteractiveBtn()
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Operate()
|
||||
WwiseAudioMgr:PostEvent("ui_home_swicthMode_setstate_mowang")
|
||||
EventManager.Hit("DormPanel_BtnClickOperate")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Observe()
|
||||
WwiseAudioMgr:PostEvent("ui_home_swicthMode_setstate_normal")
|
||||
EventManager.Hit("DormPanel_BtnClickObserve")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_EditMode()
|
||||
EventManager.Hit("DormPanel_BtnClickEdit")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Character()
|
||||
EventManager.Hit("DormPanel_OpenSelectChar")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Visit()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormFriendPanel)
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Elevator()
|
||||
self:RecycleAllInteractiveHudCtrl()
|
||||
EventManager.Hit("DormPanel_NextRoom")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_ReceiveDormReward()
|
||||
local tbRewardIds = self._panel:GetDormRewardId()
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
if #tbRewardIds < 1 then
|
||||
self._mapNode.rtGiftHint:SetActive(false)
|
||||
DormGuideAdapter.NoteQuest(nil, false)
|
||||
return
|
||||
end
|
||||
local callback = function(changeInfo, tbRewardIds)
|
||||
if self._panel.mapDormBaseData ~= nil then
|
||||
self._panel.mapDormBaseData.rewardIds = tbRewardIds
|
||||
end
|
||||
local afterIds = self._panel:GetDormRewardId()
|
||||
self._mapNode.rtGiftHint:SetActive(0 < #afterIds)
|
||||
self:CheckRewardFurnitureHuds()
|
||||
UTILS.OpenReceiveByChangeInfo(changeInfo)
|
||||
DormGuideAdapter.NoteQuest(nil, true)
|
||||
end
|
||||
PlayerData.PlayerDormData:DormRewardReceive(tbRewardIds, callback)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_CloseContactHud()
|
||||
self._mapNode.rtContact:ExitCharActive()
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_FastInteractive(btn)
|
||||
local nDayCount = PlayerData.PlayerDormData:GetRoleInteractionDayCount()
|
||||
if nDayCount < 1 then
|
||||
local sTip = ConfigTable.GetUIText("Dorm_Interaction_DayLimitHint")
|
||||
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
||||
return
|
||||
end
|
||||
local tbInteractiveChar = {}
|
||||
for nRoomId, mapRoomData in pairs(self._panel.mapDormRoomInfo) do
|
||||
for _, mapRoleInfo in ipairs(mapRoomData.RoleList) do
|
||||
if not PlayerData.PlayerDormData:CheckRoleInteraction(mapRoleInfo.RoleId) then
|
||||
table.insert(tbInteractiveChar, {
|
||||
DormRoomId = nRoomId,
|
||||
RoleId = mapRoleInfo.RoleId
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
local tbFinalChar
|
||||
if nDayCount >= #tbInteractiveChar then
|
||||
tbFinalChar = tbInteractiveChar
|
||||
else
|
||||
tbFinalChar = {}
|
||||
for i = 1, nDayCount do
|
||||
local randomIdx = math.random(#tbInteractiveChar)
|
||||
local mapChar = table.remove(tbInteractiveChar, randomIdx)
|
||||
table.insert(tbFinalChar, mapChar)
|
||||
end
|
||||
end
|
||||
local NetCallback = function(tbInfo, mapChange)
|
||||
if tbInfo ~= nil and 0 < #tbInfo then
|
||||
local ShowCallback = function()
|
||||
local tbAffinityShowData = {}
|
||||
for _, mapAffinityData in ipairs(tbInfo) do
|
||||
if mapAffinityData.AffinityInfo.AffinityLevel ~= mapAffinityData.AffinityInfo.nBeforeLevel then
|
||||
table.insert(tbAffinityShowData, {
|
||||
charID = mapAffinityData.AffinityInfo.CharId,
|
||||
curLevel = mapAffinityData.AffinityInfo.AffinityLevel,
|
||||
lastLevel = mapAffinityData.AffinityInfo.nBeforeLevel,
|
||||
curExp = mapAffinityData.AffinityInfo.AffinityExp,
|
||||
lastExp = mapAffinityData.AffinityInfo.nBeforeExp
|
||||
})
|
||||
end
|
||||
end
|
||||
if 0 < #tbAffinityShowData then
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourLevelUp, tbAffinityShowData)
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormInteractiveAffinityPanel, tbInfo, ShowCallback)
|
||||
end
|
||||
end
|
||||
if tbFinalChar ~= nil and 0 < #tbFinalChar then
|
||||
PlayerData.PlayerDormData:DormRoleInteraction(tbFinalChar, NetCallback)
|
||||
else
|
||||
local sTip = ConfigTable.GetUIText("Dorm_Interaction_NoCharHint")
|
||||
EventManager.Hit(EventId.OpenMessageBox, sTip)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Phone()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormMainMenuPanel, self._panel.nCurRoom)
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_HideUI()
|
||||
EventManager.Hit("Dorm_HideUI")
|
||||
end
|
||||
return DormInteractiveCtrl
|
||||
@@ -0,0 +1,40 @@
|
||||
local InteractiveHUDCtrl = class("InteractiveHUDCtrl", BaseCtrl)
|
||||
InteractiveHUDCtrl._mapNodeConfig = {
|
||||
imgFurnitureIcon = {sComponentName = "Image"},
|
||||
btnFurnitureIcon = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Interactive"
|
||||
}
|
||||
}
|
||||
InteractiveHUDCtrl._mapEventConfig = {}
|
||||
InteractiveHUDCtrl._mapRedDotConfig = {}
|
||||
function InteractiveHUDCtrl:Awake()
|
||||
end
|
||||
function InteractiveHUDCtrl:FadeIn()
|
||||
end
|
||||
function InteractiveHUDCtrl:FadeOut()
|
||||
end
|
||||
function InteractiveHUDCtrl:OnEnable()
|
||||
self.nFurId = 0
|
||||
end
|
||||
function InteractiveHUDCtrl:OnDisable()
|
||||
end
|
||||
function InteractiveHUDCtrl:OnDestroy()
|
||||
end
|
||||
function InteractiveHUDCtrl:OnRelease()
|
||||
end
|
||||
function InteractiveHUDCtrl:Show(nId, rtTransform, nFurId, sIcon)
|
||||
self.nUid = nId
|
||||
self.nFurId = nFurId
|
||||
self:SetPngSprite(self._mapNode.imgFurnitureIcon, sIcon)
|
||||
safe_call_cs_func(CS.DormModuleHelper.SetHudFollowTarget, self.gameObject, rtTransform, Vector3(0, 1.5, 0))
|
||||
end
|
||||
function InteractiveHUDCtrl:Hide()
|
||||
self.nUid = 0
|
||||
self.nFurId = 0
|
||||
safe_call_cs_func(CS.DormModuleHelper.UnsetHudFollowTarget, self.gameObject)
|
||||
end
|
||||
function InteractiveHUDCtrl:OnBtnClick_Interactive()
|
||||
EventManager.Hit("FurnitureFunctionBtnClick", self.nUid, self.nFurId)
|
||||
end
|
||||
return InteractiveHUDCtrl
|
||||
@@ -0,0 +1,82 @@
|
||||
local DormJoystickCtrl = class("DormJoystickCtrl", BaseCtrl)
|
||||
DormJoystickCtrl._mapNodeConfig = {
|
||||
placeRoot = {},
|
||||
Slider = {
|
||||
sComponentName = "Slider",
|
||||
callback = "OnSliderValueChange"
|
||||
},
|
||||
btnSure = {sComponentName = "UIButton", callback = "OnBtn_Sure"},
|
||||
btnCancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_Cancel"
|
||||
},
|
||||
btnBack = {sComponentName = "UIButton", callback = "OnBtn_Back"},
|
||||
btnCancelRound = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtn_CancelRound"
|
||||
}
|
||||
}
|
||||
DormJoystickCtrl._mapEventConfig = {
|
||||
Dorm_Select_Obj = "OnEvent_DormSelectObj",
|
||||
Dorm_Enter_Edit_Mode = "OnEvent_EnterEditMode"
|
||||
}
|
||||
function DormJoystickCtrl:Awake()
|
||||
self.DormPlaceObjectCS = nil
|
||||
if NovaAPI.GetCurrentModuleName() == "DormModuleScene" then
|
||||
NovaAPI.DispatchEventWithData("DormJoystickPrefabLoadComplete")
|
||||
end
|
||||
end
|
||||
function DormJoystickCtrl:OnSliderValueChange(_, value)
|
||||
local nValue = value
|
||||
if nValue == 0.5 then
|
||||
self.DormPlaceObjectCS.gameObject.transform.eulerAngles = Vector3.zero
|
||||
elseif nValue < 0.5 then
|
||||
local tmxY = 360 - (0.5 - nValue) * 360
|
||||
self.DormPlaceObjectCS.gameObject.transform.eulerAngles = Vector3(0, tmxY, 0)
|
||||
else
|
||||
local tmxY = (nValue - 0.5) * 360
|
||||
self.DormPlaceObjectCS.gameObject.transform.eulerAngles = Vector3(0, tmxY, 0)
|
||||
end
|
||||
end
|
||||
function DormJoystickCtrl:OnBtn_Sure()
|
||||
if self.DormPlaceObjectCS.isCollision then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "摆放位置有误")
|
||||
return
|
||||
end
|
||||
self._mapNode.placeRoot:SetActive(false)
|
||||
self.DormPlaceObjectCS:SavePlaneMsg()
|
||||
self.DormPlaceObjectCS = nil
|
||||
end
|
||||
function DormJoystickCtrl:OnBtn_Cancel()
|
||||
self._mapNode.placeRoot:SetActive(false)
|
||||
self.DormPlaceObjectCS:QuitEditMode()
|
||||
self.DormPlaceObjectCS = nil
|
||||
end
|
||||
function DormJoystickCtrl:OnBtn_Back()
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
end
|
||||
function DormJoystickCtrl:OnEvent_EnterEditMode()
|
||||
self._mapNode.placeRoot:SetActive(true)
|
||||
end
|
||||
function DormJoystickCtrl:OnEvent_CampingSelectObj(obj)
|
||||
self.DormPlaceObjectCS = nil
|
||||
self.DormPlaceObjectCS = obj:GetComponent("DormPlaceObject")
|
||||
self.tmxY = math.fmod(obj.transform.eulerAngles.y, 360)
|
||||
if self.tmxY == 0 then
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5)
|
||||
elseif self.tmxY > 0 and self.tmxY <= 180 then
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5 + self.tmxY / 180 * 0.5)
|
||||
else
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5 - (360 - self.tmxY) / 180 * 0.5)
|
||||
end
|
||||
end
|
||||
function DormJoystickCtrl:OnBtn_CancelRound()
|
||||
if self.tmxY == 0 then
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5)
|
||||
elseif self.tmxY > 0 and self.tmxY <= 180 then
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5 + self.tmxY / 180 * 0.5)
|
||||
else
|
||||
NovaAPI.SetSliderValue(self._mapNode.Slider, 0.5 - (360 - self.tmxY) / 180 * 0.5)
|
||||
end
|
||||
end
|
||||
return DormJoystickCtrl
|
||||
@@ -0,0 +1,16 @@
|
||||
local DormJoystickPanel = class("DormJoystickPanel", BasePanel)
|
||||
DormJoystickPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormJoystick.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormJoystickCtrl"
|
||||
}
|
||||
}
|
||||
function DormJoystickPanel:Awake()
|
||||
end
|
||||
function DormJoystickPanel:OnEnable()
|
||||
end
|
||||
function DormJoystickPanel:OnDisable()
|
||||
end
|
||||
function DormJoystickPanel:OnDestroy()
|
||||
end
|
||||
return DormJoystickPanel
|
||||
@@ -0,0 +1,284 @@
|
||||
local DormMainMenuCtrl = class("DormMainMenuCtrl", BaseCtrl)
|
||||
DormMainMenuCtrl._mapNodeConfig = {
|
||||
btnFurnitureReward = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_FurnitureReward"
|
||||
},
|
||||
btnRecord = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Record"
|
||||
},
|
||||
btnQuest = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Quest"
|
||||
},
|
||||
btnSwitch = {
|
||||
nCount = 2,
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SwitchBtn"
|
||||
},
|
||||
btnEscape = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Escape"
|
||||
},
|
||||
btnEncyclopedia = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Encyclopedia"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
imgPlayerHead = {sComponentName = "Image"},
|
||||
txtWorldClass = {sComponentName = "TMP_Text"},
|
||||
txtRankCn = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MainView_RANK"
|
||||
},
|
||||
goHonorTitle = {
|
||||
sCtrlName = "Game.UI.FriendEx.HonorTitleCtrl"
|
||||
},
|
||||
txtName = {sComponentName = "TMP_Text"},
|
||||
btnName = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Rename"
|
||||
},
|
||||
txtMusicOnTitle1 = {sComponentName = "TMP_Text"},
|
||||
txtLikeTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_LikeTitle"
|
||||
},
|
||||
txtLikeCount = {sComponentName = "TMP_Text"},
|
||||
txtVisitorTitleDay = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_VisitorToday"
|
||||
},
|
||||
txtVisitorCountDay = {sComponentName = "TMP_Text"},
|
||||
txtVisitorTitleTotal = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_Visitor"
|
||||
},
|
||||
txtVisitorCountTotal = {sComponentName = "TMP_Text"},
|
||||
txtBtnRecord = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_Record"
|
||||
},
|
||||
txtBtnFurnitureReward = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_FurnitureReward"
|
||||
},
|
||||
txtBtnQuest = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormQuest_Title"
|
||||
},
|
||||
txtBtnEscape = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_Escape"
|
||||
},
|
||||
txtDefaultModeSwitch = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MainMenu_DefaultMode"
|
||||
},
|
||||
txtClickToContinue1 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "StarTower_Book_Close_Tip"
|
||||
},
|
||||
txtBtnEncyclopedia = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "DormMainMenu_Knowledge"
|
||||
},
|
||||
Content = {sComponentName = "Animator"},
|
||||
goRedRecord = {},
|
||||
goRedQuest = {}
|
||||
}
|
||||
DormMainMenuCtrl._mapEventConfig = {
|
||||
DormNameUpdate = "OnEvent_DormNameUpdate",
|
||||
DormBGMSetSuccess = "OnEvent_BGMUpdate"
|
||||
}
|
||||
DormMainMenuCtrl._mapRedDotConfig = {
|
||||
[RedDotDefine.DormQuest] = {sNodeName = "goRedQuest"},
|
||||
[RedDotDefine.DormRecord] = {
|
||||
sNodeName = "goRedRecord"
|
||||
}
|
||||
}
|
||||
function DormMainMenuCtrl:Awake()
|
||||
end
|
||||
function DormMainMenuCtrl:FadeIn()
|
||||
end
|
||||
function DormMainMenuCtrl:FadeOut()
|
||||
end
|
||||
function DormMainMenuCtrl:OnEnable()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {61})
|
||||
local tbParam = self:GetPanelParam()
|
||||
self.nCurRoom = tbParam[1]
|
||||
self:Refresh()
|
||||
local wait = function()
|
||||
self._mapNode.Content.gameObject:SetActive(false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.UIEffectSnapShotCapture(self._mapNode.snapshot.gameObject)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.Content.gameObject:SetActive(true)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function DormMainMenuCtrl:OnDisable()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {0})
|
||||
end
|
||||
function DormMainMenuCtrl:OnDestroy()
|
||||
end
|
||||
function DormMainMenuCtrl:OnRelease()
|
||||
end
|
||||
function DormMainMenuCtrl:Refresh()
|
||||
local mapPlayerDormInfo = PlayerData.PlayerDormData:GetPlayerBaseInfo()
|
||||
local nWorldClass = PlayerData.Base:GetWorldClass()
|
||||
local sPlayerName = PlayerData.Base:GetPlayerNickName()
|
||||
local nHeadId = PlayerData.Base:GetPlayerHeadId()
|
||||
local mapCfg = ConfigTable.GetData("PlayerHead", nHeadId)
|
||||
if mapCfg ~= nil then
|
||||
self:SetPngSprite(self._mapNode.imgPlayerHead, mapCfg.Icon)
|
||||
end
|
||||
local sDormName
|
||||
local nLike = 0
|
||||
local nVisitNumDay = 0
|
||||
local nVisitNumTotal = 0
|
||||
if mapPlayerDormInfo ~= nil then
|
||||
sDormName = mapPlayerDormInfo.DormName
|
||||
nLike = mapPlayerDormInfo.LikeNum
|
||||
nVisitNumDay = mapPlayerDormInfo.DayVisitNum
|
||||
nVisitNumTotal = mapPlayerDormInfo.VisitTotalNum
|
||||
end
|
||||
if sDormName == nil or sDormName == "" then
|
||||
sDormName = ConfigTable.GetUIText("Dorm_DefaultName")
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, sDormName)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLikeCount, nLike)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtVisitorCountDay, nVisitNumDay)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtVisitorCountTotal, nVisitNumTotal)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtWorldClass, nWorldClass)
|
||||
self:SetHornorTitle()
|
||||
local nDefaultMode = PlayerData.PlayerDormData:GetPanelDefaultMode()
|
||||
self._mapNode.btnSwitch[1].gameObject:SetActive(nDefaultMode == 1)
|
||||
self._mapNode.btnSwitch[2].gameObject:SetActive(nDefaultMode ~= 1)
|
||||
local callback = function(mapInfo)
|
||||
if mapInfo[self.nCurRoom] ~= nil then
|
||||
local nDiscId = mapInfo[self.nCurRoom].DiscId
|
||||
if 0 < nDiscId then
|
||||
local mapIPCfg = ConfigTable.GetData_Item(nDiscId)
|
||||
if mapIPCfg ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, mapIPCfg.Title)
|
||||
end
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
end
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:GetRoomInfo(callback)
|
||||
local LikeInfoCallback = function(nLike, nVisitNumDay, nVisitNumTotal)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtLikeCount, nLike)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtVisitorCountDay, nVisitNumDay)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtVisitorCountTotal, nVisitNumTotal)
|
||||
end
|
||||
PlayerData.PlayerDormData:UpdateLikeInfo(LikeInfoCallback)
|
||||
end
|
||||
function DormMainMenuCtrl:SetHornorTitle()
|
||||
local tbCurHonorTitle = PlayerData.Base:GetPlayerHonorTitle()
|
||||
local tbOwnHonorData = PlayerData.Base:GetPlayerHonorTitleList() or {}
|
||||
local nLevel = PlayerData.PlayerDormData:GetHonorTitleLevel()
|
||||
self._mapNode.goHonorTitle:SetHonotTitle(140001, true, nLevel)
|
||||
self._mapNode.goHonorTitle.gameObject:SetActive(true)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Close()
|
||||
local waitAnim = function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormMainMenuPanel)
|
||||
end
|
||||
self._mapNode.Content:Play("MenuSidePanel_out")
|
||||
self:AddTimer(1, 0.4, waitAnim, true, true, true)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_SwitchBtn(btn, nIdx)
|
||||
if nIdx == 1 then
|
||||
self._mapNode.btnSwitch[1].gameObject:SetActive(false)
|
||||
self._mapNode.btnSwitch[2].gameObject:SetActive(true)
|
||||
PlayerData.PlayerDormData:SetPanelDefaultMode(2)
|
||||
else
|
||||
self._mapNode.btnSwitch[1].gameObject:SetActive(true)
|
||||
self._mapNode.btnSwitch[2].gameObject:SetActive(false)
|
||||
PlayerData.PlayerDormData:SetPanelDefaultMode(1)
|
||||
end
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Escape()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_REFRESH_SCENE")
|
||||
self:OnBtnClick_Close()
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Rename()
|
||||
if not PlayerData.PlayerDormData:CheckCanRenameDorm() then
|
||||
return
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormRenamePanel, 0)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Quest()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormQuestPanel)
|
||||
end
|
||||
function DormMainMenuCtrl:OnEvent_DormNameUpdate()
|
||||
local mapPlayerDormInfo = PlayerData.PlayerDormData:GetPlayerBaseInfo()
|
||||
local sDormName
|
||||
if mapPlayerDormInfo ~= nil then
|
||||
sDormName = mapPlayerDormInfo.DormName
|
||||
end
|
||||
if sDormName == nil or sDormName == "" then
|
||||
sDormName = ConfigTable.GetUIText("Dorm_DefaultName")
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtName, sDormName)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Record()
|
||||
local GetInfoCallback = function(mapDormInfo)
|
||||
local tbDormInfo = {}
|
||||
for _, mapDormInfo in pairs(mapDormInfo) do
|
||||
table.insert(tbDormInfo, mapDormInfo)
|
||||
end
|
||||
local sort = function(a, b)
|
||||
return a.DormRoomId < b.DormRoomId
|
||||
end
|
||||
table.sort(tbDormInfo, sort)
|
||||
local nCurRoom = self.nCurRoom
|
||||
local nIdx = 1
|
||||
for index, mapRoomInfo in ipairs(tbDormInfo) do
|
||||
if nCurRoom == mapRoomInfo.DormRoomId then
|
||||
nIdx = index
|
||||
end
|
||||
end
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormMusicSelectPanel, nIdx, tbDormInfo)
|
||||
end
|
||||
PlayerData.PlayerDormData:GetRoomInfo(GetInfoCallback)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_FurnitureReward()
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormHandbookPanel, self.nCurRoom)
|
||||
end
|
||||
function DormMainMenuCtrl:OnBtnClick_Encyclopedia()
|
||||
local wait = function()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.Dictionary)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormMainMenuPanel)
|
||||
end
|
||||
function DormMainMenuCtrl:OnEvent_BGMUpdate()
|
||||
local callback = function(mapInfo)
|
||||
if mapInfo[self.nCurRoom] ~= nil then
|
||||
local nDiscId = mapInfo[self.nCurRoom].DiscId
|
||||
if 0 < nDiscId then
|
||||
local mapIPCfg = ConfigTable.GetData_Item(nDiscId)
|
||||
if mapIPCfg ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, mapIPCfg.Title)
|
||||
end
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
end
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:GetRoomInfo(callback)
|
||||
end
|
||||
return DormMainMenuCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormMainMenuPanel = class("DormMainMenuPanel", BasePanel)
|
||||
DormMainMenuPanel._bIsMainPanel = false
|
||||
DormMainMenuPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormMainMenuPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormMainMenuCtrl"
|
||||
}
|
||||
}
|
||||
function DormMainMenuPanel:Awake()
|
||||
end
|
||||
function DormMainMenuPanel:OnEnable()
|
||||
end
|
||||
function DormMainMenuPanel:OnAfterEnter()
|
||||
end
|
||||
function DormMainMenuPanel:OnDisable()
|
||||
end
|
||||
function DormMainMenuPanel:OnDestroy()
|
||||
end
|
||||
function DormMainMenuPanel:OnRelease()
|
||||
end
|
||||
return DormMainMenuPanel
|
||||
@@ -0,0 +1,267 @@
|
||||
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
|
||||
@@ -0,0 +1,278 @@
|
||||
local DormQuestCtrl = class("DormQuestCtrl", BaseCtrl)
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
DormQuestCtrl._mapNodeConfig = {
|
||||
imgChapter = {sComponentName = "Image"},
|
||||
txtChapter = {sComponentName = "TMP_Text"},
|
||||
txtTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_Quest_GroupTitle"
|
||||
},
|
||||
txtNum = {sComponentName = "TMP_Text"},
|
||||
txtActComplete = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_undone"
|
||||
},
|
||||
txtBtnReceiveChapter = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_Receive_Btn_Text"
|
||||
},
|
||||
txtBtnFastReceiveGray = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_Fast_Receive_Btn_Text"
|
||||
},
|
||||
txtBtnFastReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_Fast_Receive_Btn_Text"
|
||||
},
|
||||
imgComplete = {},
|
||||
rewardItem = {
|
||||
nCount = 5,
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
btnRewardItem = {
|
||||
sComponentName = "UIButton",
|
||||
nCount = 5,
|
||||
callback = "OnBtnClick_GroupReward"
|
||||
},
|
||||
imgEmpty = {nCount = 5},
|
||||
btnReceiveChapter = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_GroupReceive"
|
||||
},
|
||||
guideQuestLSV = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnFastReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_FastReceive"
|
||||
},
|
||||
btnFastReceiveGray = {sComponentName = "UIButton"},
|
||||
btnCloseQuest = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
snapshot = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
rtQuest = {sComponentName = "Animator"}
|
||||
}
|
||||
DormQuestCtrl._mapEventConfig = {
|
||||
DormQuestGridReceive = "OnEvent_GridRecieveClick"
|
||||
}
|
||||
DormQuestCtrl._mapRedDotConfig = {}
|
||||
function DormQuestCtrl:Awake()
|
||||
self._mapCtrl = {}
|
||||
end
|
||||
function DormQuestCtrl:FadeIn()
|
||||
end
|
||||
function DormQuestCtrl:FadeOut()
|
||||
end
|
||||
function DormQuestCtrl:OnEnable()
|
||||
self.bNeedBlockOperate = false
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.bNeedBlockOperate = tbParam[1] == true
|
||||
end
|
||||
if self.bNeedBlockOperate then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {61})
|
||||
end
|
||||
local wait = function()
|
||||
self._mapNode.rtQuest.gameObject:SetActive(false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.UIEffectSnapShotCapture(self._mapNode.snapshot.gameObject)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.rtQuest.gameObject:SetActive(true)
|
||||
self._mapNode.rtQuest:Play("rtQuest_in")
|
||||
DormGuideUI.BindOverlay("quest", self)
|
||||
self:RefreshPanel()
|
||||
if DormGuideUI._bQuestLock then
|
||||
self:SetGuideOperateLock(true)
|
||||
end
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function DormQuestCtrl:RefreshPanel()
|
||||
self.tbGroupRewardId = {}
|
||||
local nCurGroup, nGroupState, tbQuest = PlayerData.PlayerDormData:GetDormQuestDataWithGroup()
|
||||
self.nCurGroup = nCurGroup
|
||||
self.nGroupState = nGroupState
|
||||
local bFastReceive = false
|
||||
if self.nCurGroup ~= 0 then
|
||||
if tbQuest == nil then
|
||||
tbQuest = {}
|
||||
end
|
||||
else
|
||||
tbQuest = {}
|
||||
local nCurGroup = 0
|
||||
local forEachGroup = function(mapData)
|
||||
nCurGroup = math.max(nCurGroup, mapData.Id)
|
||||
end
|
||||
ForEachTableLine(DataTable.DormQuestGroup, forEachGroup)
|
||||
if nCurGroup ~= 0 then
|
||||
self.nCurGroup = nCurGroup
|
||||
self.nGroupState = 1
|
||||
do
|
||||
local forEachQuest = function(mapData)
|
||||
if mapData.DormQuestGroup == nCurGroup then
|
||||
table.insert(tbQuest, {
|
||||
nTid = mapData.Id,
|
||||
nGoal = 0,
|
||||
nCurProgress = 0,
|
||||
nStatus = 2,
|
||||
nExpire = -1
|
||||
})
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.DormQuest, forEachQuest)
|
||||
end
|
||||
end
|
||||
end
|
||||
local statusOrder = {
|
||||
[0] = 1,
|
||||
[1] = 2,
|
||||
[2] = 0
|
||||
}
|
||||
local sort = function(a, b)
|
||||
if a.nStatus ~= b.nStatus then
|
||||
return statusOrder[a.nStatus] > statusOrder[b.nStatus]
|
||||
end
|
||||
return a.nTid < b.nTid
|
||||
end
|
||||
table.sort(tbQuest, sort)
|
||||
self.tbQuest = tbQuest
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
if DormGuideUI.IsLeaveLocked() then
|
||||
self._mapNode.guideQuestLSV:SetAnim(0)
|
||||
else
|
||||
self._mapNode.guideQuestLSV:SetAnim(0.08)
|
||||
end
|
||||
self._mapNode.guideQuestLSV:Init(#tbQuest, self, self.OnGridRefresh)
|
||||
self:RefreshGroup()
|
||||
end
|
||||
function DormQuestCtrl:RefreshGroup()
|
||||
local bFastReceive = false
|
||||
local mapGroupCfgData = ConfigTable.GetData("DormQuestGroup", self.nCurGroup)
|
||||
if mapGroupCfgData == nil then
|
||||
return
|
||||
end
|
||||
self.tbGroupRewardId = {
|
||||
mapGroupCfgData.Item1,
|
||||
mapGroupCfgData.Item2,
|
||||
mapGroupCfgData.Item3
|
||||
}
|
||||
for i = 1, 3 do
|
||||
self._mapNode.rewardItem[i].gameObject:SetActive(mapGroupCfgData["Item" .. i] ~= 0)
|
||||
self._mapNode.imgEmpty[i].gameObject:SetActive(mapGroupCfgData["Item" .. i] == 0)
|
||||
if mapGroupCfgData["Item" .. i] ~= 0 then
|
||||
self._mapNode.rewardItem[i]:SetItem(mapGroupCfgData["Item" .. i], nil, mapGroupCfgData["Qty" .. i], nil, self.nGroupState == 1, nil, nil, true)
|
||||
end
|
||||
end
|
||||
local nTotalCount = 0
|
||||
local nCurCount = 0
|
||||
if self.tbQuest ~= nil then
|
||||
for _, v in ipairs(self.tbQuest) do
|
||||
nTotalCount = nTotalCount + 1
|
||||
if v.nStatus == 2 then
|
||||
nCurCount = nCurCount + 1
|
||||
end
|
||||
if v.nStatus == 1 then
|
||||
bFastReceive = true
|
||||
end
|
||||
end
|
||||
end
|
||||
if nTotalCount <= nCurCount and self.nGroupState == 0 then
|
||||
bFastReceive = true
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtChapter, mapGroupCfgData.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtNum, string.format("%d/%d", nCurCount, nTotalCount))
|
||||
self._mapNode.imgComplete:SetActive(self.nGroupState == 1)
|
||||
self._mapNode.txtActComplete.gameObject:SetActive(nTotalCount > nCurCount and self.nGroupState == 0)
|
||||
self._mapNode.btnReceiveChapter.gameObject:SetActive(nTotalCount <= nCurCount and self.nGroupState == 0)
|
||||
self._mapNode.btnFastReceiveGray.gameObject:SetActive(not bFastReceive)
|
||||
self._mapNode.btnFastReceive.gameObject:SetActive(bFastReceive)
|
||||
end
|
||||
function DormQuestCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
if self._mapCtrl[goGrid] == nil then
|
||||
self._mapCtrl[goGrid] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormQuest.DormQuestGridCtrl")
|
||||
end
|
||||
local nIdx = gridIndex + 1
|
||||
self._mapCtrl[goGrid]:Refresh(self.tbQuest[nIdx])
|
||||
if DormGuideUI._bQuestLock then
|
||||
self:SetGuideOperateLock(true)
|
||||
end
|
||||
end
|
||||
function DormQuestCtrl:OnDisable()
|
||||
if self.bNeedBlockOperate then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SET_UI_HIDDEN", nil, {0})
|
||||
end
|
||||
DormGuideUI.UnbindOverlay("quest", self)
|
||||
for nInstanceId, objCtrl in pairs(self._mapCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
end
|
||||
self._mapCtrl = nil
|
||||
end
|
||||
function DormQuestCtrl:OnDestroy()
|
||||
end
|
||||
function DormQuestCtrl:OnRelease()
|
||||
end
|
||||
function DormQuestCtrl:OnBtnClick_Close()
|
||||
self._mapNode.rtQuest:Play("rtQuest_out")
|
||||
self:AddTimer(1, 0.25, function()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormQuestPanel)
|
||||
end, true, true, true)
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.25)
|
||||
end
|
||||
function DormQuestCtrl:OnBtnClick_FastReceive()
|
||||
local callback = function()
|
||||
self:RefreshPanel()
|
||||
end
|
||||
PlayerData.Quest:ReceiveDormQuest(0, 0, callback)
|
||||
end
|
||||
function DormQuestCtrl:OnBtnClick_GroupReceive()
|
||||
local callback = function()
|
||||
self:RefreshPanel()
|
||||
end
|
||||
PlayerData.Quest:ReceiveDormQuest(1, self.nCurGroup, callback)
|
||||
end
|
||||
function DormQuestCtrl:OnBtnClick_GroupReward(btn, nIdx)
|
||||
local nItemId = self.tbGroupRewardId[nIdx]
|
||||
if nItemId ~= nil then
|
||||
UTILS.ClickItemGridWithTips(nItemId, btn.transform, true, true, false)
|
||||
end
|
||||
end
|
||||
function DormQuestCtrl:SetGuideOperateLock(bLock)
|
||||
local SetBtn = function(btn, bOn)
|
||||
if btn ~= nil then
|
||||
btn.interactable = bOn
|
||||
end
|
||||
end
|
||||
SetBtn(self._mapNode.btnCloseQuest, not bLock)
|
||||
SetBtn(self._mapNode.snapshot, not bLock)
|
||||
SetBtn(self._mapNode.btnFastReceive, not bLock)
|
||||
if self._mapCtrl == nil then
|
||||
return
|
||||
end
|
||||
for _, objGrid in pairs(self._mapCtrl) do
|
||||
if objGrid._mapNode ~= nil and objGrid._mapNode.btnReceive ~= nil then
|
||||
local bCan = objGrid.mapDormQuest ~= nil and objGrid.mapDormQuest.nStatus == 1
|
||||
objGrid._mapNode.btnReceive.interactable = not bLock and bCan
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormQuestCtrl:IsGuideEnterDone()
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
return DormGuideAdapter.AnimatorSettled(self._mapNode.rtQuest, "rtQuest_in")
|
||||
end
|
||||
function DormQuestCtrl:OnEvent_GridRecieveClick(nId)
|
||||
local DormGuideAdapter = require("Game.UI.Dorm.DormGuideAdapter")
|
||||
local callback = function()
|
||||
self:RefreshPanel()
|
||||
DormGuideAdapter.NoteQuest(nId, true)
|
||||
if DormGuideUI._bQuestLock then
|
||||
self:SetGuideOperateLock(true)
|
||||
end
|
||||
end
|
||||
PlayerData.Quest:ReceiveDormQuest(0, nId, callback)
|
||||
end
|
||||
return DormQuestCtrl
|
||||
@@ -0,0 +1,109 @@
|
||||
local DormQuestGridCtrl = class("DormQuestGridCtrl", BaseCtrl)
|
||||
local JumpUtil = require("Game.Common.Utils.JumpUtil")
|
||||
local totalLength = 616
|
||||
local totalHeight = 37
|
||||
DormQuestGridCtrl._mapNodeConfig = {
|
||||
txtQuestDesc = {sComponentName = "TMP_Text"},
|
||||
txtProgress = {sComponentName = "TMP_Text"},
|
||||
txtUnComplete = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_undone"
|
||||
},
|
||||
txtBtnReceive = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_Receive_Btn_Text"
|
||||
},
|
||||
txtBtnJump = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Quest_JumpTo_Text"
|
||||
},
|
||||
imgReceived = {},
|
||||
imgCompleteMask = {},
|
||||
rtProgressFill = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnItem = {
|
||||
sComponentName = "UIButton",
|
||||
nCount = 2,
|
||||
callback = "OnBtnClick_Reward"
|
||||
},
|
||||
btnReceive = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Receive"
|
||||
},
|
||||
btnJump = {sComponentName = "UIButton"},
|
||||
goRewardItem = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl",
|
||||
nCount = 2
|
||||
},
|
||||
imgRewardEmpty = {nCount = 2}
|
||||
}
|
||||
DormQuestGridCtrl._mapEventConfig = {}
|
||||
DormQuestGridCtrl._mapRedDotConfig = {}
|
||||
function DormQuestGridCtrl:Awake()
|
||||
end
|
||||
function DormQuestGridCtrl:FadeIn()
|
||||
end
|
||||
function DormQuestGridCtrl:FadeOut()
|
||||
end
|
||||
function DormQuestGridCtrl:OnEnable()
|
||||
end
|
||||
function DormQuestGridCtrl:OnDisable()
|
||||
end
|
||||
function DormQuestGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormQuestGridCtrl:OnRelease()
|
||||
end
|
||||
function DormQuestGridCtrl:Refresh(mapDormQuest)
|
||||
if mapDormQuest == nil then
|
||||
self.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
local mapDormQuestCfgData = ConfigTable.GetData("DormQuest", mapDormQuest.nTid)
|
||||
if mapDormQuestCfgData == nil then
|
||||
self.gameObject:SetActive(false)
|
||||
return
|
||||
end
|
||||
self.mapDormQuestCfgData = mapDormQuestCfgData
|
||||
self.mapDormQuest = mapDormQuest
|
||||
NovaAPI.SetTMPText(self._mapNode.txtQuestDesc, mapDormQuestCfgData.Title)
|
||||
self.tbRewardId = {
|
||||
mapDormQuestCfgData.Reward1,
|
||||
mapDormQuestCfgData.Reward2
|
||||
}
|
||||
for i = 1, 2 do
|
||||
self._mapNode.goRewardItem[i].gameObject:SetActive(mapDormQuestCfgData["Reward" .. i] ~= 0)
|
||||
self._mapNode.imgRewardEmpty[i].gameObject:SetActive(mapDormQuestCfgData["Reward" .. i] == 0)
|
||||
if mapDormQuestCfgData["Reward" .. i] ~= 0 then
|
||||
self._mapNode.goRewardItem[i]:SetItem(mapDormQuestCfgData["Reward" .. i], nil, mapDormQuestCfgData["RewardQty" .. i], nil, mapDormQuest.nStatus == 2, nil, nil, true)
|
||||
end
|
||||
end
|
||||
if mapDormQuest.nStatus ~= 2 then
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, string.format("%d/%d", mapDormQuest.nCurProgress, mapDormQuest.nGoal))
|
||||
self._mapNode.rtProgressFill.sizeDelta = Vector2(mapDormQuest.nCurProgress / mapDormQuest.nGoal * totalLength, totalHeight)
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.txtProgress, ConfigTable.GetUIText("Quest_Complete"))
|
||||
self._mapNode.rtProgressFill.sizeDelta = Vector2(totalLength, totalHeight)
|
||||
end
|
||||
self._mapNode.imgReceived:SetActive(mapDormQuest.nStatus == 2)
|
||||
self._mapNode.imgCompleteMask:SetActive(mapDormQuest.nStatus == 2)
|
||||
self._mapNode.txtUnComplete.gameObject:SetActive(mapDormQuest.nStatus == 0 and mapDormQuestCfgData.JumpTo == 0)
|
||||
self._mapNode.btnJump.gameObject:SetActive(mapDormQuest.nStatus == 0 and mapDormQuestCfgData.JumpTo ~= 0)
|
||||
self._mapNode.btnReceive.gameObject:SetActive(mapDormQuest.nStatus == 1)
|
||||
end
|
||||
function DormQuestGridCtrl:ShowItemDetail(id, rtIcon)
|
||||
UTILS.ClickItemGridWithTips(id, rtIcon.transform, true, true, false)
|
||||
end
|
||||
function DormQuestGridCtrl:OnBtnClick_Receive()
|
||||
EventManager.Hit("DormQuestGridReceive", self.mapDormQuest.nTid)
|
||||
end
|
||||
function DormQuestGridCtrl:OnBtnClick_JumpTo()
|
||||
local nJumptoId = self.mapDormQuestCfgData.JumpTo
|
||||
JumpUtil.JumpTo(nJumptoId)
|
||||
end
|
||||
function DormQuestGridCtrl:OnBtnClick_Reward(btn, nIdx)
|
||||
if self.tbRewardId[nIdx] ~= 0 then
|
||||
self:ShowItemDetail(self.tbRewardId[nIdx], btn)
|
||||
end
|
||||
end
|
||||
return DormQuestGridCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormQuestPanel = class("DormQuestPanel", BasePanel)
|
||||
DormQuestPanel._bIsMainPanel = false
|
||||
DormQuestPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormQuestPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormQuest.DormQuestCtrl"
|
||||
}
|
||||
}
|
||||
function DormQuestPanel:Awake()
|
||||
end
|
||||
function DormQuestPanel:OnEnable()
|
||||
end
|
||||
function DormQuestPanel:OnAfterEnter()
|
||||
end
|
||||
function DormQuestPanel:OnDisable()
|
||||
end
|
||||
function DormQuestPanel:OnDestroy()
|
||||
end
|
||||
function DormQuestPanel:OnRelease()
|
||||
end
|
||||
return DormQuestPanel
|
||||
@@ -0,0 +1,95 @@
|
||||
local DormRoomGridCtrl = class("DormRoomGridCtrl", BaseCtrl)
|
||||
DormRoomGridCtrl._mapNodeConfig = {
|
||||
imgRoomIcon = {sComponentName = "Image"},
|
||||
imgCurMark = {},
|
||||
imgRoomempty = {},
|
||||
imgNameBg = {},
|
||||
imgLock = {},
|
||||
TMPRoomName = {sComponentName = "TMP_Text"},
|
||||
txtBtnGo = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MainView_Go"
|
||||
},
|
||||
TMPRoomNotAvailable = {sComponentName = "TMP_Text"},
|
||||
txtBtnGoGray = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "MainView_Go"
|
||||
},
|
||||
btnGo = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Go"
|
||||
},
|
||||
btnGoGray = {sComponentName = "UIButton"},
|
||||
AnimRoot = {
|
||||
sNodeName = "AnimRootTop",
|
||||
sComponentName = "Animator"
|
||||
}
|
||||
}
|
||||
DormRoomGridCtrl._mapEventConfig = {}
|
||||
DormRoomGridCtrl._mapRedDotConfig = {}
|
||||
function DormRoomGridCtrl:Awake()
|
||||
self.nRoomId = 0
|
||||
end
|
||||
function DormRoomGridCtrl:FadeIn()
|
||||
end
|
||||
function DormRoomGridCtrl:FadeOut()
|
||||
end
|
||||
function DormRoomGridCtrl:OnEnable()
|
||||
end
|
||||
function DormRoomGridCtrl:OnDisable()
|
||||
end
|
||||
function DormRoomGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormRoomGridCtrl:OnRelease()
|
||||
end
|
||||
function DormRoomGridCtrl:Refresh(nRoomId, nSceneId, sRoomName, bAvailable, bCurRoom, bFriend)
|
||||
self._mapNode.imgCurMark:SetActive(bCurRoom)
|
||||
self._mapNode.imgLock:SetActive(not bAvailable)
|
||||
self._mapNode.imgRoomIcon.gameObject:SetActive(bAvailable)
|
||||
self._mapNode.imgRoomempty:SetActive(false)
|
||||
self.nRoomId = nRoomId
|
||||
if nRoomId == 0 then
|
||||
self._mapNode.imgLock:SetActive(false)
|
||||
self._mapNode.imgRoomempty:SetActive(true)
|
||||
self._mapNode.imgRoomIcon.gameObject:SetActive(false)
|
||||
self._mapNode.imgNameBg:SetActive(false)
|
||||
self._mapNode.btnGo.gameObject:SetActive(false)
|
||||
self._mapNode.btnGoGray.gameObject:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomNotAvailable, ConfigTable.GetUIText("Dorm_RoomNotAvailable"))
|
||||
return
|
||||
end
|
||||
if bFriend then
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomNotAvailable, ConfigTable.GetUIText("Dorm_RoomNotOpen"))
|
||||
else
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomNotAvailable, ConfigTable.GetUIText("Dorm_RoomNotAvailable_Lock"))
|
||||
end
|
||||
if bAvailable then
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomName, sRoomName)
|
||||
self._mapNode.imgNameBg:SetActive(true)
|
||||
self._mapNode.TMPRoomNotAvailable.gameObject:SetActive(false)
|
||||
else
|
||||
self._mapNode.imgNameBg:SetActive(false)
|
||||
self._mapNode.TMPRoomNotAvailable.gameObject:SetActive(true)
|
||||
end
|
||||
local mapSceneCfgData = ConfigTable.GetData("DormRoomScene", nSceneId)
|
||||
if mapSceneCfgData ~= nil then
|
||||
self:SetPngSprite(self._mapNode.imgRoomIcon, mapSceneCfgData.IconRes)
|
||||
else
|
||||
end
|
||||
self._mapNode.btnGo.gameObject:SetActive(bAvailable and not bCurRoom)
|
||||
self._mapNode.btnGoGray.gameObject:SetActive(bAvailable and bCurRoom)
|
||||
end
|
||||
function DormRoomGridCtrl:PlayAnim()
|
||||
self.nUnlockAnimRoomId = self.nRoomId
|
||||
self._mapNode.AnimRoot:Play("DormRoomSelectLock", 0, 0)
|
||||
self:SetAnimationCallback(self._mapNode.AnimRoot, "OnUnlockAnimEnd")
|
||||
end
|
||||
function DormRoomGridCtrl:OnUnlockAnimEnd()
|
||||
local nRoomId = self.nUnlockAnimRoomId or self.nRoomId
|
||||
self.nUnlockAnimRoomId = nil
|
||||
EventManager.Hit("DormRoomSelect_UnlockAnimEnd", nRoomId)
|
||||
end
|
||||
function DormRoomGridCtrl:OnBtnClick_Go(btn)
|
||||
EventManager.Hit("DormRoomSelect_ChangeRoom", self.nRoomId)
|
||||
end
|
||||
return DormRoomGridCtrl
|
||||
@@ -0,0 +1,108 @@
|
||||
local DormRoomSelectCtrl = class("DormRoomSelectCtrl", BaseCtrl)
|
||||
local DormGuideUI = require("Game.UI.Dorm.DormGuideUI")
|
||||
DormRoomSelectCtrl._mapNodeConfig = {
|
||||
snapshot = {},
|
||||
CharListRoot = {},
|
||||
svRoomList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
}
|
||||
}
|
||||
DormRoomSelectCtrl._mapEventConfig = {
|
||||
DormRoomSelect_ChangeRoom = "OnEvent_ChangeRoom",
|
||||
[EventId.UIBackConfirm] = "OnEvent_Back"
|
||||
}
|
||||
DormRoomSelectCtrl._mapRedDotConfig = {}
|
||||
function DormRoomSelectCtrl:Awake()
|
||||
end
|
||||
function DormRoomSelectCtrl:FadeIn()
|
||||
end
|
||||
function DormRoomSelectCtrl:FadeOut()
|
||||
end
|
||||
function DormRoomSelectCtrl:OnEnable()
|
||||
DormGuideUI.BindOverlay("roomSelect", self)
|
||||
local wait = function()
|
||||
self._mapNode.CharListRoot.gameObject:SetActive(false)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
NovaAPI.UIEffectSnapShotCapture(self._mapNode.snapshot.gameObject)
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
self._mapNode.CharListRoot.gameObject:SetActive(true)
|
||||
local tbParam = self:GetPanelParam()
|
||||
local mapRoom = tbParam[1]
|
||||
local nCurRoomId = tbParam[2]
|
||||
self.bElevator = tbParam[3]
|
||||
self.bFriend = tbParam[4]
|
||||
self.tbAllRoom = {}
|
||||
self.mapGridCtrl = {}
|
||||
local forEachRoom = function(mapData)
|
||||
table.insert(self.tbAllRoom, mapData)
|
||||
end
|
||||
ForEachTableLine(DataTable.DormRoom, forEachRoom)
|
||||
local sort = function(a, b)
|
||||
return a.Id < b.Id
|
||||
end
|
||||
table.sort(self.tbAllRoom, sort)
|
||||
self.tbNewRoom = PlayerData.PlayerDormData:GetNewRoom()
|
||||
self.mapRoomData = mapRoom
|
||||
self.nCurRoomId = nCurRoomId
|
||||
self._mapNode.svRoomList:SetAnim(0.08)
|
||||
local nSum = #self.tbAllRoom >= 6 and 0 or 1
|
||||
self._mapNode.svRoomList:Init(#self.tbAllRoom + nSum, self, self.OnGridRefresh)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
function DormRoomSelectCtrl:IsRoomAvailable(nRoomId)
|
||||
return self.mapRoomData ~= nil and self.mapRoomData[nRoomId] ~= nil
|
||||
end
|
||||
function DormRoomSelectCtrl:OnDisable()
|
||||
DormGuideUI.UnbindOverlay("roomSelect", self)
|
||||
for nInstanceId, objCtrl in pairs(self.mapGridCtrl or {}) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
end
|
||||
self.mapGridCtrl = {}
|
||||
end
|
||||
function DormRoomSelectCtrl:OnGridRefresh(goGrid, gridIndex)
|
||||
local nIndex = gridIndex + 1
|
||||
local mapRoomCfgData = self.tbAllRoom[nIndex]
|
||||
local nInstanceID = goGrid:GetInstanceID()
|
||||
if not self.mapGridCtrl[nInstanceID] then
|
||||
self.mapGridCtrl[nInstanceID] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.DormRoomSelectPanel.DormRoomGridCtrl")
|
||||
end
|
||||
if mapRoomCfgData == nil then
|
||||
self.mapGridCtrl[nInstanceID]:Refresh(0, 0, "", false, false, self.bFriend)
|
||||
return
|
||||
end
|
||||
local mapRoomData = self.mapRoomData[mapRoomCfgData.Id]
|
||||
local bAvailable = mapRoomData ~= nil
|
||||
local bCurRoom = mapRoomCfgData.Id == self.nCurRoomId
|
||||
local nSceneId = mapRoomData == nil and 0 or mapRoomData.RoomScene
|
||||
if nSceneId == 0 then
|
||||
nSceneId = mapRoomCfgData.SceneRes
|
||||
end
|
||||
local sRoomName = mapRoomData == nil or mapRoomData.RoomName == nil or mapRoomData.RoomName == "" and mapRoomCfgData.DefaultName or mapRoomData.RoomName
|
||||
self.mapGridCtrl[nInstanceID]:Refresh(mapRoomCfgData.Id, nSceneId, sRoomName, bAvailable, bCurRoom, self.bFriend)
|
||||
local nIdx = table.indexof(self.tbNewRoom, mapRoomCfgData.Id)
|
||||
local bNewRoom = 0 < nIdx
|
||||
if bNewRoom then
|
||||
table.remove(self.tbNewRoom, nIdx)
|
||||
self.mapGridCtrl[nInstanceID]:PlayAnim()
|
||||
elseif self.mapGridCtrl[nInstanceID].nUnlockAnimRoomId ~= mapRoomCfgData.Id then
|
||||
EventManager.Hit("DormRoomSelect_UnlockAnimEnd", mapRoomCfgData.Id)
|
||||
end
|
||||
end
|
||||
function DormRoomSelectCtrl:OnDestroy()
|
||||
end
|
||||
function DormRoomSelectCtrl:OnRelease()
|
||||
end
|
||||
function DormRoomSelectCtrl:OnEvent_ChangeRoom(nRoomId)
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormRoomSelectPanel)
|
||||
EventManager.Hit("DormRoomSelect_ChangeRoomResult", true, nRoomId, self.bElevator)
|
||||
end
|
||||
function DormRoomSelectCtrl:OnEvent_Back()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormRoomSelectPanel)
|
||||
EventManager.Hit("DormRoomSelect_ChangeRoomResult", false, 0, self.bElevator)
|
||||
end
|
||||
return DormRoomSelectCtrl
|
||||
@@ -0,0 +1,21 @@
|
||||
local DormRoomSelectPanel = class("DormRoomSelectPanel", BasePanel)
|
||||
DormRoomSelectPanel._bIsMainPanel = false
|
||||
DormRoomSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormRoomSelectPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.DormRoomSelectPanel.DormRoomSelectCtrl"
|
||||
}
|
||||
}
|
||||
function DormRoomSelectPanel:Awake()
|
||||
end
|
||||
function DormRoomSelectPanel:OnEnable()
|
||||
end
|
||||
function DormRoomSelectPanel:OnAfterEnter()
|
||||
end
|
||||
function DormRoomSelectPanel:OnDisable()
|
||||
end
|
||||
function DormRoomSelectPanel:OnDestroy()
|
||||
end
|
||||
function DormRoomSelectPanel:OnRelease()
|
||||
end
|
||||
return DormRoomSelectPanel
|
||||
@@ -0,0 +1,392 @@
|
||||
local DormCtrl = class("DormCtrl", BaseCtrl)
|
||||
DormCtrl._mapNodeConfig = {
|
||||
TopBar = {
|
||||
sNodeName = "TopBarPanel",
|
||||
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
||||
},
|
||||
rtEditorRoot = {
|
||||
sCtrlName = "Game.UI.Dorm.Legacy.DormEditorCtrl"
|
||||
},
|
||||
rtInteractiveRoot = {
|
||||
sCtrlName = "Game.UI.Dorm.Legacy.DormInteractiveCtrl"
|
||||
},
|
||||
TestHotFix = {sComponentName = "Text"},
|
||||
btnTestHotFix = {
|
||||
sComponentName = "UIButton",
|
||||
nCount = 3,
|
||||
callback = "HotFixTestBtn"
|
||||
},
|
||||
CharListRoot = {
|
||||
sCtrlName = "Game.UI.Dorm.DormCharSelect.DormSelectCharCtrl"
|
||||
}
|
||||
}
|
||||
DormCtrl._mapEventConfig = {
|
||||
[EventId.UIBackConfirm] = "OnEvent_Back",
|
||||
[EventId.UIHomeConfirm] = "OnEvent_Home",
|
||||
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",
|
||||
DormCharInteractive = "OnEvent_DormCharInteractive",
|
||||
DormCharGiftSend = "OnEvent_DormCharGift"
|
||||
}
|
||||
function DormCtrl:Awake()
|
||||
end
|
||||
function DormCtrl:OnEnable()
|
||||
self.nSelectedRoomId = 0
|
||||
local tbParam = self:GetPanelParam()
|
||||
local roomId = tbParam[1]
|
||||
self.gameObject:SetActive(false)
|
||||
local bGetRoomInfo = false
|
||||
local bGetBagInfo = false
|
||||
local GetRoomInfoCallback = function(mapDormRoomInfo)
|
||||
bGetRoomInfo = true
|
||||
if roomId == nil or roomId <= 0 then
|
||||
for nRoomId, _ in pairs(mapDormRoomInfo) do
|
||||
if roomId == 0 or roomId == nil then
|
||||
roomId = nRoomId
|
||||
else
|
||||
roomId = math.min(roomId, nRoomId)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._panel.nCurRoom = roomId
|
||||
self._panel.mapDormRoomInfo = mapDormRoomInfo
|
||||
if bGetBagInfo then
|
||||
NovaAPI.EnterModule("DormModuleScene", true)
|
||||
self._mapNode.rtEditorRoot:Init(self._panel.nCurRoom)
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:GetRoomInfo(GetRoomInfoCallback)
|
||||
local GetBagInfoCallback = function(mapFurnitureBag)
|
||||
bGetBagInfo = true
|
||||
self._panel.mapFurnitureBag = mapFurnitureBag
|
||||
self._panel.mapFurnitureUsedCount = PlayerData.PlayerDormData:GetUsedCount()
|
||||
if bGetRoomInfo then
|
||||
NovaAPI.EnterModule("DormModuleScene", true)
|
||||
self._mapNode.rtEditorRoot:Init(self._panel.nCurRoom)
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:GetBagInfo(GetBagInfoCallback)
|
||||
end
|
||||
function DormCtrl:SwitchRoom(nRoomId)
|
||||
local nNextRoom = nRoomId
|
||||
self._panel.nCurRoom = nNextRoom
|
||||
self._mapNode.rtEditorRoot:Init(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.Char:GetCharSkinId(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)
|
||||
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {false, 0})
|
||||
end
|
||||
function DormCtrl:OnEvent_Back(nPanelId)
|
||||
if self._panel._nPanelId ~= nPanelId then
|
||||
return
|
||||
end
|
||||
if self._panel.nCurMode == 2 then
|
||||
self:OnEvent_InteractiveMode()
|
||||
return
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function DormCtrl:OnEvent_Home(nPanelId)
|
||||
if self._panel._nPanelId ~= nPanelId then
|
||||
return
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
|
||||
self.gameObject:SetActive(false)
|
||||
end
|
||||
function DormCtrl:OnEvent_EditMode()
|
||||
self._mapNode.rtEditorRoot.gameObject:SetActive(true)
|
||||
self._mapNode.rtInteractiveRoot:RecycleAllInteractiveHudCtrl()
|
||||
self._mapNode.rtInteractiveRoot.gameObject:SetActive(false)
|
||||
self._panel.nCurMode = 2
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {2})
|
||||
end
|
||||
function DormCtrl:OnEvent_InteractiveMode()
|
||||
local callback = function(bSaveSuc)
|
||||
self._panel.tempEditCount = {}
|
||||
self._mapNode.rtEditorRoot.gameObject:SetActive(false)
|
||||
self._mapNode.rtInteractiveRoot.gameObject:SetActive(true)
|
||||
self._mapNode.rtInteractiveRoot:SetMode(self._panel.nCurInteractiveMode)
|
||||
self._panel.nCurMode = self._panel.nCurInteractiveMode
|
||||
if bSaveSuc then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM_SUCC")
|
||||
else
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_ABANDON_SAVE_ROOM")
|
||||
end
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
|
||||
self._panel.nCurInteractiveMode
|
||||
})
|
||||
end
|
||||
self._panel:SaveRoom(callback, false)
|
||||
end
|
||||
function DormCtrl:OnEvent_ObserveMode()
|
||||
self._mapNode.rtInteractiveRoot:SetMode(1)
|
||||
self._panel.nCurMode = 1
|
||||
self._panel.nCurInteractiveMode = 1
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {1})
|
||||
end
|
||||
function DormCtrl:OnEvent_OperateMode()
|
||||
self._mapNode.rtInteractiveRoot:SetMode(0)
|
||||
self._panel.nCurMode = 0
|
||||
self._panel.nCurInteractiveMode = 0
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {0})
|
||||
end
|
||||
function DormCtrl:OnEvent_NextRoom()
|
||||
local nCurRoom = self._panel.nCurRoom
|
||||
local mapRoomData = self._panel.mapDormRoomInfo
|
||||
self.gameObject:SetActive(false)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapRoomData, nCurRoom, false)
|
||||
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)
|
||||
if self._panel.nCurMode == 0 or self._panel.nCurMode == 1 then
|
||||
self._panel.nCurInteractiveMode = self._panel.nCurMode
|
||||
self._mapNode.rtInteractiveRoot:SetMode(self._panel.nCurMode)
|
||||
end
|
||||
self.gameObject:SetActive(true)
|
||||
EventManager.Hit(EventId.SetTransition)
|
||||
end
|
||||
function DormCtrl:OnEvent_DormLevelFinish()
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
end
|
||||
function DormCtrl:HotFixTestBtn(btn, idx)
|
||||
if idx == 1 then
|
||||
local tbTestRet = safe_call_cs_func(CS.DormModuleHelper_HotFix.TestGetDormData, 1)
|
||||
local str = ""
|
||||
for i = 0, 2 do
|
||||
str = str .. tbTestRet[i]
|
||||
end
|
||||
self._mapNode.TestHotFix.text = str
|
||||
elseif idx == 2 then
|
||||
local str = safe_call_cs_func(CS.DormModuleHelper_HotFix.TestGetDormData1, "test2")
|
||||
self._mapNode.TestHotFix.text = str
|
||||
else
|
||||
safe_call_cs_func(CS.DormModuleHelper_HotFix.TestGetDormData2, self._mapNode.TestHotFix.gameObject)
|
||||
end
|
||||
end
|
||||
function DormCtrl:OnEvent_SelectRoom()
|
||||
local nCurRoom = self._panel.nCurRoom
|
||||
local mapRoomData = self._panel.mapDormRoomInfo
|
||||
self.gameObject:SetActive(false)
|
||||
EventManager.Hit(EventId.OpenPanel, PanelId.DormRoomSelectPanel, mapRoomData, nCurRoom, true)
|
||||
end
|
||||
function DormCtrl:OnEvent_SwitchRoom()
|
||||
self:SwitchRoom(self.nSelectedRoomId)
|
||||
self.nSelectedRoomId = 0
|
||||
end
|
||||
function DormCtrl:OnEvent_ChangeRoomResult(bConfirm, nRoomId, bElevator)
|
||||
if bConfirm then
|
||||
self.nSelectedRoomId = nRoomId
|
||||
else
|
||||
self.gameObject:SetActive(true)
|
||||
end
|
||||
if bElevator then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SELECT_SCENE_CALLBACK", nil, {bConfirm})
|
||||
elseif bConfirm then
|
||||
self:OnEvent_SwitchRoom()
|
||||
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
|
||||
table.insert(tbCharInRoom, mapRole.RoleId)
|
||||
end
|
||||
end
|
||||
end
|
||||
self._mapNode.CharListRoot:ShowList(tbCurSelectChar, false, 1, tbCharInRoom)
|
||||
self._mapNode.rtInteractiveRoot:RecycleAllInteractiveHudCtrl()
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {4})
|
||||
self._mapNode.rtInteractiveRoot:SetShowBtns(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, tbBeforeCharId)
|
||||
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
|
||||
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)
|
||||
self._panel.mapDormRoomInfo = ret
|
||||
self._mapNode.CharListRoot:CloseList()
|
||||
self._mapNode.rtInteractiveRoot:SetShowBtns(true)
|
||||
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
|
||||
revertChar()
|
||||
self._mapNode.CharListRoot:CloseList()
|
||||
self._mapNode.rtInteractiveRoot:SetShowBtns(true)
|
||||
NovaAPI.DispatchEventWithData("DormSwicthMode", nil, {
|
||||
self._panel.nCurInteractiveMode
|
||||
})
|
||||
end
|
||||
end
|
||||
function DormCtrl:OnEvent_DormCharInteractive(tbCharId, callback)
|
||||
local tbCheck = {}
|
||||
for _, mapRoleInfo in ipairs(tbCharId) do
|
||||
if not PlayerData.PlayerDormData:CheckRoleInteraction(mapRoleInfo.RoleId) then
|
||||
table.insert(tbCheck, mapRoleInfo)
|
||||
end
|
||||
end
|
||||
if #tbCheck < 1 then
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback()
|
||||
end
|
||||
return
|
||||
end
|
||||
local netCallback = function(InfoList)
|
||||
local charStr = ""
|
||||
for _, mapInfo in ipairs(InfoList) do
|
||||
charStr = charStr .. string.format("角色进行了交互:%d,当前好感度经验为:%d 当前好感度等级为:%d\n", mapInfo.AffinityInfo.CharId, mapInfo.AffinityInfo.AffinityExp, mapInfo.AffinityInfo.AffinityLevel)
|
||||
if mapInfo.ItemInfo.Tid ~= 0 then
|
||||
charStr = charStr .. string.format("角色赠送了礼物:%d,数量为:%d\n", mapInfo.ItemInfo.Tid, mapInfo.ItemInfo.Qty)
|
||||
end
|
||||
end
|
||||
print(charStr)
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:DormRoleInteraction(tbCheck, netCallback)
|
||||
end
|
||||
function DormCtrl:OnEvent_DormCharGift(nRoomId, nCharId, tbGift, callback)
|
||||
if PlayerData.PlayerDormData:CheckRoleSendGift(nCharId) then
|
||||
print("该角色今天已被赠送过礼物")
|
||||
callback()
|
||||
return
|
||||
end
|
||||
local netCallback = function(Info)
|
||||
local giftStr = ""
|
||||
for _, itemTpl in ipairs(tbGift) do
|
||||
giftStr = giftStr .. " " .. itemTpl.Tid
|
||||
end
|
||||
print(string.format("赠送了礼物:%s 当前好感度为:%d 当前好感度等级为:%d", giftStr, Info.AffinityExp, Info.AffinityLevel))
|
||||
if callback ~= nil and type(callback == "function") then
|
||||
callback()
|
||||
end
|
||||
end
|
||||
PlayerData.PlayerDormData:DormAffinityGiftSend(nRoomId, nCharId, tbGift, netCallback)
|
||||
end
|
||||
return DormCtrl
|
||||
@@ -0,0 +1,502 @@
|
||||
local DormEditorCtrl = class("DormEditorCtrl", BaseCtrl)
|
||||
DormEditorCtrl._mapNodeConfig = {
|
||||
rtFurnitureBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnFurnitureListOpen = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_FurnitureListOpen"
|
||||
},
|
||||
btnFurnitureListClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_FurnitureListClose"
|
||||
},
|
||||
rtPresetBg = {
|
||||
sComponentName = "RectTransform"
|
||||
},
|
||||
btnPresetOpen = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_PresetOpen"
|
||||
},
|
||||
btnPresetClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_PresetClose"
|
||||
},
|
||||
btnInteractiveMode = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_InteractiveMode"
|
||||
},
|
||||
btnExitEditor = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ExitEditor"
|
||||
},
|
||||
btnHudDelete = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_HudDelete"
|
||||
},
|
||||
btnHudRotation = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_HudRotation"
|
||||
},
|
||||
btnPresetSave = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_PresetSave"
|
||||
},
|
||||
btnPresetApply = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_PresetApply"
|
||||
},
|
||||
btnSaveRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SaveRoom"
|
||||
},
|
||||
btnClearRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ClearRoom"
|
||||
},
|
||||
btnNextRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_NextRoom"
|
||||
},
|
||||
btnHudCancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_CancelEdit"
|
||||
},
|
||||
svFurniture = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
svPreset = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
rtOperate = {
|
||||
sComponentName = "CanvasGroup"
|
||||
},
|
||||
rtCenter = {},
|
||||
rtHud = {}
|
||||
}
|
||||
DormEditorCtrl._mapEventConfig = {
|
||||
DORM_CS_SWITCH_FURNITURE = "OnEvent_DORM_CS_SWITCH_FURNITURE",
|
||||
DORM_CS_SET_FUR_HUD = "OnEvent_DORM_CS_SET_FUR_HUD"
|
||||
}
|
||||
DormEditorCtrl._mapRedDotConfig = {}
|
||||
function DormEditorCtrl:Awake()
|
||||
self.mapFurnitureCtrl = {}
|
||||
self.mapPresetCtrl = {}
|
||||
self.tbFurniture = {}
|
||||
end
|
||||
function DormEditorCtrl:FadeIn()
|
||||
end
|
||||
function DormEditorCtrl:FadeOut()
|
||||
end
|
||||
function DormEditorCtrl:OnEnable()
|
||||
self.bInitPresetList = false
|
||||
self.bInitPresetListSuc = false
|
||||
self.bPresetSaveMode = false
|
||||
end
|
||||
function DormEditorCtrl:OnDisable()
|
||||
self:UnbindAllCtrl()
|
||||
end
|
||||
function DormEditorCtrl:OnDestroy()
|
||||
end
|
||||
function DormEditorCtrl:OnRelease()
|
||||
end
|
||||
function DormEditorCtrl:UnbindAllCtrl()
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.mapFurnitureCtrl = {}
|
||||
for _, mapCtrl in pairs(self.mapPresetCtrl) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.mapPresetCtrl = {}
|
||||
end
|
||||
function DormEditorCtrl:Init(nRoomId)
|
||||
self.tbFurniture = {}
|
||||
self.nCurEditFurniture = 0
|
||||
self.nListWidth = self._mapNode.rtFurnitureBg.rect.width
|
||||
self.nPresetHeight = self._mapNode.rtPresetBg.rect.height
|
||||
self.gameObject:SetActive(false)
|
||||
self._mapNode.rtHud:SetActive(false)
|
||||
self:OnBtnClick_PresetClose()
|
||||
self:OnBtnClick_FurnitureListOpen()
|
||||
self.nCurRoomId = nRoomId
|
||||
local nRoomType = 0
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", nRoomId)
|
||||
if mapRoomConfig ~= nil then
|
||||
nRoomType = mapRoomConfig.RoomType
|
||||
end
|
||||
for nFurnitureId, nTotalCount in pairs(self._panel.mapFurnitureBag) do
|
||||
local bAdd = false
|
||||
local mapFurnitureConfig = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapFurnitureConfig ~= nil then
|
||||
bAdd = 0 < table.indexof(mapFurnitureConfig.CanIn, nRoomType)
|
||||
end
|
||||
if bAdd then
|
||||
table.insert(self.tbFurniture, {
|
||||
nFurnitureId,
|
||||
self._panel:GetFurnitureCount(nFurnitureId)
|
||||
})
|
||||
end
|
||||
end
|
||||
self._mapNode.svFurniture:Init(#self.tbFurniture, self, self.OnFurnitureGridRefresh, self.OnFurnitureBtnClickGrid, false)
|
||||
end
|
||||
function DormEditorCtrl:InitPresetList()
|
||||
local InitList = function()
|
||||
self._mapNode.svPreset:Init(self._panel.nPresetCount, self, self.OnPresetGridRefresh, self.OnPresetBtnClickGrid, false)
|
||||
self.bInitPresetListSuc = true
|
||||
self:OnBtnClick_PresetOpen()
|
||||
end
|
||||
local Callback = function(mapData, nPresetCount)
|
||||
self._panel.mapPresetInfo = mapData
|
||||
self._panel.nPresetCount = nPresetCount
|
||||
InitList()
|
||||
end
|
||||
if self._panel.mapPresetInfo == nil then
|
||||
PlayerData.PlayerDormData:GetPresetInfo(Callback)
|
||||
else
|
||||
InitList()
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:SetEditorState(bEditor)
|
||||
self._mapNode.rtFurnitureBg.gameObject:SetActive(not bEditor)
|
||||
NovaAPI.SetCanvasGroupAlpha(self._mapNode.rtOperate, not bEditor and 1 or 0)
|
||||
NovaAPI.SetCanvasGroupInteractable(self._mapNode.rtOperate, not bEditor)
|
||||
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.rtOperate, not bEditor)
|
||||
if not bEditor then
|
||||
safe_call_cs_func(CS.DormModuleHelper.UnsetHudFollowTarget, self._mapNode.rtCenter)
|
||||
self._mapNode.rtHud:SetActive(false)
|
||||
self.nCurEditFurniture = 0
|
||||
self._mapNode.svFurniture:ForceRefresh()
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:SavePreset(nBuildId)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM")
|
||||
local csData = safe_call_cs_func(CS.DormModuleHelper.GetDormData)
|
||||
local callback = function()
|
||||
local GetNewDataCallback = function(mapData, nPresetCount)
|
||||
self._panel.mapPresetInfo = mapData
|
||||
self._panel.nPresetCount = nPresetCount
|
||||
self._mapNode.svPreset:Init(self._panel.nPresetCount, self, self.OnPresetGridRefresh, self.OnPresetBtnClickGrid, false)
|
||||
end
|
||||
PlayerData.PlayerDormData:GetPresetInfo(GetNewDataCallback)
|
||||
end
|
||||
local confirmCallback = function()
|
||||
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._panel.nCurRoom, mapData, nBuildId, callback)
|
||||
end
|
||||
local cancelCallback = function()
|
||||
end
|
||||
if csData[0] ~= 3 then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_ABANDON_SAVE_ROOM")
|
||||
self._panel.tempEditCount = {}
|
||||
callback()
|
||||
return
|
||||
end
|
||||
if csData[1] ~= 0 and csData[1] ~= 4 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)
|
||||
return
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = "是否保存当前修改",
|
||||
callbackConfirm = confirmCallback,
|
||||
callbackCancel = cancelCallback,
|
||||
bDisableSnap = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
function DormEditorCtrl:ApplyPreset(nBuildId)
|
||||
local mapTempCount = {}
|
||||
local mapPresetData = self._panel.mapPresetInfo[nBuildId]
|
||||
if mapPresetData == nil then
|
||||
printError("No PresetData:" .. nBuildId)
|
||||
return
|
||||
end
|
||||
local mapDormCfg = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
|
||||
if mapDormCfg == nil then
|
||||
return
|
||||
end
|
||||
if mapPresetData.DormType ~= mapDormCfg.RoomType then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "不是该房间类型的预设")
|
||||
return
|
||||
end
|
||||
local roomData = {}
|
||||
local nFurnitureLen = #mapPresetData.FurnitureList
|
||||
table.insert(roomData, {
|
||||
2,
|
||||
mapDormCfg.RoomType,
|
||||
nBuildId,
|
||||
nFurnitureLen,
|
||||
0
|
||||
})
|
||||
for _, mapFurniture in ipairs(mapPresetData.FurnitureList) do
|
||||
local nCount = self._panel:GetFurnitureCount(mapFurniture.FurnitureId)
|
||||
local curUseCount = mapTempCount[mapFurniture.FurnitureId] or 0
|
||||
local mapFurnitureConfig = ConfigTable.GetData("DormFurniture", mapFurniture.FurnitureId)
|
||||
if mapFurnitureConfig ~= nil and (nCount >= curUseCount + 1 or 0 < mapFurnitureConfig.Fixed) then
|
||||
if mapFurnitureConfig.Fixed == 0 then
|
||||
if mapTempCount[mapFurniture.FurnitureId] == nil then
|
||||
mapTempCount[mapFurniture.FurnitureId] = 0
|
||||
end
|
||||
mapTempCount[mapFurniture.FurnitureId] = mapTempCount[mapFurniture.FurnitureId] + 1
|
||||
end
|
||||
table.insert(roomData, {
|
||||
mapFurniture.FurnitureId,
|
||||
mapFurniture.X,
|
||||
mapFurniture.Y,
|
||||
mapFurniture.Z,
|
||||
mapFurniture.Rotation
|
||||
})
|
||||
end
|
||||
end
|
||||
safe_call_cs_func(CS.DormModuleHelper.SetDormData, roomData)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_APPLY_PRESET")
|
||||
local csData = safe_call_cs_func(CS.DormModuleHelper.GetDormData)
|
||||
if csData == nil then
|
||||
printError("ApplyPresetResult Nil")
|
||||
return
|
||||
end
|
||||
if csData[0] ~= 4 then
|
||||
printError("ApplyPresetResult TypeError:" .. csData[0])
|
||||
return
|
||||
end
|
||||
local nLeng = csData[1]
|
||||
local nTotalDataLeng = 2 + 2 * nLeng
|
||||
if 0 < nLeng then
|
||||
for i = 1, nLeng do
|
||||
local nFurnitureId = csData[2 * i]
|
||||
local nCount = csData[2 * i + 1]
|
||||
self._panel:SetTempFurnitureCount(nFurnitureId, -nCount)
|
||||
end
|
||||
end
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
mapCtrl:SetCount(self._panel:GetFurnitureCount(mapCtrl.nItemId))
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnFurnitureGridRefresh(goGrid, idx)
|
||||
idx = idx + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if self.mapFurnitureCtrl[nInstanceId] == nil then
|
||||
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.Legacy.DormFurnitureGridCtrl")
|
||||
self.mapFurnitureCtrl[nInstanceId] = mapCtrl
|
||||
end
|
||||
local tbData = self.tbFurniture[idx]
|
||||
self.mapFurnitureCtrl[nInstanceId]:Refresh(tbData[1], self._panel:GetFurnitureCount(tbData[1]), self._panel.nCurRoom)
|
||||
self.mapFurnitureCtrl[nInstanceId]:SetSelect(tbData[1] == self.nCurEditFurniture)
|
||||
end
|
||||
function DormEditorCtrl:OnFurnitureBtnClickGrid(goGrid, idx)
|
||||
idx = idx + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
local tbData = self.tbFurniture[idx]
|
||||
if 1 > self._panel:GetFurnitureCount(tbData[1]) then
|
||||
return
|
||||
end
|
||||
if self.mapFurnitureCtrl[nInstanceId].nItemCount <= 0 then
|
||||
return
|
||||
end
|
||||
self.nCurEditFurniture = tbData[1]
|
||||
self.mapFurnitureCtrl[nInstanceId]:SetSelect(true)
|
||||
self._panel:SetTempFurnitureCount(self.nCurEditFurniture, 1)
|
||||
self.mapFurnitureCtrl[nInstanceId]:SetCount(self._panel:GetFurnitureCount(self.nCurEditFurniture))
|
||||
self:SetEditorState(true)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_CREATE_FURNITURE", nil, self.nCurEditFurniture)
|
||||
end
|
||||
function DormEditorCtrl:OnPresetGridRefresh(goGrid, idx)
|
||||
idx = idx + 1
|
||||
local mapPresetData = self._panel.mapPresetInfo[idx]
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if self.mapPresetCtrl[nInstanceId] == nil then
|
||||
local mapCtrl = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.Legacy.DormPresetGridCtrl")
|
||||
self.mapPresetCtrl[nInstanceId] = mapCtrl
|
||||
mapCtrl:SetSelect(self.bPresetSaveMode)
|
||||
end
|
||||
if mapPresetData ~= nil then
|
||||
self.mapPresetCtrl[nInstanceId]:Refresh("预设" .. idx)
|
||||
else
|
||||
self.mapPresetCtrl[nInstanceId]:Refresh("暂无预设" .. idx)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnPresetBtnClickGrid(goGrid, idx)
|
||||
idx = idx + 1
|
||||
if self.bPresetSaveMode then
|
||||
self:SavePreset(idx)
|
||||
else
|
||||
local mapPresetData = self._panel.mapPresetInfo[idx]
|
||||
if mapPresetData == nil then
|
||||
EventManager.Hit(EventId.OpenMessageBox, "暂无预设")
|
||||
return
|
||||
end
|
||||
self:ApplyPreset(idx)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_FurnitureListOpen()
|
||||
self._mapNode.rtFurnitureBg.anchoredPosition = Vector2(self.nListWidth, 0)
|
||||
self._mapNode.btnFurnitureListOpen.gameObject:SetActive(false)
|
||||
self._mapNode.btnFurnitureListClose.gameObject:SetActive(true)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_FurnitureListClose()
|
||||
self._mapNode.rtFurnitureBg.anchoredPosition = Vector2(0, 0)
|
||||
self._mapNode.btnFurnitureListOpen.gameObject:SetActive(true)
|
||||
self._mapNode.btnFurnitureListClose.gameObject:SetActive(false)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_PresetOpen()
|
||||
if not self.bInitPresetList then
|
||||
self.bInitPresetList = true
|
||||
self:InitPresetList()
|
||||
return
|
||||
end
|
||||
if self.bInitPresetListSuc then
|
||||
self._mapNode.rtPresetBg.anchoredPosition = Vector2(0, 0)
|
||||
self._mapNode.btnPresetOpen.gameObject:SetActive(false)
|
||||
self._mapNode.btnPresetClose.gameObject:SetActive(true)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_PresetClose()
|
||||
self._mapNode.rtPresetBg.anchoredPosition = Vector2(0, -self.nPresetHeight)
|
||||
self._mapNode.btnPresetOpen.gameObject:SetActive(true)
|
||||
self._mapNode.btnPresetClose.gameObject:SetActive(false)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_SaveRoom()
|
||||
local callback = function(bSaveSuc)
|
||||
if bSaveSuc then
|
||||
self._panel.tempEditCount = {}
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM_SUCC")
|
||||
end
|
||||
end
|
||||
self._panel:SaveRoom(callback, false)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_NextRoom()
|
||||
local callback = function(bSaveSuc)
|
||||
self._panel.tempEditCount = {}
|
||||
if bSaveSuc then
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SAVE_ROOM_SUCC")
|
||||
end
|
||||
EventManager.Hit("DormPanel_NextRoom")
|
||||
end
|
||||
self._panel:SaveRoom(callback, false)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_InteractiveMode()
|
||||
EventManager.Hit("DormPanel_BtnInteractive")
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_ExitEditor()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_UNSELECT_FURNITURE")
|
||||
self:SetEditorState(false)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_CancelEdit()
|
||||
local tempId = self.nCurEditFurniture
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_CANCEL_FURNITURE")
|
||||
local csData = safe_call_cs_func(CS.DormModuleHelper.GetDormData)
|
||||
if csData ~= nil and csData.Length == 1 and csData[0] == 1 and 0 < tempId then
|
||||
self._panel:SetTempFurnitureCount(tempId, -1)
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
if mapCtrl.nItemId == tempId then
|
||||
mapCtrl:SetCount(self._panel:GetFurnitureCount(mapCtrl.nItemId))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_HudRotation()
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_ROTATE_FURNITURE", nil, true)
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_HudDelete()
|
||||
self._panel:SetTempFurnitureCount(self.nCurEditFurniture, -1)
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
if mapCtrl.nItemId == self.nCurEditFurniture then
|
||||
mapCtrl:SetCount(self._panel:GetFurnitureCount(mapCtrl.nItemId))
|
||||
end
|
||||
end
|
||||
self:SetEditorState(false)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_DELETE_FURNITURE")
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_PresetSave()
|
||||
self.bPresetSaveMode = true
|
||||
for _, mapCtrl in pairs(self.mapPresetCtrl) do
|
||||
mapCtrl:SetSelect(true)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_PresetApply()
|
||||
self.bPresetSaveMode = false
|
||||
for _, mapCtrl in pairs(self.mapPresetCtrl) do
|
||||
mapCtrl:SetSelect(false)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnBtnClick_ClearRoom()
|
||||
local mapRoomCfgData = ConfigTable.GetData("DormRoom", self._panel.nCurRoom)
|
||||
if mapRoomCfgData == nil then
|
||||
return
|
||||
end
|
||||
local nDefaultLayoutId = mapRoomCfgData.DefaultLayoutId
|
||||
local mapDefaultCount = {}
|
||||
local forEachLayoutFurniture = function(mapData)
|
||||
if mapData.RoomLayoutId == nDefaultLayoutId then
|
||||
if mapDefaultCount[mapData.FurnitureId] == nil then
|
||||
mapDefaultCount[mapData.FurnitureId] = 0
|
||||
end
|
||||
mapDefaultCount[mapData.FurnitureId] = mapDefaultCount[mapData.FurnitureId] + 1
|
||||
end
|
||||
end
|
||||
ForEachTableLine(DataTable.DormRoomLayout, forEachLayoutFurniture)
|
||||
self.nCurEditFurniture = 0
|
||||
self:SetEditorState(false)
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_CLEAR_ROOM")
|
||||
local mapUsedCount = self._panel.mapFurnitureUsedCount[self._panel.nCurRoom]
|
||||
self._panel.tempEditCount = {}
|
||||
if mapUsedCount ~= nil then
|
||||
for nItemId, nUsedCount in pairs(mapUsedCount) do
|
||||
local nDefaultCount = mapDefaultCount[nItemId] or 0
|
||||
self._panel.tempEditCount[nItemId] = nDefaultCount - nUsedCount
|
||||
end
|
||||
for _, mapCtrl in pairs(self.mapFurnitureCtrl) do
|
||||
mapCtrl:SetCount(self._panel:GetFurnitureCount(mapCtrl.nItemId))
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnEvent_DORM_CS_SWITCH_FURNITURE(goObj, nFurnitureId)
|
||||
if goObj == nil then
|
||||
self.nCurEditFurniture = 0
|
||||
self:SetEditorState(false)
|
||||
return
|
||||
end
|
||||
local rt = goObj.transform
|
||||
if rt ~= nil then
|
||||
local bShowDelete = true
|
||||
local mapFurnitureConfig = ConfigTable.GetData("DormFurniture", nFurnitureId)
|
||||
if mapFurnitureConfig ~= nil then
|
||||
bShowDelete = mapFurnitureConfig.Fixed == 0
|
||||
end
|
||||
self.nCurEditFurniture = nFurnitureId
|
||||
self._mapNode.rtHud:SetActive(true)
|
||||
self:SetEditorState(true)
|
||||
self._mapNode.btnHudDelete.gameObject:SetActive(bShowDelete)
|
||||
safe_call_cs_func(CS.DormModuleHelper.SetHudFollowTarget, self._mapNode.rtCenter, rt, Vector3.zero)
|
||||
end
|
||||
end
|
||||
function DormEditorCtrl:OnEvent_DORM_CS_SET_FUR_HUD(bVisible, bEnableUpdateHudPos)
|
||||
self._mapNode.rtHud:SetActive(bVisible)
|
||||
safe_call_cs_func(CS.DormModuleHelper.EnableUpdateHudPos, self._mapNode.rtCenter, bVisible, bEnableUpdateHudPos)
|
||||
end
|
||||
return DormEditorCtrl
|
||||
@@ -0,0 +1,43 @@
|
||||
local DormFurnitureGridCtrl = class("DormFurnitureGridCtrl", BaseCtrl)
|
||||
DormFurnitureGridCtrl._mapNodeConfig = {
|
||||
tc_item_01 = {
|
||||
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
|
||||
},
|
||||
imgSelect = {},
|
||||
TMPTempName = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
DormFurnitureGridCtrl._mapEventConfig = {}
|
||||
DormFurnitureGridCtrl._mapRedDotConfig = {}
|
||||
function DormFurnitureGridCtrl:Awake()
|
||||
self.nItemId = 0
|
||||
self.nItemCount = 0
|
||||
end
|
||||
function DormFurnitureGridCtrl:FadeIn()
|
||||
end
|
||||
function DormFurnitureGridCtrl:FadeOut()
|
||||
end
|
||||
function DormFurnitureGridCtrl:OnEnable()
|
||||
end
|
||||
function DormFurnitureGridCtrl:OnDisable()
|
||||
end
|
||||
function DormFurnitureGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormFurnitureGridCtrl:OnRelease()
|
||||
end
|
||||
function DormFurnitureGridCtrl:Refresh(nItemId, nCount)
|
||||
self.nItemId = nItemId
|
||||
self.nItemCount = nCount
|
||||
local mapFurnitureConfig = ConfigTable.GetData("Item", nItemId)
|
||||
if mapFurnitureConfig ~= nil then
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTempName, mapFurnitureConfig.Title)
|
||||
end
|
||||
self._mapNode.tc_item_01:SetItem(nItemId, nil, nCount, nil, nil, nil, nil, false)
|
||||
end
|
||||
function DormFurnitureGridCtrl:SetSelect(bSelected)
|
||||
self._mapNode.imgSelect:SetActive(bSelected)
|
||||
end
|
||||
function DormFurnitureGridCtrl:SetCount(nCount)
|
||||
self.nItemCount = nCount
|
||||
self._mapNode.tc_item_01:SetItem(self.nItemId, nil, nCount, nil, nil, nil, nil, false)
|
||||
end
|
||||
return DormFurnitureGridCtrl
|
||||
@@ -0,0 +1,149 @@
|
||||
local DormInteractiveCtrl = class("DormInteractiveCtrl", BaseCtrl)
|
||||
DormInteractiveCtrl._mapNodeConfig = {
|
||||
rtObserve = {},
|
||||
rtOperate = {},
|
||||
rtDormLevelRoot = {},
|
||||
TMPCharCountTitle = {sComponentName = "TMP_Text"},
|
||||
btnSelectChar = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_SelectChar"
|
||||
},
|
||||
txtDormName = {sComponentName = "TMP_Text"},
|
||||
btnFullScene = {sComponentName = "UIButton"},
|
||||
btnEditMode = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_EditMode"
|
||||
},
|
||||
btnOperate = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Operate"
|
||||
},
|
||||
btnObserve = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Observe"
|
||||
},
|
||||
btnNextRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_NextRoom"
|
||||
},
|
||||
rtListHideRoot = {},
|
||||
rtContact = {
|
||||
sCtrlName = "Game.UI.Dorm.DormContact.DormContactBtnListCtrl"
|
||||
},
|
||||
rtHudPool = {},
|
||||
rtHud = {},
|
||||
goCharHud = {}
|
||||
}
|
||||
DormInteractiveCtrl._mapEventConfig = {
|
||||
ACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_ActiveHud",
|
||||
DEACTIVE_DORM_INTERACTIVE_HUD = "OnEvent_DeactiveHud",
|
||||
DORM_CS2LUA_CLOSE_INTERACTIVE_ICON = "OnEvent_CloseContactHud",
|
||||
DormCharSelectResult = "OnEvent_DormCharSelectResult",
|
||||
DormContactBtnClick = "OnEvent_DormContactBtnClick"
|
||||
}
|
||||
DormInteractiveCtrl._mapRedDotConfig = {}
|
||||
function DormInteractiveCtrl:Awake()
|
||||
end
|
||||
function DormInteractiveCtrl:FadeIn()
|
||||
end
|
||||
function DormInteractiveCtrl:FadeOut()
|
||||
end
|
||||
function DormInteractiveCtrl:OnEnable()
|
||||
self.mapHudCtrls = {}
|
||||
self.tbHudPool = {}
|
||||
self.gameObject:SetActive(true)
|
||||
if NovaAPI.GetCurrentModuleName() == "DormModuleScene" then
|
||||
NovaAPI.DispatchEventWithData("DormJoystickPrefabLoadComplete")
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnDisable()
|
||||
end
|
||||
function DormInteractiveCtrl:OnDestroy()
|
||||
self:RemoveAllHUD()
|
||||
end
|
||||
function DormInteractiveCtrl:OnRelease()
|
||||
end
|
||||
function DormInteractiveCtrl:RemoveAllHUD()
|
||||
for _, mapCtrl in pairs(self.mapHudCtrls) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.mapHudCtrls = {}
|
||||
for _, mapCtrl in ipairs(self.tbHudPool) do
|
||||
self:UnbindCtrlByNode(mapCtrl)
|
||||
end
|
||||
self.mapHudCtrls = {}
|
||||
end
|
||||
function DormInteractiveCtrl:SetMode(nState)
|
||||
self.nCurState = nState
|
||||
self._mapNode.rtOperate:SetActive(nState == 0)
|
||||
self._mapNode.rtObserve:SetActive(nState == 1)
|
||||
end
|
||||
function DormInteractiveCtrl:GetInteractiveHudCtrl()
|
||||
if #self.tbHudPool == 0 then
|
||||
local goHud = instantiate(self._mapNode.goCharHud, self._mapNode.rtHud.transform)
|
||||
local mapCtrl = self:BindCtrlByNode(goHud, "Game.UI.Dorm.InteractiveHUDCtrl")
|
||||
mapCtrl.gameObject:SetActive(true)
|
||||
return mapCtrl
|
||||
else
|
||||
local mapCtrl = table.remove(self.tbHudPool, 1)
|
||||
mapCtrl.gameObject.transform:SetParent(self._mapNode.rtHud.transform)
|
||||
mapCtrl.gameObject:SetActive(true)
|
||||
return mapCtrl
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:RecycleInteractiveHudCtrl(nUid)
|
||||
local mapCtrl = self.mapHudCtrls[nUid]
|
||||
if mapCtrl == nil then
|
||||
return
|
||||
end
|
||||
self.mapHudCtrls[nUid] = nil
|
||||
mapCtrl:Hide()
|
||||
mapCtrl.gameObject.transform:SetParent(self._mapNode.rtHudPool.transform)
|
||||
mapCtrl.gameObject:SetActive(false)
|
||||
table.insert(self.tbHudPool, mapCtrl)
|
||||
end
|
||||
function DormInteractiveCtrl:RecycleAllInteractiveHudCtrl()
|
||||
local tbUids = {}
|
||||
for nUid, _ in pairs(self.mapHudCtrls) do
|
||||
table.insert(tbUids, nUid)
|
||||
end
|
||||
for _, nUid in ipairs(tbUids) do
|
||||
self:RecycleInteractiveHudCtrl(nUid)
|
||||
end
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_ActiveHud(rtTransform, nType, nDataId, nEntityId)
|
||||
self._mapNode.rtContact:AddInteractiveBtn(rtTransform, nType, nDataId, nEntityId)
|
||||
end
|
||||
function DormInteractiveCtrl:SetShowBtns(bShow)
|
||||
self._mapNode.rtListHideRoot:SetActive(bShow)
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DeactiveHud(nEntityId, nType)
|
||||
self._mapNode.rtContact:RemoveInteractiveBtn(nEntityId)
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Operate()
|
||||
EventManager.Hit("DormPanel_BtnClickOperate")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_Observe()
|
||||
EventManager.Hit("DormPanel_BtnClickObserve")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_EditMode()
|
||||
EventManager.Hit("DormPanel_BtnClickEdit")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_NextRoom()
|
||||
self:RecycleAllInteractiveHudCtrl()
|
||||
EventManager.Hit("DormPanel_NextRoom")
|
||||
end
|
||||
function DormInteractiveCtrl:OnBtnClick_SelectChar()
|
||||
EventManager.Hit("DormPanel_OpenSelectChar")
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormCharSelectResult()
|
||||
end
|
||||
function DormInteractiveCtrl:OnEvent_DormContactBtnClick(nEntityId, nType)
|
||||
if nType == 1 then
|
||||
NovaAPI.DispatchEventWithData("BUTTON_DORM_INTERACTIVE_HUD", nil, {nEntityId, nType})
|
||||
else
|
||||
NovaAPI.DispatchEventWithData("DORM_LUA_SELECT_ACTOR_CALLBACK", nil, {nEntityId})
|
||||
self._mapNode.rtContact:EnterCharActive(nEntityId)
|
||||
end
|
||||
end
|
||||
return DormInteractiveCtrl
|
||||
@@ -0,0 +1,165 @@
|
||||
local DormPanel = class("DormPanel", BasePanel)
|
||||
DormPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/Legacy1/DormPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.Legacy.DormCtrl"
|
||||
}
|
||||
}
|
||||
function DormPanel:Awake()
|
||||
self.mapDormRoomInfo = {}
|
||||
self.mapFurnitureBag = {}
|
||||
self.mapFurnitureUsedCount = {}
|
||||
self.mapPresetInfo = nil
|
||||
self.mapDormSuitData = {}
|
||||
self.tbRoomId = {}
|
||||
self.tempEditCount = {}
|
||||
self.nCurRoom = 0
|
||||
self.nPresetCount = 0
|
||||
self.nCurMode = 0
|
||||
self.nCurInteractiveMode = 0
|
||||
self:InitSuitData()
|
||||
end
|
||||
function DormPanel:OnEnable()
|
||||
end
|
||||
function DormPanel:OnDisable()
|
||||
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: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
|
||||
if self.tempEditCount[nId] ~= nil then
|
||||
nTotalCount = nTotalCount - self.tempEditCount[nId]
|
||||
end
|
||||
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: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)
|
||||
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()
|
||||
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
|
||||
if csData[1] == 4 then
|
||||
if completeCallback ~= nil and type(completeCallback) == "function" then
|
||||
completeCallback(true)
|
||||
end
|
||||
return
|
||||
end
|
||||
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)
|
||||
return
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = "是否保存当前修改",
|
||||
callbackConfirm = confirmCallback,
|
||||
callbackCancel = cancelCallback,
|
||||
bDisableSnap = false
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
return DormPanel
|
||||
@@ -0,0 +1,32 @@
|
||||
local DormPresetGridCtrl = class("DormPresetGridCtrl", BaseCtrl)
|
||||
DormPresetGridCtrl._mapNodeConfig = {
|
||||
imgSelect = {},
|
||||
TMPTempName = {sComponentName = "TMP_Text"}
|
||||
}
|
||||
DormPresetGridCtrl._mapEventConfig = {}
|
||||
DormPresetGridCtrl._mapRedDotConfig = {}
|
||||
function DormPresetGridCtrl:Awake()
|
||||
self.nItemId = 0
|
||||
self.nItemCount = 0
|
||||
end
|
||||
function DormPresetGridCtrl:FadeIn()
|
||||
end
|
||||
function DormPresetGridCtrl:FadeOut()
|
||||
end
|
||||
function DormPresetGridCtrl:OnEnable()
|
||||
end
|
||||
function DormPresetGridCtrl:OnDisable()
|
||||
end
|
||||
function DormPresetGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormPresetGridCtrl:OnRelease()
|
||||
end
|
||||
function DormPresetGridCtrl:Refresh(sName)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPTempName, sName)
|
||||
end
|
||||
function DormPresetGridCtrl:SetSelect(bSelected)
|
||||
self._mapNode.imgSelect:SetActive(bSelected)
|
||||
end
|
||||
function DormPresetGridCtrl:SetCount(nCount)
|
||||
end
|
||||
return DormPresetGridCtrl
|
||||
@@ -0,0 +1,363 @@
|
||||
local DormMusicSelectCtrl = class("DormMusicSelectCtrl", BaseCtrl)
|
||||
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
||||
DormMusicSelectCtrl._mapNodeConfig = {
|
||||
TMPRoomName = {sComponentName = "TMP_Text"},
|
||||
TMPCurMusicName = {sComponentName = "TMP_Text"},
|
||||
TMPDiscListTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_ListTitle"
|
||||
},
|
||||
imgRoomIcon = {sComponentName = "Image"},
|
||||
svDiscList = {
|
||||
sComponentName = "LoopScrollView"
|
||||
},
|
||||
btnNextRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Next"
|
||||
},
|
||||
btnPrevRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Prev"
|
||||
},
|
||||
btnHomeMain = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Home"
|
||||
},
|
||||
btnBackMain = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Close"
|
||||
},
|
||||
btnSaveRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Save"
|
||||
},
|
||||
btnSaveRoomGray = {},
|
||||
btnApplyAllRoom = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_ApplyAll"
|
||||
},
|
||||
btnApplyAllRoomGray = {},
|
||||
txtBtnSaveRoom = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_Save"
|
||||
},
|
||||
txtBtnSaveRoomGray = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_Save"
|
||||
},
|
||||
txtBtnApplyAllRoom = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_ApplyAll"
|
||||
},
|
||||
txtBtnApplyAllRoomGray = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_ApplyAll"
|
||||
},
|
||||
imgPointBg = {nCount = 6},
|
||||
imgPoint = {nCount = 6}
|
||||
}
|
||||
DormMusicSelectCtrl._mapEventConfig = {}
|
||||
DormMusicSelectCtrl._mapRedDotConfig = {}
|
||||
function DormMusicSelectCtrl:Awake()
|
||||
self.tbGridCtrl = {}
|
||||
self.nMusicStartTime = 0
|
||||
self.Animator = self.gameObject:GetComponent("Animator")
|
||||
end
|
||||
function DormMusicSelectCtrl:FadeIn()
|
||||
end
|
||||
function DormMusicSelectCtrl:FadeOut()
|
||||
end
|
||||
function DormMusicSelectCtrl:OnEnable()
|
||||
local tbParam = self:GetPanelParam()
|
||||
self.nCurRoomIdx = tbParam[1]
|
||||
self.tbRoomInfo = tbParam[2]
|
||||
self.nCurDiscMusic = self.tbRoomInfo[self.nCurRoomIdx].DiscId
|
||||
self.nCurSelectMusic = -1
|
||||
for i = 1, 6 do
|
||||
self._mapNode.imgPointBg[i]:SetActive(self.tbRoomInfo[i] ~= nil)
|
||||
self._mapNode.imgPoint[i]:SetActive(self.nCurRoomIdx == i)
|
||||
end
|
||||
self:SetDormInfo(self.tbRoomInfo[self.nCurRoomIdx])
|
||||
self:SetSaveBtn()
|
||||
self._mapNode.btnNextRoom.gameObject:SetActive(1 < #self.tbRoomInfo)
|
||||
self._mapNode.btnPrevRoom.gameObject:SetActive(1 < #self.tbRoomInfo)
|
||||
self.tbSortCfg = {
|
||||
nSortType = PlayerData.Filter.nFormationDiscSrotType,
|
||||
bOrder = PlayerData.Filter.bFormationDiscOrder
|
||||
}
|
||||
self.tbAllDisc = PlayerData.Disc:GetAllDisc()
|
||||
self:FilterDisc()
|
||||
self:SortDisc()
|
||||
self._mapNode.svDiscList:SetAnim(0.08)
|
||||
self._mapNode.svDiscList:Init(#self.tbDiscId, self, self.OnGridRefreshDiscMusic, self.OnGridBtnClickDiscMusic, true)
|
||||
end
|
||||
function DormMusicSelectCtrl:FilterDisc()
|
||||
self.tbSortedDisc = {}
|
||||
for _, data in pairs(self.tbAllDisc) do
|
||||
local mapCfg = ConfigTable.GetData("Disc", data.nId)
|
||||
if mapCfg.Visible then
|
||||
local isFilter = PlayerData.Filter:CheckFilterByDisc(data.nId)
|
||||
if isFilter then
|
||||
table.insert(self.tbSortedDisc, data)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function DormMusicSelectCtrl:SortDisc()
|
||||
self.tbDiscId = {}
|
||||
UTILS.SortByPriority(self.tbSortedDisc, {
|
||||
AllEnum.DiscSortField[self.tbSortCfg.nSortType]
|
||||
}, PlayerData.Disc:GetDiscSortField(), self.tbSortCfg.bOrder)
|
||||
for i = 1, #self.tbSortedDisc do
|
||||
table.insert(self.tbDiscId, self.tbSortedDisc[i].nId)
|
||||
end
|
||||
table.insert(self.tbDiscId, 1, 0)
|
||||
end
|
||||
function DormMusicSelectCtrl:SetSaveBtn()
|
||||
self._mapNode.btnSaveRoom.gameObject:SetActive(self.nCurSelectMusic >= 0 and self.nCurDiscMusic ~= self.nCurSelectMusic)
|
||||
self._mapNode.btnSaveRoomGray.gameObject:SetActive(self.nCurSelectMusic < 0 or self.nCurDiscMusic == self.nCurSelectMusic)
|
||||
self._mapNode.btnApplyAllRoom.gameObject:SetActive(self.nCurSelectMusic >= 0)
|
||||
self._mapNode.btnApplyAllRoomGray.gameObject:SetActive(self.nCurSelectMusic < 0)
|
||||
end
|
||||
function DormMusicSelectCtrl:OnGridRefreshDiscMusic(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
if not self.tbGridCtrl[nInstanceId] then
|
||||
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.Dorm.MusicSelect.DormMusicSelectDiscGridCtrl")
|
||||
end
|
||||
local nDiscId = self.tbDiscId[nIdx]
|
||||
if nDiscId == nil then
|
||||
return
|
||||
end
|
||||
local bCur = self.nCurDiscMusic == nDiscId
|
||||
local bPlay = self.nMusicStartTime > 0 and self.nCurSelectMusic == nDiscId
|
||||
local nMusicTime = self.nMusicStartTime > 0 and CS.ClientManager.Instance.serverTimeStamp - self.nMusicStartTime or 0
|
||||
self.tbGridCtrl[nInstanceId]:Refresh(nDiscId, bCur, bPlay, nMusicTime)
|
||||
self.tbGridCtrl[nInstanceId]:SetSelect(nDiscId == self.nCurSelectMusic)
|
||||
end
|
||||
function DormMusicSelectCtrl:OnGridBtnClickDiscMusic(goGrid, nIdx)
|
||||
nIdx = nIdx + 1
|
||||
local nDiscId = self.tbDiscId[nIdx]
|
||||
if nDiscId == nil then
|
||||
return
|
||||
end
|
||||
if self.nCurSelectMusic == nDiscId then
|
||||
return
|
||||
end
|
||||
local nInstanceId = goGrid:GetInstanceID()
|
||||
self.nMusicStartTime = CS.ClientManager.Instance.serverTimeStamp
|
||||
self.tbGridCtrl[nInstanceId]:PlayMusic()
|
||||
self.tbGridCtrl[nInstanceId]:SetSelect(true)
|
||||
if nDiscId == 0 then
|
||||
WwiseAudioMgr:SetDormMusic("system", "houZhai")
|
||||
else
|
||||
local mapIPCfg = ConfigTable.GetData("DiscIP", nDiscId)
|
||||
if mapIPCfg ~= nil then
|
||||
local sVoFile = mapIPCfg.VoFile
|
||||
WwiseAudioMgr:SetDormMusic("outfit", sVoFile)
|
||||
WwiseAudioMgr:SeekOnEvent("music_outfit", 0)
|
||||
end
|
||||
end
|
||||
for nInstanceIdGrid, ctrl in pairs(self.tbGridCtrl) do
|
||||
if nInstanceIdGrid ~= nInstanceId then
|
||||
ctrl:StopPlay()
|
||||
ctrl:SetSelect(false)
|
||||
end
|
||||
end
|
||||
self.nCurSelectMusic = nDiscId
|
||||
self:SetSaveBtn()
|
||||
end
|
||||
function DormMusicSelectCtrl:OnDisable()
|
||||
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
|
||||
self:UnbindCtrlByNode(objCtrl)
|
||||
end
|
||||
self.tbGridCtrl = {}
|
||||
EventManager.Hit("ResetDormMusic")
|
||||
end
|
||||
function DormMusicSelectCtrl:OnDestroy()
|
||||
end
|
||||
function DormMusicSelectCtrl:OnRelease()
|
||||
end
|
||||
function DormMusicSelectCtrl:SetDormInfo(mapDormInfo)
|
||||
local mapRoomCfgData = ConfigTable.GetData("DormRoom", mapDormInfo.DormRoomId)
|
||||
if mapRoomCfgData == nil then
|
||||
return
|
||||
end
|
||||
local sName = mapDormInfo.RoomName == nil or mapDormInfo.RoomName == "" and mapRoomCfgData.DefaultName or mapDormInfo.RoomName
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPRoomName, sName)
|
||||
local sMusicTitle = ""
|
||||
if self.nCurDiscMusic == 0 then
|
||||
sMusicTitle = orderedFormat(ConfigTable.GetUIText("Dorm_MusicSelect_CurMusicTitle"), ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
else
|
||||
local mapIPCfg = ConfigTable.GetData_Item(self.nCurDiscMusic)
|
||||
if mapIPCfg ~= nil then
|
||||
sMusicTitle = orderedFormat(ConfigTable.GetUIText("Dorm_MusicSelect_CurMusicTitle"), mapIPCfg.Title)
|
||||
end
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPCurMusicName, sMusicTitle)
|
||||
local nRoomScene = mapDormInfo.RoomScene == 0 and mapRoomCfgData.SceneRes
|
||||
local mapSceneConfig = ConfigTable.GetData("DormRoomScene", nRoomScene)
|
||||
if mapSceneConfig ~= nil then
|
||||
self:SetPngSprite(self._mapNode.imgRoomIcon, mapSceneConfig.IconRes .. "_big")
|
||||
end
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormMusicSelectPanel)
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_Home()
|
||||
self:OnBtnClick_Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormMainMenuPanel)
|
||||
local transitionOpenCallback = function()
|
||||
local function OnEventAfterEnterMain()
|
||||
EventManager.Remove(EventId.AfterEnterMain, PanelManager, OnEventAfterEnterMain)
|
||||
PanelManager.IGNORE_CS_TRANS_EVENT = false
|
||||
local wait = function()
|
||||
PanelManager.Home()
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
||||
EventManager.Hit(EventId.SetTransition)
|
||||
end
|
||||
cs_coroutine.start(wait)
|
||||
end
|
||||
local function OnEventDormLevelFinish()
|
||||
EventManager.Remove("DORM_LEVEL_FINISH", PanelManager, OnEventDormLevelFinish)
|
||||
PanelManager.IGNORE_CS_TRANS_EVENT = true
|
||||
NovaAPI.EnterModule("MainMenuModuleScene", true)
|
||||
end
|
||||
EventManager.Add("DORM_LEVEL_FINISH", PanelManager, OnEventDormLevelFinish)
|
||||
EventManager.Add(EventId.AfterEnterMain, PanelManager, OnEventAfterEnterMain)
|
||||
NovaAPI.DispatchEventWithData("DORM_LEVEL_STATE_CHANGED", nil, {true, 0})
|
||||
end
|
||||
EventManager.Hit(EventId.SetTransition, 6, transitionOpenCallback, AllEnum.MainViewCorner.Dorm)
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_Next()
|
||||
local nTotalCount = #self.tbRoomInfo
|
||||
self.nCurRoomIdx = self.nCurRoomIdx + 1
|
||||
if nTotalCount < self.nCurRoomIdx then
|
||||
self.nCurRoomIdx = 1
|
||||
end
|
||||
for i = 1, 6 do
|
||||
self._mapNode.imgPoint[i]:SetActive(self.nCurRoomIdx == i)
|
||||
end
|
||||
self.nCurDiscMusic = self.tbRoomInfo[self.nCurRoomIdx].DiscId
|
||||
self.nCurSelectMusic = -1
|
||||
if self.nCurDiscMusic == 0 then
|
||||
WwiseAudioMgr:SetDormMusic("system", "houZhai")
|
||||
else
|
||||
local mapIPCfg = ConfigTable.GetData("DiscIP", self.nCurDiscMusic)
|
||||
if mapIPCfg ~= nil then
|
||||
local sVoFile = mapIPCfg.VoFile
|
||||
WwiseAudioMgr:SetDormMusic("outfit", sVoFile)
|
||||
WwiseAudioMgr:SeekOnEvent("music_outfit", 0)
|
||||
end
|
||||
end
|
||||
self.nMusicStartTime = 0
|
||||
self:SetDormInfo(self.tbRoomInfo[self.nCurRoomIdx])
|
||||
self._mapNode.svDiscList:Init(#self.tbDiscId, self, self.OnGridRefreshDiscMusic, self.OnGridBtnClickDiscMusic, true)
|
||||
self:SetSaveBtn()
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_Prev()
|
||||
local nTotalCount = #self.tbRoomInfo
|
||||
self.nCurRoomIdx = self.nCurRoomIdx - 1
|
||||
if self.nCurRoomIdx < 1 then
|
||||
self.nCurRoomIdx = nTotalCount
|
||||
end
|
||||
for i = 1, 6 do
|
||||
self._mapNode.imgPoint[i]:SetActive(self.nCurRoomIdx == i)
|
||||
end
|
||||
self.nCurDiscMusic = self.tbRoomInfo[self.nCurRoomIdx].DiscId
|
||||
self.nCurSelectMusic = -1
|
||||
if self.nCurDiscMusic == 0 then
|
||||
WwiseAudioMgr:SetDormMusic("system", "houZhai")
|
||||
else
|
||||
local mapIPCfg = ConfigTable.GetData("DiscIP", self.nCurDiscMusic)
|
||||
if mapIPCfg ~= nil then
|
||||
local sVoFile = mapIPCfg.VoFile
|
||||
WwiseAudioMgr:SetDormMusic("outfit", sVoFile)
|
||||
WwiseAudioMgr:SeekOnEvent("music_outfit", 0)
|
||||
end
|
||||
end
|
||||
self.nMusicStartTime = 0
|
||||
self:SetDormInfo(self.tbRoomInfo[self.nCurRoomIdx])
|
||||
self._mapNode.svDiscList:Init(#self.tbDiscId, self, self.OnGridRefreshDiscMusic, self.OnGridBtnClickDiscMusic, true)
|
||||
self:SetSaveBtn()
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_Save()
|
||||
if self.nCurSelectMusic == -1 then
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Dorm_MusicSelect_SaveSuccess"))
|
||||
self.nCurDiscMusic = self.nCurSelectMusic
|
||||
self.tbRoomInfo[self.nCurRoomIdx].DiscId = self.nCurSelectMusic
|
||||
self.nCurSelectMusic = -1
|
||||
self._mapNode.svDiscList:Init(#self.tbDiscId, self, self.OnGridRefreshDiscMusic, self.OnGridBtnClickDiscMusic, true)
|
||||
self:SetSaveBtn()
|
||||
self:SetDormInfo(self.tbRoomInfo[self.nCurRoomIdx])
|
||||
end
|
||||
local nCurDisc = self.tbRoomInfo[self.nCurRoomIdx].DiscId
|
||||
if nCurDisc == self.nCurSelectMusic then
|
||||
callback()
|
||||
else
|
||||
PlayerData.PlayerDormData:DormSetRoomBgm({
|
||||
{
|
||||
DormRoomId = self.tbRoomInfo[self.nCurRoomIdx].DormRoomId,
|
||||
DiscId = self.nCurSelectMusic
|
||||
}
|
||||
}, callback)
|
||||
end
|
||||
end
|
||||
function DormMusicSelectCtrl:OnBtnClick_ApplyAll()
|
||||
if self.nCurSelectMusic == -1 then
|
||||
return
|
||||
end
|
||||
local confirmCallback = function()
|
||||
local bNeedMessage = false
|
||||
local tbRoomId = {}
|
||||
for _, mapRoomInfo in ipairs(self.tbRoomInfo) do
|
||||
if self.nCurSelectMusic ~= mapRoomInfo.DiscId then
|
||||
bNeedMessage = true
|
||||
table.insert(tbRoomId, mapRoomInfo.DormRoomId)
|
||||
end
|
||||
end
|
||||
if bNeedMessage then
|
||||
local callback = function()
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Dorm_MusicSelect_SaveSuccess"))
|
||||
self.nCurDiscMusic = self.nCurSelectMusic
|
||||
for _, mapRoomInfo in ipairs(self.tbRoomInfo) do
|
||||
mapRoomInfo.DiscId = self.nCurSelectMusic
|
||||
end
|
||||
self.nCurSelectMusic = -1
|
||||
self._mapNode.svDiscList:Init(#self.tbDiscId, self, self.OnGridRefreshDiscMusic, self.OnGridBtnClickDiscMusic, true)
|
||||
self:SetSaveBtn()
|
||||
self:SetDormInfo(self.tbRoomInfo[self.nCurRoomIdx])
|
||||
end
|
||||
local tbMsg = {}
|
||||
for _, nRoomId in ipairs(tbRoomId) do
|
||||
table.insert(tbMsg, {
|
||||
DormRoomId = nRoomId,
|
||||
DiscId = self.nCurSelectMusic
|
||||
})
|
||||
end
|
||||
PlayerData.PlayerDormData:DormSetRoomBgm(tbMsg, callback)
|
||||
else
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Dorm_MusicSelect_SaveSuccess"))
|
||||
end
|
||||
end
|
||||
local sContent = ""
|
||||
if self.nCurSelectMusic == 0 then
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Dorm_MusicSelect_ApplyAllHint"), ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
else
|
||||
local mapIPCfg = ConfigTable.GetData_Item(self.nCurSelectMusic)
|
||||
if mapIPCfg ~= nil then
|
||||
sContent = orderedFormat(ConfigTable.GetUIText("Dorm_MusicSelect_ApplyAllHint"), mapIPCfg.Title)
|
||||
end
|
||||
end
|
||||
local msg = {
|
||||
nType = AllEnum.MessageBox.Confirm,
|
||||
sContent = sContent,
|
||||
callbackConfirmAfterClose = confirmCallback
|
||||
}
|
||||
EventManager.Hit(EventId.OpenMessageBox, msg)
|
||||
end
|
||||
return DormMusicSelectCtrl
|
||||
@@ -0,0 +1,139 @@
|
||||
local DormMusicSelectDiscGridCtrl = class("DormMusicSelectDiscGridCtrl", BaseCtrl)
|
||||
DormMusicSelectDiscGridCtrl._mapNodeConfig = {
|
||||
imgDiscIcon = {sComponentName = "Image"},
|
||||
txtMusicOnTitle1 = {sComponentName = "TMP_Text"},
|
||||
TMPName = {sComponentName = "TMP_Text"},
|
||||
IconMusicValue1 = {},
|
||||
txtMusicValue1 = {sComponentName = "TMP_Text"},
|
||||
rtNotPlay = {},
|
||||
btnSideAPlay = {},
|
||||
MusicProgessA = {},
|
||||
sliderA = {sComponentName = "Slider"},
|
||||
txtMusicValue2 = {sComponentName = "TMP_Text"},
|
||||
imgUseBg = {},
|
||||
goMusic = {},
|
||||
imgSlc = {},
|
||||
TMPUseTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Dorm_MusicSelect_CurMusicGridTitle"
|
||||
}
|
||||
}
|
||||
DormMusicSelectDiscGridCtrl._mapEventConfig = {}
|
||||
DormMusicSelectDiscGridCtrl._mapRedDotConfig = {}
|
||||
function DormMusicSelectDiscGridCtrl:Awake()
|
||||
self.timerCountDownA = nil
|
||||
self.nRemainTimeA = 0
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:FadeIn()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:FadeOut()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:OnEnable()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:OnDisable()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:OnDestroy()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:OnRelease()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:Refresh(nDiscId, bCur, bPlay, nMusicTime)
|
||||
if self.timerCountDownA then
|
||||
self.timerCountDownA:Cancel()
|
||||
self.timerCountDownA = nil
|
||||
end
|
||||
self.nMusicFullTime = 0
|
||||
self.nDiscId = nDiscId
|
||||
local SetDefaulIcon = function()
|
||||
self._mapNode.imgDiscIcon.gameObject:SetActive(false)
|
||||
self._mapNode.btnSideAPlay:SetActive(true)
|
||||
end
|
||||
if nDiscId == 0 then
|
||||
SetDefaulIcon()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, ConfigTable.GetUIText("Dorm_Default_MusicName"))
|
||||
else
|
||||
local mapDiscItemCfg = ConfigTable.GetData_Item(nDiscId)
|
||||
if mapDiscItemCfg ~= nil then
|
||||
self._mapNode.imgDiscIcon.gameObject:SetActive(true)
|
||||
self._mapNode.btnSideAPlay:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, mapDiscItemCfg.Title)
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, mapDiscItemCfg.Title)
|
||||
self:SetPngSprite(self._mapNode.imgDiscIcon, mapDiscItemCfg.Icon .. AllEnum.OutfitIconSurfix.Item)
|
||||
else
|
||||
SetDefaulIcon()
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicOnTitle1, "")
|
||||
NovaAPI.SetTMPText(self._mapNode.TMPName, "")
|
||||
end
|
||||
end
|
||||
self._mapNode.imgUseBg:SetActive(bCur)
|
||||
self._mapNode.MusicProgessA:SetActive(bPlay)
|
||||
self._mapNode.goMusic:SetActive(bPlay)
|
||||
self._mapNode.rtNotPlay:SetActive(not bPlay)
|
||||
if 0 < nDiscId then
|
||||
local mapIPCfg = ConfigTable.GetData("DiscIP", nDiscId)
|
||||
if mapIPCfg ~= nil then
|
||||
self.nLoopTime = mapIPCfg.VoLoop1
|
||||
self.nBeginTime = mapIPCfg.VoBegin1
|
||||
self.voFile = mapIPCfg.VoFile
|
||||
self.nFullTimeA = self.nBeginTime + self.nLoopTime
|
||||
self.nRemainTimeA = self.nFullTimeA - nMusicTime
|
||||
self._mapNode.txtMusicValue1.gameObject:SetActive(true)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicValue1, self:SecondsToClock(self.nFullTimeA))
|
||||
end
|
||||
else
|
||||
self.nLoopTime = 60
|
||||
self.nBeginTime = 5
|
||||
self.voFile = ""
|
||||
self.nFullTimeA = self.nBeginTime + self.nLoopTime
|
||||
self.nRemainTimeA = self.nFullTimeA - nMusicTime
|
||||
self._mapNode.txtMusicValue1.gameObject:SetActive(false)
|
||||
end
|
||||
if bPlay then
|
||||
self:SetTimerA()
|
||||
end
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:SecondsToClock(seconds)
|
||||
seconds = math.floor(seconds)
|
||||
local minutes = math.floor(seconds / 60)
|
||||
local remainingSeconds = seconds % 60
|
||||
return string.format("%d:%02d", minutes, remainingSeconds)
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:PlayMusic()
|
||||
self.nRemainTimeA = self.nFullTimeA
|
||||
self:SetTimerA()
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:SetTimerA()
|
||||
if self.timerCountDownA then
|
||||
self.timerCountDownA:Cancel()
|
||||
self.timerCountDownA = nil
|
||||
end
|
||||
local countdown = function()
|
||||
self.nRemainTimeA = self.nRemainTimeA - 0.034
|
||||
if self.nRemainTimeA >= 0 then
|
||||
NovaAPI.SetSliderValue(self._mapNode.sliderA, (self.nFullTimeA - self.nRemainTimeA) * 10)
|
||||
else
|
||||
local nSum = math.abs(self.nRemainTimeA)
|
||||
self.nRemainTimeA = self.nLoopTime - nSum
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicValue2, self:SecondsToClock(self.nFullTimeA - self.nRemainTimeA))
|
||||
end
|
||||
NovaAPI.SetSliderMaxValue(self._mapNode.sliderA, self.nFullTimeA * 10)
|
||||
self.timerCountDownA = self:AddTimer(0, 0.034, countdown, true, true, false)
|
||||
self._mapNode.MusicProgessA:SetActive(0 < self.nDiscId)
|
||||
self._mapNode.goMusic:SetActive(0 < self.nDiscId)
|
||||
self._mapNode.rtNotPlay:SetActive(self.nDiscId == 0)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtMusicValue2, self:SecondsToClock(self.nFullTimeA - self.nRemainTimeA))
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:StopPlay()
|
||||
if self.timerCountDownA then
|
||||
self.timerCountDownA:Cancel()
|
||||
self.timerCountDownA = nil
|
||||
end
|
||||
self._mapNode.MusicProgessA:SetActive(false)
|
||||
self._mapNode.goMusic:SetActive(false)
|
||||
self._mapNode.rtNotPlay:SetActive(true)
|
||||
end
|
||||
function DormMusicSelectDiscGridCtrl:SetSelect(bSelect)
|
||||
self._mapNode.imgSlc:SetActive(bSelect)
|
||||
end
|
||||
return DormMusicSelectDiscGridCtrl
|
||||
@@ -0,0 +1,17 @@
|
||||
local DormMusicSelectPanel = class("DormMusicSelectPanel", BasePanel)
|
||||
DormMusicSelectPanel._bIsMainPanel = false
|
||||
DormMusicSelectPanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormMusicSelectPanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.MusicSelect.DormMusicSelectCtrl"
|
||||
}
|
||||
}
|
||||
function DormMusicSelectPanel:Awake()
|
||||
end
|
||||
function DormMusicSelectPanel:OnEnable()
|
||||
end
|
||||
function DormMusicSelectPanel:OnDisable()
|
||||
end
|
||||
function DormMusicSelectPanel:OnDestroy()
|
||||
end
|
||||
return DormMusicSelectPanel
|
||||
@@ -0,0 +1,123 @@
|
||||
local DormPresetRenameCtrl = class("DormPresetRenameCtrl", BaseCtrl)
|
||||
DormPresetRenameCtrl._mapNodeConfig = {
|
||||
blur = {
|
||||
sNodeName = "t_fullscreen_blur_blue"
|
||||
},
|
||||
txtHint2 = {},
|
||||
aniBlur = {
|
||||
sNodeName = "t_fullscreen_blur_blue",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
aniWindow = {
|
||||
sNodeName = "---Rename---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
goWindow = {
|
||||
sNodeName = "---Rename---"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Rename"
|
||||
},
|
||||
txtOldName = {sComponentName = "TMP_Text"},
|
||||
txtNameDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_NameDesc"
|
||||
},
|
||||
txtCurName = {sComponentName = "TMP_Text"},
|
||||
inputRename = {
|
||||
sComponentName = "TMP_InputField"
|
||||
},
|
||||
btnBlur = {
|
||||
sNodeName = "snapshot",
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnCancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnConfirm1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Btn_Confirm"
|
||||
},
|
||||
txtBtnCancel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Btn_Cancel"
|
||||
}
|
||||
}
|
||||
DormPresetRenameCtrl._mapEventConfig = {}
|
||||
function DormPresetRenameCtrl:Open()
|
||||
self:Refresh()
|
||||
self:PlayInAni()
|
||||
end
|
||||
function DormPresetRenameCtrl:Refresh()
|
||||
local bInit = NovaAPI.IsDirtyWordsInit()
|
||||
if not bInit then
|
||||
NovaAPI.InitDirtyWords()
|
||||
end
|
||||
NovaAPI.SetTMPInputFieldText(self._mapNode.inputRename, "")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.sCurName)
|
||||
end
|
||||
function DormPresetRenameCtrl:PlayInAni()
|
||||
self._mapNode.goWindow:SetActive(true)
|
||||
self._mapNode.blur:SetActive(true)
|
||||
self._mapNode.aniWindow:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function DormPresetRenameCtrl:PlayOutAni()
|
||||
self._mapNode.aniWindow:Play("t_window_04_t_out")
|
||||
self._mapNode.aniBlur:SetTrigger("tOut")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self:AddTimer(1, 0.2, "Close", true, true, true)
|
||||
end
|
||||
function DormPresetRenameCtrl:Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormPresetRenamePanel)
|
||||
end
|
||||
function DormPresetRenameCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.nRoomId = tbParam[1]
|
||||
self.sCurName = tbParam[2]
|
||||
end
|
||||
end
|
||||
function DormPresetRenameCtrl:OnEnable()
|
||||
self._mapNode.txtHint2.gameObject:SetActive(false)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtOldName, ConfigTable.GetUIText("Dorm_RenamePresetTitle"))
|
||||
self:Open()
|
||||
end
|
||||
function DormPresetRenameCtrl:OnDisable()
|
||||
end
|
||||
function DormPresetRenameCtrl:OnDestroy()
|
||||
end
|
||||
function DormPresetRenameCtrl:OnBtnClick_Cancel(btn)
|
||||
self:PlayOutAni()
|
||||
end
|
||||
function DormPresetRenameCtrl:OnBtnClick_Confirm(btn)
|
||||
local sNewName = NovaAPI.GetTMPInputFieldText(self._mapNode.inputRename)
|
||||
if sNewName == "" then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_05"))
|
||||
return
|
||||
end
|
||||
local bInit = NovaAPI.IsDirtyWordsInit()
|
||||
if not bInit then
|
||||
NovaAPI.InitDirtyWords()
|
||||
end
|
||||
if NovaAPI.IsDirtyString(sNewName) then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PLAYER_01"))
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
self:PlayOutAni()
|
||||
end
|
||||
PlayerData.PlayerDormData:DormUpdatePresetName(self.nRoomId, sNewName, callback)
|
||||
end
|
||||
return DormPresetRenameCtrl
|
||||
@@ -0,0 +1,17 @@
|
||||
local DormPresetRenamePanel = class("DormPresetRenamePanel", BasePanel)
|
||||
DormPresetRenamePanel._bIsMainPanel = false
|
||||
DormPresetRenamePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormRenamePanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.Rename.DormPresetRenameCtrl"
|
||||
}
|
||||
}
|
||||
function DormPresetRenamePanel:Awake()
|
||||
end
|
||||
function DormPresetRenamePanel:OnEnable()
|
||||
end
|
||||
function DormPresetRenamePanel:OnDisable()
|
||||
end
|
||||
function DormPresetRenamePanel:OnDestroy()
|
||||
end
|
||||
return DormPresetRenamePanel
|
||||
@@ -0,0 +1,152 @@
|
||||
local DormRenameCtrl = class("DormRenameCtrl", BaseCtrl)
|
||||
DormRenameCtrl._mapNodeConfig = {
|
||||
blur = {
|
||||
sNodeName = "t_fullscreen_blur_blue"
|
||||
},
|
||||
aniBlur = {
|
||||
sNodeName = "t_fullscreen_blur_blue",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
aniWindow = {
|
||||
sNodeName = "---Rename---",
|
||||
sComponentName = "Animator"
|
||||
},
|
||||
goWindow = {
|
||||
sNodeName = "---Rename---"
|
||||
},
|
||||
txtWindowTitle = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Rename"
|
||||
},
|
||||
txtOldName = {sComponentName = "TMP_Text"},
|
||||
txtNameDesc = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_NameDesc"
|
||||
},
|
||||
txtHint2 = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_NameDesc"
|
||||
},
|
||||
txtCurName = {sComponentName = "TMP_Text"},
|
||||
inputRename = {
|
||||
sComponentName = "TMP_InputField"
|
||||
},
|
||||
btnBlur = {
|
||||
sNodeName = "snapshot",
|
||||
sComponentName = "Button",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnClose = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnCancel = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Cancel"
|
||||
},
|
||||
btnConfirm1 = {
|
||||
sComponentName = "UIButton",
|
||||
callback = "OnBtnClick_Confirm"
|
||||
},
|
||||
txtBtnConfirm = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Btn_Confirm"
|
||||
},
|
||||
txtBtnCancel = {
|
||||
sComponentName = "TMP_Text",
|
||||
sLanguageId = "Friend_Btn_Cancel"
|
||||
}
|
||||
}
|
||||
DormRenameCtrl._mapEventConfig = {}
|
||||
function DormRenameCtrl:Open()
|
||||
self:Refresh()
|
||||
self:PlayInAni()
|
||||
end
|
||||
function DormRenameCtrl:Refresh()
|
||||
local bInit = NovaAPI.IsDirtyWordsInit()
|
||||
if not bInit then
|
||||
NovaAPI.InitDirtyWords()
|
||||
end
|
||||
NovaAPI.SetTMPInputFieldText(self._mapNode.inputRename, "")
|
||||
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.sCurName)
|
||||
end
|
||||
function DormRenameCtrl:PlayInAni()
|
||||
self._mapNode.goWindow:SetActive(true)
|
||||
self._mapNode.blur:SetActive(true)
|
||||
self._mapNode.aniWindow:Play("t_window_04_t_in")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
||||
end
|
||||
function DormRenameCtrl:PlayOutAni()
|
||||
self._mapNode.aniWindow:Play("t_window_04_t_out")
|
||||
self._mapNode.aniBlur:SetTrigger("tOut")
|
||||
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
||||
self:AddTimer(1, 0.2, "Close", true, true, true)
|
||||
end
|
||||
function DormRenameCtrl:Close()
|
||||
EventManager.Hit(EventId.ClosePanel, PanelId.DormRenamePanel)
|
||||
end
|
||||
function DormRenameCtrl:Awake()
|
||||
local tbParam = self:GetPanelParam()
|
||||
if type(tbParam) == "table" then
|
||||
self.nRoomId = tbParam[1]
|
||||
end
|
||||
end
|
||||
function DormRenameCtrl:OnEnable()
|
||||
local sec = ConfigTable.GetConfigNumber("DormNameResetTimeLimit")
|
||||
local day = math.ceil(sec / 86400)
|
||||
NovaAPI.SetTMPText(self._mapNode.txtHint2, orderedFormat(ConfigTable.GetUIText("Dorm_Rename_TimeCD"), day))
|
||||
self._mapNode.txtHint2.gameObject:SetActive(true)
|
||||
if self.nRoomId == 0 then
|
||||
local mapDormInfo = PlayerData.PlayerDormData:GetPlayerBaseInfo()
|
||||
if mapDormInfo ~= nil then
|
||||
self.sCurName = mapDormInfo.DormName
|
||||
end
|
||||
if self.sCurName == nil or self.sCurName == "" then
|
||||
self.sCurName = ConfigTable.GetUIText("Dorm_DefaultName")
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtOldName, ConfigTable.GetUIText("Dorm_RenameDormTitle"))
|
||||
self:Open()
|
||||
else
|
||||
local callback = function(mapDormInfo)
|
||||
if mapDormInfo ~= nil and mapDormInfo[self.nRoomId] ~= nil then
|
||||
self.sCurName = mapDormInfo[self.nRoomId].RoomName
|
||||
end
|
||||
if self.sCurName == nil or self.sCurName == "" then
|
||||
local mapRoomConfig = ConfigTable.GetData("DormRoom", self.nRoomId)
|
||||
if mapRoomConfig ~= nil then
|
||||
self.sCurName = mapRoomConfig.DefaultName
|
||||
end
|
||||
end
|
||||
self:Open()
|
||||
end
|
||||
NovaAPI.SetTMPText(self._mapNode.txtOldName, ConfigTable.GetUIText("Dorm_RenameRoomTitle"))
|
||||
PlayerData.PlayerDormData:GetRoomInfo(callback)
|
||||
end
|
||||
end
|
||||
function DormRenameCtrl:OnDisable()
|
||||
end
|
||||
function DormRenameCtrl:OnDestroy()
|
||||
end
|
||||
function DormRenameCtrl:OnBtnClick_Cancel(btn)
|
||||
self:PlayOutAni()
|
||||
end
|
||||
function DormRenameCtrl:OnBtnClick_Confirm(btn)
|
||||
local sNewName = NovaAPI.GetTMPInputFieldText(self._mapNode.inputRename)
|
||||
if sNewName == "" then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_05"))
|
||||
return
|
||||
end
|
||||
local bInit = NovaAPI.IsDirtyWordsInit()
|
||||
if not bInit then
|
||||
NovaAPI.InitDirtyWords()
|
||||
end
|
||||
if NovaAPI.IsDirtyString(sNewName) then
|
||||
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PLAYER_01"))
|
||||
return
|
||||
end
|
||||
local callback = function()
|
||||
self:PlayOutAni()
|
||||
end
|
||||
PlayerData.PlayerDormData:RenameDorm(self.nRoomId, sNewName, callback)
|
||||
end
|
||||
return DormRenameCtrl
|
||||
@@ -0,0 +1,17 @@
|
||||
local DormRenamePanel = class("DormRenamePanel", BasePanel)
|
||||
DormRenamePanel._bIsMainPanel = false
|
||||
DormRenamePanel._tbDefine = {
|
||||
{
|
||||
sPrefabPath = "Dorm/DormRenamePanel.prefab",
|
||||
sCtrlName = "Game.UI.Dorm.Rename.DormRenameCtrl"
|
||||
}
|
||||
}
|
||||
function DormRenamePanel:Awake()
|
||||
end
|
||||
function DormRenamePanel:OnEnable()
|
||||
end
|
||||
function DormRenamePanel:OnDisable()
|
||||
end
|
||||
function DormRenamePanel:OnDestroy()
|
||||
end
|
||||
return DormRenamePanel
|
||||
Reference in New Issue
Block a user