815 lines
29 KiB
Lua
815 lines
29 KiB
Lua
|
-- 家具摆放界面
|
||
|
local XUiFurnitureReform = XLuaUiManager.Register(XLuaUi, "UiFurnitureReform")
|
||
|
|
||
|
local XUiPanelMenu = require("XUi/XUiDorm/XUiFurnitureReform/XUiPanelMenu")
|
||
|
local XUiFurnitureAttrGrid = require("XUi/XUiDorm/XUiFurnitureReform/XUiFurnitureAttrGrid")
|
||
|
|
||
|
local FurnitureCache = {}
|
||
|
local delayRefreshTimer = nil
|
||
|
local delayUpdateScoresTimer = nil
|
||
|
|
||
|
function XUiFurnitureReform:OnAwake()
|
||
|
self.SuitCFG = XFurnitureConfigs.GetFurnitureSuitTemplates()
|
||
|
self.RefreshFurnitureList = function() self:RefreshFurntiureReform() end
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_FURNITURE_ON_MODIFY, self.RefreshFurnitureList, self)
|
||
|
|
||
|
self.BtnFilter.CallBack = function() self:OnBtnFilterClick() end
|
||
|
self.BtnBack.CallBack = function() self:OnBtnBackClick() end
|
||
|
self.BtnRecover.CallBack = function() self:OnBtnRecoverClick() end
|
||
|
self.BtnUndo.CallBack = function() self:OnBtnUndoClick() end
|
||
|
self.BtnSaveAndQuit.CallBack = function() self:OnBtnSaveClick() end
|
||
|
self.BtnExplain.CallBack = function() self:OnBtnExplainClick() end
|
||
|
self.BtnFilterBack.CallBack = function() self:OnBtnFilterBackClick() end
|
||
|
self:RegisterClickEvent(self.BtnDrdSort, self.OnBtnShowDormAttr)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnStart(roomId, roomType)
|
||
|
self.PanelMenu.gameObject:SetActive(false)
|
||
|
|
||
|
self.MenuPanel = XUiPanelMenu.New(self, self.PanelMenu)
|
||
|
self.MainPanelGo = self.Transform:Find("SafeAreaContentPane").gameObject
|
||
|
|
||
|
XHomeDormManager.SetClickFurnitureCallback(function(furniture) self:ShowFurnitureMenu(furniture, false, false) end)
|
||
|
XHomeDormManager.ReformRoom(roomId, true)
|
||
|
XHomeCharManager.HideAllCharacter()
|
||
|
|
||
|
self.CameraController = XHomeSceneManager.GetSceneCameraController()
|
||
|
if not XTool.UObjIsNil(self.CameraController) then
|
||
|
self.OldCameraDistance = self.CameraController.Distance
|
||
|
self.OldCameraTarget = self.CameraController.TargetObj
|
||
|
self.TargetAngleX = self.CameraController.TargetAngleX
|
||
|
self.TargetAngleY = self.CameraController.TargetAngleY
|
||
|
XCameraHelper.SetCameraTarget(self.CameraController, self.OldCameraTarget, 13)
|
||
|
end
|
||
|
|
||
|
self.RoomId = roomId
|
||
|
self.RoomType = roomType
|
||
|
self.IsMyRoom = roomType == XDormConfig.DormDataType.Self
|
||
|
self.GridSuitPool = {}
|
||
|
self.GridBaseTypePool = {}
|
||
|
self.GridSubTypePool = {}
|
||
|
self.BtnTabGoList = {}
|
||
|
self.PanelFilterGameObject = self.PanelFilter.gameObject
|
||
|
self.CurrentBaseTypeId = nil
|
||
|
self.CurrentSubTypeId = nil
|
||
|
self.CurrentSuitId = 1--by default
|
||
|
self.DefaultBaseType = CS.XGame.ClientConfig:GetInt("UiFurnitureReformDefaultBaseType")
|
||
|
self:Init()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnEnable()
|
||
|
XDataCenter.FurnitureManager.SetInRefeform(true)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnDisable()
|
||
|
XHomeDormManager.SetClickFurnitureCallback(nil)
|
||
|
XHomeDormManager.AttachSurfaceToRoom()
|
||
|
XHomeDormManager.ReformRoom(self.RoomId, false)
|
||
|
XDataCenter.FurnitureManager.SetInRefeform(false)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnHideBlockGrids()
|
||
|
if self.CurFurniture then
|
||
|
XHomeDormManager.OnHideBlockGrids(self.CurFurniture.HomePlatType, self.CurFurniture.RotateAngle)
|
||
|
end
|
||
|
end
|
||
|
function XUiFurnitureReform:OnBtnCancelClick()
|
||
|
if self.RoomId then
|
||
|
XHomeDormManager.RevertRoom(self.RoomId)
|
||
|
self:CloseFurnitureReform()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnBtnBackClick()
|
||
|
if self.RoomId and XHomeDormManager.IsNeedSave(self.RoomId, self.RoomType) then
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("FurnitureTips"), CS.XTextManager.GetText("FurnitureIsSave"), XUiManager.DialogType.Normal, function()
|
||
|
XHomeDormManager.RevertRoom(self.RoomId)
|
||
|
self:CloseFurnitureReform()
|
||
|
end, function()
|
||
|
XHomeDormManager.SaveRoomModification(self.RoomId, false, function()
|
||
|
self:CloseFurnitureReform()
|
||
|
end)
|
||
|
end)
|
||
|
else
|
||
|
self:CloseFurnitureReform()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:CloseFurnitureReform()
|
||
|
self:RestoreViewAngles()
|
||
|
self:Close()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnBtnShowDormAttr()
|
||
|
|
||
|
if self.FurnitureTagTypeShow then
|
||
|
self.Template.gameObject:SetActiveEx(false)
|
||
|
self.FurnitureTagTypeShow = false
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.FurnitureTagTypeShow = true
|
||
|
self.Template.gameObject:SetActiveEx(true)
|
||
|
self.DynamicTable:SetTotalCount(#self.FurnitureTagType)
|
||
|
self.DynamicTable:ReloadDataSync()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnBtnFilterClick()
|
||
|
self:ShowPanelFilter()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnBtnFilterBackClick()
|
||
|
self:HidePanelFilter()
|
||
|
end
|
||
|
|
||
|
-- 全部收起
|
||
|
function XUiFurnitureReform:OnBtnRecoverClick()
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("FurnitureTips"), CS.XTextManager.GetText("FurnitureCleanRoom"), XUiManager.DialogType.Normal, nil, function()
|
||
|
XHomeDormManager.CleanRoom(self.RoomId)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- 重置房间
|
||
|
function XUiFurnitureReform:OnBtnUndoClick()
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("FurnitureTips"), CS.XTextManager.GetText("FurnitureRevertRoom"), XUiManager.DialogType.Normal, nil, function()
|
||
|
XHomeDormManager.RevertRoom(self.RoomId)
|
||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_DORM_FURNITURE_ATTR_TAG, self.FurnitureTagType[self.SelectIndex].AttrIndex)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- 保存房间
|
||
|
function XUiFurnitureReform:OnBtnSaveClick()
|
||
|
XHomeDormManager.SaveRoomModification(self.RoomId)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnBtnExplainClick()
|
||
|
XUiManager.UiFubenDialogTip(CS.XTextManager.GetText("DormDes"), CS.XTextManager.GetText("FurnitureDescription") or "")
|
||
|
end
|
||
|
|
||
|
-- 显示家具菜单
|
||
|
function XUiFurnitureReform:ShowFurnitureMenu(furniture, isFollowMouse, isNew)
|
||
|
self.MainPanelGo:SetActive(not furniture)
|
||
|
local isOutOfLimit = false
|
||
|
if furniture and (not XDataCenter.FurnitureManager.CheckFurnitureUsing(furniture.Data.Id)) then
|
||
|
local minorType = XFurnitureConfigs.GetFurnitureTypeCfgByConfigId(furniture.Data.CfgId).MinorType
|
||
|
local curLength = XHomeDormManager.GetFurnitureNumsByRoomAndMinor(self.RoomId, minorType)
|
||
|
local curCapacity = XHomeDormManager.GetFurnitureCapacityByRoomANdMinor(self.RoomId, minorType, self.RoomType)
|
||
|
isOutOfLimit = (curCapacity > 0) and (curLength >= curCapacity) or false
|
||
|
end
|
||
|
self.MenuPanel:SetFurniture(furniture, isFollowMouse, isNew, isOutOfLimit)
|
||
|
|
||
|
self.CurFurniture = furniture
|
||
|
self:OnShowBlockGrids()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnShowBlockGrids()
|
||
|
if self.CurFurniture then
|
||
|
XHomeDormManager.OnShowBlockGrids(self.CurFurniture.HomePlatType, self.CurFurniture.GridOffset, self.CurFurniture.RotateAngle)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--初始化begin
|
||
|
function XUiFurnitureReform:Init()
|
||
|
self:InitType()
|
||
|
self:RestoreCache()
|
||
|
local roomFurnitureCount = XDataCenter.DormManager.GetRoomDataByRoomId(self.RoomId, self.RoomType).FurnitureCount
|
||
|
self.SViewFurniture = XUiPanelSViewFurniture.New(self.PanelSViewFurniture, self, roomFurnitureCount, self.RoomType)
|
||
|
--初始化家具类型
|
||
|
self.TypeList = XFurnitureConfigs.GetFurnitureTypeGroupList()
|
||
|
self.FurnitureGroupList = self:GenerateFurnitureGroupList(self.TypeList)
|
||
|
self:InitFurnitureTabGroup()
|
||
|
|
||
|
self.GridOption.gameObject:SetActive(false)
|
||
|
if not self.SuitCFG then
|
||
|
XLog.Warning("XUiFurnitureReform:Init error: self.SuitCFG is nil")
|
||
|
end
|
||
|
|
||
|
self:InitFurnitureAttrTag()
|
||
|
|
||
|
if not self.DynamicTableSuit then
|
||
|
self.DynamicTableSuit = XDynamicTableNormal.New(self.SViewFilter.gameObject)
|
||
|
self.DynamicTableSuit:SetProxy(XUiGridOption)
|
||
|
self.DynamicTableSuit:SetDelegate(self)
|
||
|
end
|
||
|
self:UpdateScores()
|
||
|
self:SwitchSuitFilter(self.CurrentSuitId or 1)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:InitType()
|
||
|
self.BtnDrdSort.gameObject:SetActiveEx(self.IsMyRoom)
|
||
|
self.PanelTool.gameObject:SetActiveEx(self.IsMyRoom)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:InitFurnitureAttrTag()
|
||
|
|
||
|
self.FurnitureTagType = XFurnitureConfigs.GetFurnitureTagTypeTemplates()
|
||
|
self.FurnitureTagTypeShow = false
|
||
|
|
||
|
|
||
|
--local key = tostring(XPlayer.Id) .. "FurnitureAttr"
|
||
|
self.SelectIndex = 1
|
||
|
XHomeDormManager.FurnitureShowAttrType = -1
|
||
|
|
||
|
|
||
|
self.BtnDrdSortLabel.text = self.FurnitureTagType[self.SelectIndex].TagName
|
||
|
|
||
|
--家具属性tips
|
||
|
self.DynamicTable = XDynamicTableNormal.New(self.Template)
|
||
|
self.DynamicTable:SetProxy(XUiFurnitureAttrGrid)
|
||
|
self.DynamicTable:SetDelegate(self)
|
||
|
self.DynamicTable:SetDynamicEventDelegate(function(...)
|
||
|
self:OnFurnitureAttrDynamicTableEvent(...)
|
||
|
end)
|
||
|
|
||
|
|
||
|
self.SelectGrid = nil
|
||
|
|
||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_DORM_FURNITURE_ATTR_TAG, self.FurnitureTagType[self.SelectIndex].AttrIndex)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GenerateFurnitureGroupList()
|
||
|
local groupList = {}
|
||
|
|
||
|
for i = 1, #self.TypeList do
|
||
|
local typeList = self.TypeList[i]
|
||
|
table.insert(groupList, {
|
||
|
MinorType = typeList.MinorType,
|
||
|
MinorName = typeList.MinorName,
|
||
|
isBaseType = true
|
||
|
})
|
||
|
local subIndex = #groupList
|
||
|
for index = 1, #typeList.CategoryList do
|
||
|
local categoryData = typeList.CategoryList[index]
|
||
|
table.insert(groupList, {
|
||
|
MinorType = typeList.MinorType,
|
||
|
MinorName = typeList.MinorName,
|
||
|
SubIndex = subIndex,
|
||
|
CategoryType = categoryData.Category,
|
||
|
CategoryName = categoryData.CategoryName,
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
return groupList
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:InitFurnitureTabGroup()
|
||
|
for i = 1, #self.FurnitureGroupList do
|
||
|
local tempGroup = self.FurnitureGroupList[i]
|
||
|
if not self.BtnTabGoList[i] then
|
||
|
local tempBtnTab
|
||
|
if tempGroup.SubIndex and tempGroup.SubIndex > 0 then
|
||
|
tempBtnTab = CS.UnityEngine.Object.Instantiate(self.Obj:GetPrefab("BtnTabFurnitureSubType"))
|
||
|
else
|
||
|
tempBtnTab = CS.UnityEngine.Object.Instantiate(self.Obj:GetPrefab("BtnTabFurnitureBaseType"))
|
||
|
end
|
||
|
tempBtnTab.transform:SetParent(self.TabGroupContent.transform, false)
|
||
|
local uiButton = tempBtnTab:GetComponent("XUiButton")
|
||
|
uiButton.SubGroupIndex = tempGroup.SubIndex
|
||
|
table.insert(self.BtnTabGoList, uiButton)
|
||
|
end
|
||
|
self.BtnTabGoList[i].gameObject:SetActive(true)
|
||
|
end
|
||
|
|
||
|
for i = #self.FurnitureGroupList + 1, #self.BtnTabGoList do
|
||
|
self.BtnTabGoList[i].gameObject:SetActive(false)
|
||
|
end
|
||
|
self.TabFurnitureGroup:Init(self.BtnTabGoList, function(index) self:OnSelectFurnitureType(index) end)
|
||
|
|
||
|
for i = 0, #self.FurnitureGroupList - 1 do
|
||
|
local furnitureGroup = self.FurnitureGroupList[i + 1]
|
||
|
if furnitureGroup then
|
||
|
if furnitureGroup.SubIndex and furnitureGroup.SubIndex > 0 then
|
||
|
self.TabFurnitureGroup.TabBtnList[i]:SetNameByGroup(0, furnitureGroup.CategoryName)
|
||
|
|
||
|
local count
|
||
|
local categoryList = self:GetCategoryListByMinorType(furnitureGroup.MinorType)
|
||
|
if #categoryList <= 0 then
|
||
|
count = self:GetBaseTypeCount(furnitureGroup.MinorType)
|
||
|
else
|
||
|
if furnitureGroup.CategoryType == 0 then
|
||
|
count = self:GetBaseTypeCount(furnitureGroup.MinorType)
|
||
|
else
|
||
|
count = self:GetSubTypeCount(furnitureGroup.MinorType, furnitureGroup.CategoryType)
|
||
|
end
|
||
|
end
|
||
|
self.TabFurnitureGroup.TabBtnList[i]:SetNameByGroup(1, count)
|
||
|
else
|
||
|
self.TabFurnitureGroup.TabBtnList[i]:SetNameByGroup(0, furnitureGroup.MinorName)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
self.TabFurnitureGroup:SelectIndex(1)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnSelectFurnitureType(index)
|
||
|
local furnitureGroup = self.FurnitureGroupList[index]
|
||
|
self.LastSelectGroupIndex = index
|
||
|
if furnitureGroup then
|
||
|
self.LastBaseTypeId = self.CurrentBaseTypeId
|
||
|
self.CurrentBaseTypeId = furnitureGroup.MinorType
|
||
|
|
||
|
--选中二级菜单
|
||
|
local categoryList = self:GetCategoryListByMinorType(self.CurrentBaseTypeId)
|
||
|
if #categoryList <= 0 then
|
||
|
self:SwitchSubType(0)
|
||
|
else
|
||
|
self:SwitchSubType(furnitureGroup.CategoryType)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:SelectTypeByFurniture(furnitureId)
|
||
|
if not furnitureId or furnitureId <= 0 then return end
|
||
|
|
||
|
local furntiureDatas = XDataCenter.FurnitureManager.GetFurnitureById(furnitureId)
|
||
|
if not furntiureDatas then return end
|
||
|
|
||
|
local furnitureTemplates = XFurnitureConfigs.GetFurnitureTemplateById(furntiureDatas.ConfigId)
|
||
|
if not furnitureTemplates then return end
|
||
|
|
||
|
local furnitureTypeTemplates = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplates.TypeId)
|
||
|
if not furnitureTypeTemplates then return end
|
||
|
|
||
|
local index = 0
|
||
|
local subIndex = 0
|
||
|
for tabKey, tabValue in ipairs(self.FurnitureGroupList) do
|
||
|
if furnitureTypeTemplates.MinorType == tabValue.MinorType and tabValue.CategoryType and tabValue.CategoryType == furnitureTypeTemplates.Category then
|
||
|
index = tabKey
|
||
|
end
|
||
|
if furnitureTypeTemplates.MinorType == tabValue.MinorType and tabValue.CategoryType == nil then
|
||
|
subIndex = tabKey
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if index == 0 or (self.LastSelectGroupIndex and self.LastSelectGroupIndex == index) then return end
|
||
|
|
||
|
local furnitureGroup = self.FurnitureGroupList[self.LastSelectGroupIndex]
|
||
|
if subIndex > 0 and furnitureGroup and furnitureGroup.MinorType ~= furnitureTypeTemplates.MinorType then
|
||
|
self.TabFurnitureGroup:SelectIndex(subIndex)
|
||
|
end
|
||
|
self.TabFurnitureGroup:SelectIndex(index)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GetCategoryListByMinorType(minor)
|
||
|
local typeList = XFurnitureConfigs.GetFurnitureTypeList()
|
||
|
for _, v in pairs(typeList) do
|
||
|
if v.MinorType == minor then
|
||
|
return v.CategoryList
|
||
|
end
|
||
|
end
|
||
|
return {}
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnDynamicTableEvent(event, index, grid)
|
||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
|
self:OnRefreshSuit(index, grid)
|
||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
|
self:OnRefreshSuit(index, grid)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnRefreshSuit(index, grid)
|
||
|
local data = self.SuitCFG[index]
|
||
|
if not data then return end
|
||
|
grid:Init(data, self)
|
||
|
end
|
||
|
|
||
|
--切换选择家具基础类型
|
||
|
function XUiFurnitureReform:SwitchBaseType(baseTypeId)
|
||
|
if not baseTypeId then return end
|
||
|
self.CurrentBaseTypeId = baseTypeId
|
||
|
self.CurrentSubTypeId = nil
|
||
|
|
||
|
self:UpdateItemsByFilter()
|
||
|
self:UpdatePanelLimit()
|
||
|
self:SwitchViewAngle(baseTypeId)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:SwitchViewAngle(minor)
|
||
|
local viewAngles = XFurnitureConfigs.GetFurnitureViewAngleByMinor(minor)
|
||
|
if not viewAngles then return end
|
||
|
if self.LastBaseTypeId then
|
||
|
local lastViewAngles = XFurnitureConfigs.GetFurnitureViewAngleByMinor(self.LastBaseTypeId)
|
||
|
if lastViewAngles and lastViewAngles.GroupId == viewAngles.GroupId then return end
|
||
|
end
|
||
|
|
||
|
XHomeSceneManager.ChangeAngleYAndYAxis(viewAngles.TargetAngleY, viewAngles.AllowYAxis == 1)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:RestoreViewAngles()
|
||
|
local defaultTargetAngle = CS.XGame.ClientConfig:GetInt("DefaultDormTargetAngle")
|
||
|
local defaultAllowYAxis = CS.XGame.ClientConfig:GetInt("DefaultAllowYAxis")
|
||
|
XHomeSceneManager.ChangeAngleYAndYAxis(defaultTargetAngle, defaultAllowYAxis == 1)
|
||
|
end
|
||
|
|
||
|
--切换选择家具二级类型
|
||
|
function XUiFurnitureReform:SwitchSubType(subTypeId)
|
||
|
if not subTypeId then return end
|
||
|
if subTypeId == 0 then
|
||
|
self:SwitchBaseType(self.CurrentBaseTypeId)
|
||
|
return
|
||
|
end
|
||
|
self.CurrentSubTypeId = subTypeId
|
||
|
self:UpdateItemsByFilter()
|
||
|
self:UpdatePanelLimit()
|
||
|
end
|
||
|
|
||
|
--隐藏二级类型
|
||
|
function XUiFurnitureReform:HideSubTypePanel()
|
||
|
if self.PanelSubType.gameObject.activeSelf then
|
||
|
self.PanelSubType.gameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--显示套装过滤面板
|
||
|
function XUiFurnitureReform:ShowPanelFilter()
|
||
|
self.PanelFilterGameObject:SetActive(true)
|
||
|
|
||
|
if not self.DynamicTableSuit then return end
|
||
|
self.DynamicTableSuit:SetDataSource(self.SuitCFG)
|
||
|
self.DynamicTableSuit:ReloadDataASync(1)
|
||
|
|
||
|
self.FilterEnable:PlayTimelineAnimation()
|
||
|
end
|
||
|
|
||
|
--隐藏套装过滤面板
|
||
|
function XUiFurnitureReform:HidePanelFilter()
|
||
|
self.FilterDisable:PlayTimelineAnimation(function()
|
||
|
self.PanelFilterGameObject:SetActive(false)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
--选择套装过滤
|
||
|
function XUiFurnitureReform:SwitchSuitFilter(suitId)
|
||
|
self:HidePanelFilter()
|
||
|
self.CurrentSuitId = suitId
|
||
|
self.BtnFilter:SetNameByGroup(0, self.SuitCFG[suitId].SuitName)
|
||
|
|
||
|
self:UpdateItemsByFilter()
|
||
|
self:UpdateCountOnChanged()
|
||
|
self:UpdatePanelLimit()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:UpdateCountOnChanged()
|
||
|
-- 切换了套装,数量要重新结算
|
||
|
self:UpdateSubTypeCount()
|
||
|
-- 获得套装数量
|
||
|
if self.CurrentSuitId then
|
||
|
self.BtnFilter:SetNameByGroup(1, self:CalcFurnitureNumsBySuitId(self.CurrentSuitId))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:CalcFurnitureNumsBySuitId(suitId)
|
||
|
if not self.RoomId then return 0 end
|
||
|
if self.IsMyRoom then
|
||
|
return XDataCenter.FurnitureManager.GetFurnitureCountBySuitId(self.RoomId, FurnitureCache, suitId)
|
||
|
end
|
||
|
|
||
|
return XFurnitureConfigs.GetSuitCount(suitId)
|
||
|
end
|
||
|
|
||
|
--根据条件过滤家具
|
||
|
function XUiFurnitureReform:UpdateItemsByFilter()
|
||
|
if delayRefreshTimer then
|
||
|
XScheduleManager.UnSchedule(delayRefreshTimer)
|
||
|
delayRefreshTimer = nil
|
||
|
end
|
||
|
|
||
|
delayRefreshTimer = XScheduleManager.ScheduleOnce(function()
|
||
|
local cacheKey = self:GetCacheKey(self.CurrentBaseTypeId, self.CurrentSubTypeId)
|
||
|
self:SortFurnitureCache(FurnitureCache[cacheKey])
|
||
|
|
||
|
local filterSuitCache
|
||
|
if self.IsMyRoom then
|
||
|
filterSuitCache = self:FilterCacheBySuitId(FurnitureCache[cacheKey] or {})
|
||
|
else
|
||
|
filterSuitCache = XFurnitureConfigs.GetFurnitureCfgList(self.CurrentBaseTypeId, self.CurrentSubTypeId, self.CurrentSuitId)
|
||
|
end
|
||
|
|
||
|
if self.SViewFurniture then
|
||
|
self.SViewFurniture:UpdateItems(filterSuitCache)
|
||
|
self.AnimFurnitureList:PlayTimelineAnimation()
|
||
|
end
|
||
|
end, 100)
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:FilterCacheBySuitId(cache)
|
||
|
local suitCache = {}
|
||
|
|
||
|
if (not self.CurrentSuitId) or (not cache) or self.CurrentSuitId == 1 then return cache end
|
||
|
|
||
|
for _, v in ipairs(cache) do
|
||
|
local furntiureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(v.ConfigId)
|
||
|
if furntiureTemplate.SuitId == self.CurrentSuitId then
|
||
|
table.insert(suitCache, v)
|
||
|
end
|
||
|
end
|
||
|
return suitCache
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:SortFurnitureCache(cache)
|
||
|
|
||
|
if not cache then return end
|
||
|
|
||
|
local j
|
||
|
|
||
|
for i = 2, #cache do
|
||
|
local temp = cache[i]
|
||
|
j = i - 1
|
||
|
while (j > 0) do
|
||
|
local totalJScores = XDataCenter.FurnitureManager.GetFurnitureScore(cache[j].Id)
|
||
|
local totalIScores = XDataCenter.FurnitureManager.GetFurnitureScore(temp.Id)
|
||
|
if totalIScores <= totalJScores then
|
||
|
break
|
||
|
end
|
||
|
cache[j + 1] = cache[j]
|
||
|
j = j - 1
|
||
|
end
|
||
|
cache[j + 1] = temp
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
-- 更新家具的数量
|
||
|
function XUiFurnitureReform:UpdateSubTypeCount()
|
||
|
if not self.FurnitureGroupList then return end
|
||
|
for i = 0, #self.FurnitureGroupList - 1 do
|
||
|
local furnitureGroup = self.FurnitureGroupList[i + 1]
|
||
|
if furnitureGroup then
|
||
|
local categoryList = self:GetCategoryListByMinorType(furnitureGroup.MinorType)
|
||
|
|
||
|
local count
|
||
|
if #categoryList <= 0 then
|
||
|
count = self:GetBaseTypeCount(furnitureGroup.MinorType)
|
||
|
else
|
||
|
if furnitureGroup.CategoryType == nil or furnitureGroup.CategoryType == 0 then
|
||
|
count = self:GetBaseTypeCount(furnitureGroup.MinorType)
|
||
|
else
|
||
|
count = self:GetSubTypeCount(furnitureGroup.MinorType, furnitureGroup.CategoryType)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
self.TabFurnitureGroup.TabBtnList[i]:SetNameByGroup(1, count)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GetBaseTypeCount(minor)
|
||
|
if self.IsMyRoom then
|
||
|
local cacheKey = self:GetCacheKey(minor, nil)
|
||
|
return XDataCenter.FurnitureManager.GetFurnitureCountByMinorTypeAndSuitId(self.RoomId, FurnitureCache[cacheKey], self.CurrentSuitId, minor)
|
||
|
end
|
||
|
|
||
|
return XFurnitureConfigs.GetCountByMinor(minor, self.CurrentSuitId)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GetSubTypeCount(minor, category)
|
||
|
if self.IsMyRoom then
|
||
|
local cacheKey = self:GetCacheKey(minor, category)
|
||
|
return XDataCenter.FurnitureManager.GetFurnitureCountByMinorAndCategoryAndSuitId(self.RoomId, FurnitureCache[cacheKey], self.CurrentSuitId, minor, category)
|
||
|
end
|
||
|
|
||
|
return XFurnitureConfigs.GetCountByCategory(minor, category, self.CurrentSuitId)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GetCurrentSuitId()
|
||
|
return self.CurrentSuitId or 1
|
||
|
end
|
||
|
|
||
|
--更新放置限制面板
|
||
|
function XUiFurnitureReform:UpdatePanelLimit()
|
||
|
if not self.CurrentBaseTypeId then return end
|
||
|
local typeList = XFurnitureConfigs.GetFurnitureTypeList()
|
||
|
for _, v in pairs(typeList) do
|
||
|
if self.CurrentBaseTypeId == v.MinorType then
|
||
|
self.TxtLimit.text = v.MinorName
|
||
|
if self.CurrentSubTypeId ~= nil and #v.CategoryList > 0 then
|
||
|
for _, category in pairs(v.CategoryList) do
|
||
|
if self.CurrentSubTypeId == category.Category then
|
||
|
self.TxtLimit.text = string.format("%s-%s", v.MinorName, category.CategoryName)
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|
||
|
function XUiFurnitureReform:UpdateScores()
|
||
|
if self.RoomType ~= XDormConfig.DormDataType.Self then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if delayUpdateScoresTimer then
|
||
|
XScheduleManager.UnSchedule(delayUpdateScoresTimer)
|
||
|
delayUpdateScoresTimer = nil
|
||
|
end
|
||
|
delayUpdateScoresTimer = XScheduleManager.ScheduleOnce(function()
|
||
|
if self.RoomId then
|
||
|
local newFurnitureAttrs = XHomeDormManager.GetFurnitureScoresByRoomId(self.RoomId)
|
||
|
local oldFurnitureAttrs = XHomeDormManager.GetFurnitureScoresByUnsaveRoom(self.RoomId)
|
||
|
|
||
|
-- 总评分
|
||
|
local oldScores = oldFurnitureAttrs.TotalScore
|
||
|
local newScores = newFurnitureAttrs.TotalScore
|
||
|
self.TxtTotalScore.text = XFurnitureConfigs.GetFurnitureTotalAttrLevelNewColorDescription(1, newScores)
|
||
|
self.ImgTotalScoreDown.gameObject:SetActive(newScores < oldScores)
|
||
|
self.ImgTotalScoreUp.gameObject:SetActive(newScores > oldScores)
|
||
|
|
||
|
-- 三个属性分
|
||
|
for i = 1, #newFurnitureAttrs.AttrList do
|
||
|
local attrOldVal = oldFurnitureAttrs.AttrList[i]
|
||
|
local attrNewVal = newFurnitureAttrs.AttrList[i]
|
||
|
local typeDatas = XFurnitureConfigs.GetDormFurnitureType(i)
|
||
|
self:SetUiSprite(self[string.format("ImgTool%d", i)], typeDatas.TypeIcon)
|
||
|
self[string.format("TxtAttrTool%d", i)].text = XFurnitureConfigs.GetFurnitureAttrLevelNewDescription(1, i, attrNewVal)
|
||
|
self[string.format("ImgScoreUp%d", i)].gameObject:SetActive(attrOldVal < attrNewVal)
|
||
|
self[string.format("ImgScoreDown%d", i)].gameObject:SetActive(attrOldVal > attrNewVal)
|
||
|
end
|
||
|
end
|
||
|
end, 50)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:GetCacheKey(baseType, subType)
|
||
|
return XDataCenter.FurnitureManager.GenerateCacheKey(baseType, subType)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:ResetCache()
|
||
|
FurnitureCache = {}
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:RestoreCache()
|
||
|
local typeList = XFurnitureConfigs.GetFurnitureTypeList()
|
||
|
for _, typeDatas in pairs(typeList) do
|
||
|
local baseType = typeDatas.MinorType
|
||
|
local cacheBaseKey = self:GetCacheKey(baseType, nil)
|
||
|
FurnitureCache[cacheBaseKey] = XDataCenter.FurnitureManager.FilterDisplayFurnitures(self.RoomId, 1, baseType, nil)
|
||
|
|
||
|
for _, categoryList in pairs(typeDatas.CategoryList) do
|
||
|
local subType = categoryList.Category
|
||
|
if subType ~= 0 then
|
||
|
local cacheSubKey = self:GetCacheKey(baseType, subType)
|
||
|
FurnitureCache[cacheSubKey] = XDataCenter.FurnitureManager.FilterDisplayFurnitures(self.RoomId, 1, baseType, subType)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:UpdateCacheFurniture(isRemove, furntiureId)
|
||
|
|
||
|
local furnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(furntiureId)
|
||
|
if not furnitureDatas then return end
|
||
|
local furnitureTemplates = XFurnitureConfigs.GetFurnitureTemplateById(furnitureDatas.ConfigId)
|
||
|
local furntiureTypeTemplates = XFurnitureConfigs.GetFurnitureTypeById(furnitureTemplates.TypeId)
|
||
|
|
||
|
local baseCacheKey = self:GetCacheKey(furntiureTypeTemplates.MinorType, nil)
|
||
|
local baseSubCacheKey = self:GetCacheKey(furntiureTypeTemplates.MinorType, furntiureTypeTemplates.Category)
|
||
|
if isRemove then--收纳家具
|
||
|
self:AddCacheToList(FurnitureCache[baseCacheKey], furnitureDatas)
|
||
|
if FurnitureCache[baseSubCacheKey] then
|
||
|
self:AddCacheToList(FurnitureCache[baseSubCacheKey], furnitureDatas)
|
||
|
end
|
||
|
else--摆放家具
|
||
|
self:RemoveCacheFromList(FurnitureCache[baseCacheKey], furntiureId)
|
||
|
if FurnitureCache[baseSubCacheKey] then
|
||
|
self:RemoveCacheFromList(FurnitureCache[baseSubCacheKey], furntiureId)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
self:UpdateItemsByFilter()
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:AddCacheToList(cache, furnitureDatas)
|
||
|
for _, v in pairs(cache) do
|
||
|
if v.Id == furnitureDatas.Id then
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
|
||
|
table.insert(cache, furnitureDatas)
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:RemoveCacheFromList(cache, furnitureId)
|
||
|
local index = 0
|
||
|
local length = #cache
|
||
|
for k, v in pairs(cache) do
|
||
|
if v.Id == furnitureId then
|
||
|
index = k
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
if index == 0 then return end
|
||
|
cache[index] = nil
|
||
|
for i = index, length - 1 do
|
||
|
cache[i] = cache[i + 1]
|
||
|
end
|
||
|
cache[length] = nil
|
||
|
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnGetEvents()
|
||
|
return { XEventId.EVENT_FURNITURE_ONDRAGITEM_CHANGED, XEventId.EVENT_FURNITURE_REFRESH, XEventId.EVENT_FURNITURE_CLEANROOM, XEventId.EVENT_CLICKFURNITURE_ONROOM }
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnNotify(evt, ...)
|
||
|
if evt == XEventId.EVENT_FURNITURE_ONDRAGITEM_CHANGED then
|
||
|
local args = { ... }
|
||
|
if not args then return end
|
||
|
self:UpdateCacheFurniture(args[1], args[2])
|
||
|
self:UpdateCountOnChanged()
|
||
|
self:UpdatePanelLimit()
|
||
|
self:UpdateScores()
|
||
|
|
||
|
elseif evt == XEventId.EVENT_FURNITURE_REFRESH then
|
||
|
self:RefreshFurntiureReform()
|
||
|
elseif evt == XEventId.EVENT_FURNITURE_CLEANROOM then
|
||
|
|
||
|
self:UpdatePanelLimit()
|
||
|
self:UpdateScores()
|
||
|
|
||
|
elseif evt == XEventId.EVENT_CLICKFURNITURE_ONROOM then
|
||
|
|
||
|
local args = { ... }
|
||
|
if not args then return end
|
||
|
self:SelectTypeByFurniture(args[1])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:RefreshFurntiureReform()
|
||
|
self:RestoreCache()
|
||
|
self:UpdateItemsByFilter()
|
||
|
|
||
|
self:UpdateCountOnChanged()
|
||
|
self:UpdatePanelLimit()
|
||
|
self:UpdateScores()
|
||
|
end
|
||
|
|
||
|
function XUiFurnitureReform:OnDestroy()
|
||
|
if delayRefreshTimer then
|
||
|
XScheduleManager.UnSchedule(delayRefreshTimer)
|
||
|
delayRefreshTimer = nil
|
||
|
end
|
||
|
|
||
|
if delayUpdateScoresTimer then
|
||
|
XScheduleManager.UnSchedule(delayUpdateScoresTimer)
|
||
|
delayUpdateScoresTimer = nil
|
||
|
end
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_FURNITURE_ON_MODIFY, self.RefreshFurnitureList, self)
|
||
|
local isResetPosition = true
|
||
|
XHomeCharManager.ShowAllCharacter(isResetPosition)
|
||
|
|
||
|
if not XTool.UObjIsNil(self.CameraController) then
|
||
|
self.CameraController:SetTartAngle(CS.UnityEngine.Vector2(self.TargetAngleX, self.TargetAngleY))
|
||
|
XCameraHelper.SetCameraTarget(self.CameraController, self.OldCameraTarget, self.OldCameraDistance)
|
||
|
end
|
||
|
self.CameraController = nil
|
||
|
self.OldCameraTarget = nil
|
||
|
self.OldCameraDistance = nil
|
||
|
self.TargetAngleX = nil
|
||
|
self.TargetAngleY = nil
|
||
|
XDataCenter.FurnitureManager.SetInRefeform(false)
|
||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_DORM_FURNITURE_HIDE_ALL_ATTR_TAG_DETAIL)
|
||
|
end
|
||
|
|
||
|
|
||
|
function XUiFurnitureReform:OnFurnitureAttrDynamicTableEvent(event, index, grid)
|
||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
|
|
||
|
local isSelect = false
|
||
|
if self.SelectIndex == index then
|
||
|
self.SelectGrid = grid
|
||
|
isSelect = true
|
||
|
end
|
||
|
grid:SetSelect(isSelect)
|
||
|
grid:SetContent(self.FurnitureTagType[index])
|
||
|
|
||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
|
|
||
|
if self.SelectIndex == index then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
if self.SelectGrid then
|
||
|
self.SelectGrid:SetSelect(false)
|
||
|
end
|
||
|
|
||
|
self.SelectGrid = grid
|
||
|
self.SelectIndex = index
|
||
|
grid:SetSelect(true)
|
||
|
|
||
|
local cfg = self.FurnitureTagType[index]
|
||
|
self.BtnDrdSortLabel.text = cfg.TagName
|
||
|
|
||
|
XHomeDormManager.FurnitureShowAttrType = cfg.AttrIndex
|
||
|
--CS.UnityEngine.PlayerPrefs.SetInt(tostring(XPlayer.Id) .. "FurnitureAttr", cfg.AttrIndex)
|
||
|
--CS.UnityEngine.PlayerPrefs.Save()
|
||
|
CsXGameEventManager.Instance:Notify(XEventId.EVENT_DORM_FURNITURE_ATTR_TAG, cfg.AttrIndex)
|
||
|
end
|
||
|
end
|