Major Update - 2.0.0.143

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