PGRData/Script/matrix/xui/xuidorm/xuifurniturebuild/XUiFurnitureCreate.lua

418 lines
No EOL
14 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 家具建造子界面
local XUiFurnitureCreate = XLuaUiManager.Register(XLuaUi, "UiFurnitureCreate")
function XUiFurnitureCreate:OnAwake()
self.GridInvestmentPool = {}
self.SelectTypeIds = nil
self.FurnitrueCreateCount = 0
end
function XUiFurnitureCreate:OnBtnCancelClick()
self:Close()
end
function XUiFurnitureCreate:OnBtnStartClick()
if not self.SelectTypeIds or #self.SelectTypeIds <= 0 then
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureChooseAType"))
return
end
local textNum = tonumber(self.InputFunitueCount.text)
if not textNum or textNum <= 0 then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildNotCount"))
return
end
local _, isEnough = self:GetCostFurnitureCoin()
if not isEnough then
XUiManager.TipMsg(CS.XTextManager.GetText("FurnitureZeroCoin"))
return
end
local isModifyTips = false --是否要提示地板天花板等数量多于1的提示
for _, id in ipairs(self.SelectTypeIds) do
local cfg = XFurnitureConfigs.GetFurnitureTypeById(id)
if cfg.MajorType == XFurnitureConfigs.MajorType.Refit then
isModifyTips = textNum > 1
break
end
end
if isModifyTips then
XLuaUiManager.Open("UiDialog", nil, CS.XTextManager.GetText("DormBuildNotChangeCount"), XUiManager.DialogType.Normal, nil, function() self:CreateFurniture() end)
else
self:CreateFurniture()
end
end
function XUiFurnitureCreate:CreateFurniture()
local costA = 0
local costB = 0
local costC = 0
for i = 1, #self.InvestmentCfg do
local investmentItem = self.GridInvestmentPool[i]
local cfg, sum = investmentItem:GetCostDatas()
if cfg.Id == XFurnitureConfigs.AttrType.AttrA then
costA = sum
elseif cfg.Id == XFurnitureConfigs.AttrType.AttrB then
costB = sum
elseif cfg.Id == XFurnitureConfigs.AttrType.AttrC then
costC = sum
end
end
-- update界面关闭界面
XDataCenter.FurnitureManager.CreateFurniture(self.SelectPos, self.SelectTypeIds, self.FurnitrueCreateCount, costA, costB, costC, function()
XUiManager.TipText("FurnitureBuildStart")
if self.CallBack then
self.CallBack(self.SelectPos)
end
if XTool.UObjIsNil(self.GameObject) then return end
self:Close()
end)
end
function XUiFurnitureCreate:OnStart(typeId, createCount, pos, callBack)
self.BtnTanchuangClose.CallBack = function() self:OnBtnCancelClick() end
self.BtnStart.CallBack = function() self:OnBtnStartClick() end
self.BtnSelect.CallBack = function() self:OnBtnSelectClick() end
self.BtnReduce.CallBack = function() self:OnBtnReduceClick() end
self.BtnAdd.CallBack = function() self:OnBtnAddClick() end
self.BtnMax.CallBack = function() self:OnBtnMaxClick() end
self.InputFunitueCount.onValueChanged:AddListener(function()
self:OnInputValueChanged()
end)
self.CallBack = callBack
self:ShowPanelCreationDetail()
if typeId then
self:SetSelectType({ typeId }, nil, createCount)
end
end
function XUiFurnitureCreate:OnInputValueChanged()
if not self.SelectTypeIds then
return
end
if not self.InputFunitueCount.text or self.InputFunitueCount.text == "" then
self.InputFunitueCount.text = tostring(self.FurnitrueCreateCount)
return
end
local textNum = tonumber(self.InputFunitueCount.text)
if not self:CheckCanChangeNum() then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildNotChangeCount"))
self.InputFunitueCount.text = tostring(self.FurnitrueCreateCount)
return
end
if textNum < 1 then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildMinCount"))
self.InputFunitueCount.text = tostring(self.FurnitrueCreateCount)
return
end
local typeCount = (self.SelectTypeIds and #self.SelectTypeIds > 0) and #self.SelectTypeIds or 1
if (textNum * typeCount) > XFurnitureConfigs.MaxCreateCount then
self.InputFunitueCount.text = tostring(self.FurnitrueCreateCount)
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildMaxCount", XFurnitureConfigs.MaxCreateCount))
return
end
self.FurnitrueCreateCount = textNum
self:UpdateTotalNum()
end
function XUiFurnitureCreate:OnBtnReduceClick()
if self.BtnReduceDisable then
return
end
if self.FurnitrueCreateCount <= 1 then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildMinCount"))
return
end
self.FurnitrueCreateCount = self.FurnitrueCreateCount - 1
self:UpdateTotalNum()
end
function XUiFurnitureCreate:OnBtnAddClick()
if self.BtnAddDisable then
return
end
if not self:CheckCanChangeNum() then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildNotChangeCount"))
return
end
local textNum = tonumber(self.InputFunitueCount.text)
self.FurnitrueCreateCount = textNum > 0 and self.FurnitrueCreateCount + 1 or 1
local typeCount = (self.SelectTypeIds and #self.SelectTypeIds > 0) and #self.SelectTypeIds or 1
if (self.FurnitrueCreateCount * typeCount) > XFurnitureConfigs.MaxCreateCount then
self.FurnitrueCreateCount = math.floor(XFurnitureConfigs.MaxCreateCount / typeCount)
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildMaxCount", XFurnitureConfigs.MaxCreateCount))
return
end
self:UpdateTotalNum()
end
function XUiFurnitureCreate:OnBtnMaxClick()
if self.BtnMaxDisable then
return
end
if not self:CheckCanChangeNum() then
XUiManager.TipMsg(CS.XTextManager.GetText("DormBuildNotChangeCount"))
return
end
local max = self:GetMaxBuildCount()
self.FurnitrueCreateCount = max > 0 and max or 1
self:UpdateTotalNum(max <= 0)
end
function XUiFurnitureCreate:CheckCanChangeNum()
--[[ for _, id in ipairs(self.SelectTypeIds) do
local cfg = XFurnitureConfigs.GetFurnitureTypeById(id)
if cfg.MajorType == XFurnitureConfigs.MajorType.Refit then
return false
end
end
]]
return true
end
function XUiFurnitureCreate:SetPanelActive(value)
self.GameObject:SetActive(value)
end
--显示制造家具详情UI
function XUiFurnitureCreate:ShowPanelCreationDetail(pos)
self.SelectPos = pos or 0
local maxCreateNum = CS.XGame.Config:GetInt("DormFurnitureCreateNum")
for i = 0, maxCreateNum, 1 do
local furnitureCreateData = XDataCenter.FurnitureManager.GetFurnitureCreateItemByPos(i)
if not furnitureCreateData then
self.SelectPos = i
break
end
end
--清除上一个状态
self.SelectTypeIds = nil
self.FurnitrueCreateCount = 0
self.PanelCreationDetail.gameObject:SetActive(true)
self.ImgAdd.gameObject:SetActive(true)
self:UpdateCreationDetail()
local icon = XDataCenter.ItemManager.GetItemIcon(XDataCenter.ItemManager.ItemId.FurnitureCoin)
self.RImgFurnitureCoinIcon:SetRawImage(icon)
self.BtnSelect:SetNameByGroup(0, CS.XTextManager.GetText("FurnitureAddType"))
end
-- 制造家具详情ui界面设置
function XUiFurnitureCreate:UpdateCreationDetail(isIgnoreUpdateInvesment, createCount)
if not isIgnoreUpdateInvesment then
self.InvestmentCfg = XFurnitureConfigs.GetFurnitureAttrType()
local onCreate = function(grid, data)
grid:Init(data, self)
end
XUiHelper.CreateTemplates(self, self.GridInvestmentPool, self.InvestmentCfg,
XUiGridInvestment.New, self.GridInvestment, self.PanelInvestment, onCreate)
self.GridInvestment.gameObject:SetActive(false)
end
self:UpdateCostCount()
local typeName = ""
local icon
self.HeadIcon.gameObject:SetActive(self.SelectTypeIds ~= nil)
self.ImgItemIcon.gameObject:SetActive(self.SelectTypeIds ~= nil)
if self.SelectTypeIds then
if #self.SelectTypeIds <= 1 then
local furnitureTypeTemplate = XFurnitureConfigs.GetFurnitureTypeById(self.SelectTypeIds[1])
typeName = furnitureTypeTemplate.CategoryName
icon = furnitureTypeTemplate.TypeIcon
else
typeName = XFurnitureConfigs.DefaultName
icon = XFurnitureConfigs.DefaultIcon
end
self.ImgItemIcon:SetRawImage(icon)
self:SetInvestBtnsState(true)
else
self:SetInvestBtnsState(false)
end
self.TxtTypeName.text = typeName
self:UpdateTotalNum(nil, createCount)
end
function XUiFurnitureCreate:UpdateCostCount(isMaxZero)
local costCount, isEnough = self:GetCostFurnitureCoin(isMaxZero)
local textManager = CS.XTextManager
self.TxtFurnitureCoinCount.text = isEnough and textManager.GetText("DormBuildEnoughCount", costCount)
or textManager.GetText("DormBuildNoEnoughCount", costCount)
end
function XUiFurnitureCreate:SetInvestBtnsState(state)
for _, v in pairs(self.GridInvestmentPool) do
if v then
v:SetBtnState(state)
end
end
end
-- 获得所有家具币-建造加多少币有么有限制
function XUiFurnitureCreate:GetTotalFurnitureCoin()
local _, maxConsume = XFurnitureConfigs.GetFurnitureCreateMinAndMax()
local currentOwn = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.FurnitureCoin)
return (currentOwn >= maxConsume) and maxConsume or currentOwn
end
-- 获得当前消耗家具币数量
function XUiFurnitureCreate:GetCostFurnitureCoin(isMaxZero)
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
end
local typeCount = self.SelectTypeIds and #self.SelectTypeIds or 0
local createCount = isMaxZero and 0 or self.FurnitrueCreateCount
local costCount = currentSum * typeCount * createCount
local currentOwn = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.FurnitureCoin)
local isEnough = currentOwn >= costCount
return costCount, isEnough
end
-- 获取最大建造数量
function XUiFurnitureCreate:GetMaxBuildCount()
if not self.SelectTypeIds or #self.SelectTypeIds <= 0 then
return 0
end
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
end
local currentOwn = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.FurnitureCoin)
local count = math.floor(currentOwn / (#self.SelectTypeIds * currentSum))
local maxCount = math.floor(XFurnitureConfigs.MaxCreateCount / #self.SelectTypeIds)
if count > maxCount then
count = maxCount
end
return count
end
-- 检查是否可以投入
function XUiFurnitureCreate:CheckCanAddSum()
local totalNum = self:GetTotalFurnitureCoin()
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
end
currentSum = currentSum
local incresment = XFurnitureConfigs.Incresment
return totalNum >= currentSum + incresment
end
-- 可以投入的最大数量
function XUiFurnitureCreate:GetPassableSum()
local totalNum = self:GetTotalFurnitureCoin()
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
end
if totalNum > currentSum then
return totalNum - currentSum
end
return 0
end
function XUiFurnitureCreate:CheckInverstNum()
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
end
local currentOwn = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.FurnitureCoin)
local _, maxConsume = XFurnitureConfigs.GetFurnitureCreateMinAndMax()
return currentOwn - currentSum >= 0 and currentSum >= maxConsume
end
function XUiFurnitureCreate:UpdateTotalNum(isMaxZero)
local currentSum = 0
for _, v in pairs(self.GridInvestmentPool) do
currentSum = currentSum + v:GetCurrentSum()
v:UpdateInfos()
end
self:UpdateCostCount(isMaxZero)
local minConsume, _ = XFurnitureConfigs.GetFurnitureCreateMinAndMax()
local typeCount = (self.SelectTypeIds and #self.SelectTypeIds > 0) and #self.SelectTypeIds or 1
local createCount = self.FurnitrueCreateCount > 0 and self.FurnitrueCreateCount or 1
minConsume = typeCount * createCount * minConsume
currentSum = currentSum * typeCount * createCount
local notEnought = minConsume > currentSum
local desc = notEnought and CS.XTextManager.GetText("DormBuildNoEnoughDesc") or CS.XTextManager.GetText("DormBuildEnoughDesc")
self.TxtDesc.text = desc
self.BtnStart:SetDisable(notEnought, not notEnought)
self:UpdateCountEdit(notEnought, isMaxZero, createCount)
end
function XUiFurnitureCreate:UpdateCountEdit(notEnought, isMaxZero, createCount)
if notEnought then
self.BtnMaxDisable = notEnought
self.BtnAddDisable = notEnought
self.BtnReduceDisable = notEnought
self.BtnReduce:SetDisable(notEnought)
self.BtnAdd:SetDisable(notEnought)
self.BtnMax:SetDisable(notEnought)
self.InputFunitueCount.interactable = not notEnought
local count = createCount and createCount or 0
self.InputFunitueCount.text = count
return
end
self.BtnReduce:SetDisable(self.FurnitrueCreateCount <= 1)
self.BtnAdd:SetDisable(false)
self.BtnMax:SetDisable(false)
self.BtnMaxDisable = false
self.BtnAddDisable = false
self.BtnReduceDisable = self.FurnitrueCreateCount <= 1
self.InputFunitueCount.interactable = true
self.InputFunitueCount.text = isMaxZero and 0 or self.FurnitrueCreateCount
end
-- 选择TypeId
function XUiFurnitureCreate:OnBtnSelectClick()
local selectTypeIds = self.SelectTypeIds or {}
XLuaUiManager.Open("UiFurnitureTypeSelect", selectTypeIds, nil, true, handler(self, self.SetSelectType))
end
function XUiFurnitureCreate:SetSelectType(typeIds, suitId, createCount)
self.SelectTypeIds = typeIds
self.BtnSelect:SetNameByGroup(0, "")
local count = 1
if createCount and createCount > 1 then
count = createCount
end
self.FurnitrueCreateCount = count
self.ImgAdd.gameObject:SetActive(false)
self:UpdateCreationDetail(true, createCount)
end
function XUiFurnitureCreate:HasSelectType()
return self.SelectTypeIds ~= nil
end
return XUiFurnitureCreate