439 lines
No EOL
17 KiB
Lua
439 lines
No EOL
17 KiB
Lua
-- 家具改造子界面
|
||
XUiPanelRefit = XClass(nil, "XUiPanelRefit")
|
||
|
||
local DEFAULT_STRING1 = "?"
|
||
local DEFAULT_STRING2 = CS.XTextManager.GetText("None")
|
||
local DEFAULT_STRING3 = CS.XTextManager.GetText("SelectFurniture")
|
||
-- local DEFAULT_DATA = {[1] = DEFAULT_STRING1, [2] = DEFAULT_STRING1, [3] = DEFAULT_STRING1 }
|
||
|
||
local EnoughColor = CS.UnityEngine.Color(0, 0, 0)
|
||
local NotEnoughColor = CS.UnityEngine.Color(1, 0, 0)
|
||
|
||
-- local CFG = {
|
||
-- ConsumeCount = 3
|
||
-- }
|
||
|
||
function XUiPanelRefit:Ctor(rootUi, ui)
|
||
self.RootUi = rootUi
|
||
self.GameObject = ui.gameObject
|
||
self.Transform = ui.transform
|
||
XTool.InitUiObject(self)
|
||
|
||
self.SelectedFurnitureIds = nil
|
||
self.SelectedDrawingId = nil
|
||
|
||
self.BtnSelectFurniture.CallBack = function() self:OnBtnSelectFurnitureClick() end
|
||
self.BtnSelectDrawing.CallBack = function() self:OnBtnSelectDrawingClick() end
|
||
self.BtnRefit.CallBack = function() self:OnBtnRefitClick() end
|
||
end
|
||
|
||
function XUiPanelRefit:Init(drawingId, furnitureTypeId)
|
||
self:SelectFurniture()
|
||
self:SelectDrawing()
|
||
self.TxtConsume.text = CS.XTextManager.GetText("UiPanelRefitConsume")
|
||
self.TxtSelectDrawing.text = CS.XTextManager.GetText("UiPanelRefitSelectDrawing")
|
||
|
||
self.SelectedDrawingId = drawingId
|
||
self.FrunitureTypeId = furnitureTypeId
|
||
|
||
if self.SelectedDrawingId then
|
||
self:SelectDrawing(self.SelectedDrawingId)
|
||
self:OnBtnSelectFurnitureClick()
|
||
end
|
||
end
|
||
|
||
function XUiPanelRefit:SetPanelActive(value)
|
||
self.GameObject:SetActiveEx(value)
|
||
if not value then
|
||
if self.SelectedFurnitureIds then
|
||
self:SelectFurniture()
|
||
end
|
||
|
||
if self.SelectedDrawingId then
|
||
self:SelectDrawing()
|
||
end
|
||
else
|
||
self.RootUi:PlayAnimRefitEnable()
|
||
end
|
||
end
|
||
|
||
function XUiPanelRefit:CheckClearDrawing(furnitureIds)
|
||
if self.SelectedDrawingId then
|
||
local id = type(furnitureIds) == "table" and furnitureIds[1] or furnitureIds
|
||
local selectedFurnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(id)
|
||
local selectedFurnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(selectedFurnitureDatas.ConfigId)
|
||
|
||
local previewFurnitureId = XFurnitureConfigs.GetPreviewFurnitureByDrawingId(self.SelectedDrawingId)
|
||
if not previewFurnitureId then
|
||
self.SelectedDrawingId = nil
|
||
self:SelectDrawing()
|
||
return
|
||
end
|
||
|
||
local previewFurnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(previewFurnitureId)
|
||
if not previewFurnitureTemplate then
|
||
self.SelectedDrawingId = nil
|
||
self:SelectDrawing()
|
||
return
|
||
end
|
||
|
||
if selectedFurnitureTemplate.TypeId ~= previewFurnitureTemplate.TypeId then
|
||
self.SelectedDrawingId = nil
|
||
self:SelectDrawing()
|
||
end
|
||
end
|
||
end
|
||
|
||
--显示选择的家具信息
|
||
function XUiPanelRefit:SelectFurniture(furnitureIds)
|
||
if furnitureIds then
|
||
local furnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(furnitureIds)
|
||
if not furnitureDatas then
|
||
self:SelectFurniture()
|
||
return
|
||
end
|
||
|
||
-- 新增一个处理,如果已经选择了图纸,并且该图纸不能匹配当前的家具,清空
|
||
self:CheckClearDrawing(furnitureIds)
|
||
self.SelectedFurnitureIds = furnitureIds
|
||
|
||
-- 多选还是单选状态
|
||
local isList = type(furnitureIds) == "table"
|
||
|
||
local data = XDataCenter.FurnitureManager.GetFurnitureById(isList and furnitureIds[1] or furnitureIds)
|
||
local cfg = XFurnitureConfigs.GetFurnitureTemplateById(data.ConfigId)
|
||
self.FrunitureTypeId = cfg.TypeId
|
||
|
||
if isList then
|
||
local typeCfg = XFurnitureConfigs.GetFurnitureTypeById(cfg.TypeId)
|
||
self.TxtSelectName.text = typeCfg.CategoryName
|
||
self.TxtSelectNum.text = CS.XTextManager.GetText("DormRefitEnoughCount", #furnitureIds)
|
||
self.ImgBtnSelectFurniture:SetRawImage(typeCfg.TypeIcon)
|
||
else
|
||
self.TxtSelectFurniture.text = ""
|
||
local totalScore = 0
|
||
for _, v in pairs(furnitureDatas.AttrList or {}) do
|
||
totalScore = totalScore + v
|
||
end
|
||
|
||
local addition = furnitureDatas.Addition or 0
|
||
local introduce = DEFAULT_STRING2
|
||
if addition > 0 then
|
||
totalScore = totalScore + XFurnitureConfigs.GetAdditionalAddScore(addition)
|
||
local str = XFurnitureConfigs.GetAdditionalRandomEntry(addition)
|
||
introduce = string.format("%s\n%s", str,XFurnitureConfigs.GetAdditionalRandomIntroduce(addition))
|
||
end
|
||
|
||
self.TxtSelectScore.text = CS.XTextManager.GetText("FurnitureRefitScore", totalScore)
|
||
self.TxtSelectSpecial.text = introduce
|
||
self.ImgBtnSelectFurniture:SetRawImage(XDataCenter.FurnitureManager.GetFurnitureIconById(furnitureIds, XDormConfig.DormDataType.Self))
|
||
end
|
||
|
||
self.PanelSelectFrunitureInfo.gameObject:SetActiveEx(not isList)
|
||
self.PanelSelectFrunitureInfos.gameObject:SetActiveEx(isList)
|
||
self.TxtSelectScore.gameObject:SetActiveEx(not isList)
|
||
self.TxtSelectSpecial.gameObject:SetActiveEx(not isList)
|
||
self.BtnSelectFurnitureCanvasGroup.alpha = 0
|
||
self.ImgBtnSelectFurniture.gameObject:SetActiveEx(true)
|
||
else
|
||
self.SelectedFurnitureIds = nil
|
||
self.FrunitureTypeId = nil
|
||
self.TxtSelectFurniture.text = DEFAULT_STRING3
|
||
self.TxtSelectScore.gameObject:SetActiveEx(false)
|
||
self.TxtSelectSpecial.gameObject:SetActiveEx(false)
|
||
self.PanelSelectFrunitureInfo.gameObject:SetActiveEx(false)
|
||
self.PanelSelectFrunitureInfos.gameObject:SetActiveEx(false)
|
||
self.ImgBtnSelectFurniture.gameObject:SetActiveEx(false)
|
||
self.BtnSelectFurnitureCanvasGroup.alpha = 1
|
||
end
|
||
|
||
-- 计算消耗材料
|
||
local ownFurnitureNum = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.FurnitureCoin)
|
||
local needFurnitureNum = self:GetRefitNeedMoney(self.SelectedFurnitureIds)
|
||
self.TxtConsumeCount.text = needFurnitureNum
|
||
self.ImgDrawingIcon:SetRawImage(XDataCenter.ItemManager.GetItemIcon(XDataCenter.ItemManager.ItemId.FurnitureCoin))
|
||
if ownFurnitureNum >= needFurnitureNum then
|
||
self.TxtConsumeCount.color = EnoughColor
|
||
self.IsCoinEnough = true
|
||
else
|
||
self.TxtConsumeCount.color = NotEnoughColor
|
||
self.IsCoinEnough = false
|
||
end
|
||
|
||
self:RefrshDrwaingCount()
|
||
self:CheckPreview()
|
||
end
|
||
|
||
--显示选择的图纸信息
|
||
function XUiPanelRefit:SelectDrawing(DraftId)
|
||
if DraftId then
|
||
self.SelectedDrawingId = DraftId
|
||
local icon = XDataCenter.ItemManager.GetItemIcon(DraftId)
|
||
local name = XDataCenter.ItemManager.GetItemName(DraftId)
|
||
self.PanelSelectDrawingInfo.gameObject:SetActiveEx(true)
|
||
self.ImgSelectDrawing:SetRawImage(icon)
|
||
self.TxtSelectDrawing.text = ""
|
||
self.BtnSelectDrawingCanvasGroup.alpha = 0
|
||
|
||
-- 检查是否批量建造
|
||
self:RefrshDrwaingCount()
|
||
self.TxtSelectDrawName.text = name
|
||
else
|
||
self.SelectedDrawingId = nil
|
||
self.PanelSelectDrawingInfo.gameObject:SetActiveEx(false)
|
||
self.TxtSelectDrawing.text = CS.XTextManager.GetText("UiPanelRefitSelectDrawing")
|
||
self.BtnSelectDrawingCanvasGroup.alpha = 1
|
||
end
|
||
self:CheckPreview()
|
||
end
|
||
|
||
-- 刷新图纸数量
|
||
function XUiPanelRefit:RefrshDrwaingCount()
|
||
if not self.SelectedDrawingId then
|
||
self.TxtSelectDrawNum.text = CS.XTextManager.GetText("DormRefitEnoughCount", 0)
|
||
return
|
||
end
|
||
|
||
local draftCount = XDataCenter.ItemManager.GetCount(self.SelectedDrawingId)
|
||
local furnitrueCount = self:IsFurnitureTable() and #self.SelectedFurnitureIds or 1
|
||
local content = furnitrueCount > draftCount and CS.XTextManager.GetText("DormRefitNoEnoughCount", furnitrueCount)
|
||
or CS.XTextManager.GetText("DormRefitEnoughCount", furnitrueCount)
|
||
self.TxtSelectDrawNum.text = content
|
||
end
|
||
|
||
--显示预览信息
|
||
function XUiPanelRefit:CheckPreview()
|
||
|
||
self.TxtPreviewScore.text = CS.XTextManager.GetText("FurnitureRefitScore", DEFAULT_STRING1)
|
||
self.BtnSelectDrawing:SetDisable(false, true)
|
||
self.PreviewKuangDisable.gameObject:SetActiveEx(false)
|
||
self.previewArrowDisable.gameObject:SetActiveEx(false)
|
||
self.previewArrowEnable.gameObject:SetActiveEx(true)
|
||
|
||
if self.SelectedFurnitureIds and self.SelectedDrawingId then
|
||
-- 通过图纸拿到要生成的家具ID,通过判断类型是否一致决定是否显示
|
||
local previewFurnitureId = XFurnitureConfigs.GetPreviewFurnitureByDrawingId(self.SelectedDrawingId)
|
||
if not previewFurnitureId then
|
||
self.ImgPreviewItemIcon.gameObject:SetActiveEx(false)
|
||
return
|
||
end
|
||
|
||
-- -- 检查预览的家具,改装的家具类型是否一致
|
||
local id = self:IsFurnitureTable() and self.SelectedFurnitureIds[1] or self.SelectedFurnitureIds
|
||
local furnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(id)
|
||
local furnitureTemplates = XFurnitureConfigs.GetFurnitureTemplateById(furnitureDatas.ConfigId)
|
||
local previewDatas = XFurnitureConfigs.GetFurnitureTemplateById(previewFurnitureId)
|
||
|
||
if furnitureTemplates.TypeId ~= previewDatas.TypeId then
|
||
self.ImgPreviewItemIcon.gameObject:SetActiveEx(false)
|
||
self.ImageAdd.gameObject:SetActiveEx(false)
|
||
else
|
||
local furnitureBaseTemplates = XFurnitureConfigs.GetFurnitureBaseTemplatesById(previewFurnitureId)
|
||
self.ImgPreviewItemIcon.gameObject:SetActiveEx(true)
|
||
self.ImgPreviewItemIcon:SetRawImage(furnitureBaseTemplates.Icon)
|
||
self.ImageAdd.gameObject:SetActiveEx(true)
|
||
end
|
||
|
||
-- 查询组随机属性
|
||
local hasRandomGroup = previewDatas.RandomGroupId > 0
|
||
self.PanelIcon.gameObject:SetActiveEx(hasRandomGroup)
|
||
if hasRandomGroup then
|
||
local groupIntroduce = XFurnitureConfigs.GetGroupRandomIntroduce(previewDatas.RandomGroupId)
|
||
local introduceBuffer = ""
|
||
local a = {}
|
||
for _, v in pairs(groupIntroduce) do
|
||
for _,v1 in pairs(v) do
|
||
local key = XFurnitureConfigs.GetAdditionalRandomEntry(v1.Id,true)
|
||
if not a[key] then
|
||
a[key] = ""
|
||
end
|
||
a[key] = a[key] .. string.format("%s\n",v1.Introduce)
|
||
end
|
||
end
|
||
for k,str in pairs(a)do
|
||
local des = string.format("%s\n%s\n", k, str)
|
||
introduceBuffer = introduceBuffer .. des
|
||
end
|
||
self.TxtPreviewSpecial.text = introduceBuffer
|
||
self:ResizeRandomGroupContent()
|
||
end
|
||
|
||
else
|
||
if self.SelectedFurnitureIds == nil then
|
||
-- 未选中家具,不能选择图纸
|
||
self.BtnSelectDrawing:SetDisable(true, false)
|
||
self.PreviewKuangDisable.gameObject:SetActiveEx(true)
|
||
self.previewArrowDisable.gameObject:SetActiveEx(true)
|
||
self.previewArrowEnable.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
self.ImgPreviewItemIcon.gameObject:SetActiveEx(false)
|
||
self.PanelIcon.gameObject:SetActiveEx(false)
|
||
self.ImageAdd.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
|
||
function XUiPanelRefit:ResizeRandomGroupContent()
|
||
local rectTransform = self.TxtPreviewSpecial.transform:GetComponent("RectTransform")
|
||
local adjustHeight = self.TxtPreviewSpecial.preferredHeight
|
||
local sizeDelta = rectTransform.sizeDelta
|
||
rectTransform.sizeDelta = CS.UnityEngine.Vector2(sizeDelta.x, adjustHeight)
|
||
end
|
||
|
||
function XUiPanelRefit:GetRefitNeedMoney(ids)
|
||
if not ids then
|
||
return 0
|
||
end
|
||
|
||
local func = function(id)
|
||
local furnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(id)
|
||
if not furnitureDatas then
|
||
return 0
|
||
else
|
||
local configId = furnitureDatas.ConfigId
|
||
local furnitureTemplates = XFurnitureConfigs.GetFurnitureTemplateById(configId)
|
||
return furnitureTemplates.MoneyNum
|
||
end
|
||
end
|
||
|
||
if type(ids) == "table" then
|
||
local count = 0
|
||
for _, id in pairs(ids) do
|
||
local curCount = func(id)
|
||
count = count + curCount
|
||
end
|
||
return count
|
||
else
|
||
return func(ids)
|
||
end
|
||
end
|
||
|
||
function XUiPanelRefit:OnBtnSelectFurnitureClick()
|
||
--TODO
|
||
--跳转到仓库选择一个家具
|
||
local pageRecord = XDormConfig.DORM_BAG_PANEL_INDEX.FURITURE
|
||
local furnitureState = XFurnitureConfigs.FURNITURE_STATE.SELECT
|
||
local func = function(furnitureIds)
|
||
local ids = #furnitureIds > 1 and furnitureIds or furnitureIds[1]
|
||
self:SelectFurniture(ids)
|
||
end
|
||
local filter = function(furnitureId)
|
||
return not XDataCenter.FurnitureManager.GetFurnitureIsLocked(furnitureId)
|
||
end
|
||
XLuaUiManager.Open("UiDormBag", pageRecord, furnitureState, func, filter, nil, self.FrunitureTypeId)
|
||
end
|
||
|
||
function XUiPanelRefit:OnBtnSelectDrawingClick()
|
||
--TODO
|
||
--跳转到仓库选择一个图纸
|
||
local pageRecord = XDormConfig.DORM_BAG_PANEL_INDEX.DRAFT
|
||
local furnitureState = XFurnitureConfigs.FURNITURE_STATE.SELECTSINGLE
|
||
local func = function(draftId)
|
||
self:SelectDrawing(draftId)
|
||
end
|
||
local filter = function(drawingId)
|
||
if self.SelectedFurnitureIds then
|
||
local id = self:IsFurnitureTable() and self.SelectedFurnitureIds[1] or self.SelectedFurnitureIds
|
||
local selectedFurnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(id)
|
||
local selectedFurnitureTemplate = XFurnitureConfigs.GetFurnitureTemplateById(selectedFurnitureDatas.ConfigId)
|
||
|
||
local typeDatas = XFurnitureConfigs.GetRefitTypeDatas(selectedFurnitureTemplate.TypeId) or {}
|
||
for _, v in pairs(typeDatas) do
|
||
if v.PicId == drawingId and v.GainType == XFurnitureConfigs.GainType.Refit then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
|
||
end
|
||
return true
|
||
end
|
||
local count = self:IsFurnitureTable() and #self.SelectedFurnitureIds or 1
|
||
local fromRefit = true
|
||
XLuaUiManager.Open("UiDormBag", pageRecord, furnitureState, func, filter, count, nil, nil, fromRefit)
|
||
end
|
||
|
||
function XUiPanelRefit:OnBtnRefitClick()
|
||
if not self.SelectedFurnitureIds then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureChooseFurniture"))
|
||
return
|
||
end
|
||
|
||
if not self.SelectedDrawingId then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureChooseDraft"))
|
||
return
|
||
end
|
||
|
||
if not self.IsCoinEnough then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureZeroCoin"))
|
||
return
|
||
end
|
||
|
||
-- 检查图纸是否足够
|
||
local draftCount = XDataCenter.ItemManager.GetCount(self.SelectedDrawingId)
|
||
local furnitrueCount = self:IsFurnitureTable() and #self.SelectedFurnitureIds or 1
|
||
if furnitrueCount > draftCount then
|
||
-- local buyCount = furnitrueCount - draftCount
|
||
-- local configId = self.SelectedDrawingId
|
||
--TODO::: 进入快捷购买界面
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("DormNotEnoughDraft"), XUiManager.UiTipType.Tip)
|
||
return
|
||
end
|
||
|
||
-- 图纸是否可以改装家具,通过图纸找到改装之后的家具,然后判断:改装之后生成的家具、用于改装的家具两者类型是否一致。
|
||
local previewFurnitureId = XFurnitureConfigs.GetPreviewFurnitureByDrawingId(self.SelectedDrawingId)
|
||
if not previewFurnitureId then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FunitureCannotCompound"))
|
||
return
|
||
end
|
||
|
||
local check = function(id)
|
||
local furnitureDatas = XDataCenter.FurnitureManager.GetFurnitureById(id)
|
||
local previewTypeId = XFurnitureConfigs.GetFurnitureTemplateById(previewFurnitureId).TypeId
|
||
local selectTypeId = XFurnitureConfigs.GetFurnitureTemplateById(furnitureDatas.ConfigId).TypeId
|
||
if previewTypeId ~= selectTypeId then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureNotMatchDraft"))
|
||
return false
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
-- 检查预览的家具,改装的家具类型是否一致
|
||
if self:IsFurnitureTable() then
|
||
for _, id in ipairs(self.SelectedFurnitureIds) do
|
||
if not check(id) then
|
||
return
|
||
end
|
||
end
|
||
else
|
||
if not check(self.SelectedFurnitureIds) then
|
||
return
|
||
end
|
||
end
|
||
|
||
local ids = self:IsFurnitureTable() and self.SelectedFurnitureIds or {self.SelectedFurnitureIds}
|
||
XDataCenter.FurnitureManager.RemouldFurniture(ids, self.SelectedDrawingId, function(furnitureList)
|
||
self:Init()
|
||
if furnitureList then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureRefitSuccess"), XUiManager.UiTipType.Tip, function()
|
||
if #furnitureList > 1 then
|
||
local gainType = XFurnitureConfigs.GainType.Refit
|
||
XLuaUiManager.Open("UiFurnitureObtain", gainType, furnitureList, function(furnitureIds)
|
||
self:SelectFurniture(furnitureIds)
|
||
self:SelectDrawing()
|
||
end)
|
||
|
||
return
|
||
end
|
||
XLuaUiManager.Open("UiFurnitureDetail", furnitureList[1].Id, furnitureList[1].ConfigId)
|
||
end)
|
||
end
|
||
end)
|
||
end
|
||
|
||
function XUiPanelRefit:IsFurnitureTable()
|
||
return type(self.SelectedFurnitureIds) == "table"
|
||
end
|
||
|
||
return XUiPanelRefit |