PGRData/Script/matrix/xui/xuirestaurant/XUiRestaurantHire.lua
2024-09-01 22:49:41 +02:00

249 lines
No EOL
8.2 KiB
Lua

local ColorEnum = {
Enable = XUiHelper.Hexcolor2Color("5B4040"),
Disable = XUiHelper.Hexcolor2Color("FF0000"),
Changed = XUiHelper.Hexcolor2Color("0D70BC"),
UnChanged = XUiHelper.Hexcolor2Color("313850"),
}
--- 解锁效果
local XUiGridEffect = XClass(nil, "XUiGridEffect")
function XUiGridEffect:Ctor(ui)
XTool.InitUiObjectByUi(self, ui)
end
function XUiGridEffect:Refresh(data)
local type = data.Type
local desc = XRestaurantConfigs.GetClientConfig("RestaurantLvUpEffectText", type)
local count = data.Count
self.TxtDesc.text = desc
local countStr = type == XRestaurantConfigs.EffectType.HotSaleAddition and count.."%" or count
self.TxtCount.text = countStr
self.TxtCount.color = data.SubCount > 0 and ColorEnum.Changed or ColorEnum.UnChanged
self.GameObject:SetActiveEx(true)
end
--- 解锁产品
local XUiGridProduct = XClass(nil, "XUiGridProduct")
function XUiGridProduct:Ctor(ui)
XTool.InitUiObjectByUi(self, ui)
end
function XUiGridProduct:Refresh(data)
self.GameObject:SetActiveEx(true)
local viewModel = XDataCenter.RestaurantManager.GetViewModel()
local product = viewModel:GetProduct(data.AreaType, data.Id)
local unlock = product:IsUnlock()
local isDefault = product:IsDefault()
local unknown = not unlock and not isDefault
if self.PanelLock then
self.PanelLock.gameObject:SetActiveEx(unknown)
end
if self.PanelNormal then
self.PanelNormal.gameObject:SetActiveEx(not unknown)
end
if unknown then
return
end
self.RImgIcon:SetRawImage(product:GetProductIcon())
self.TxtName.text = product:GetProperty("_Name")
end
--- 升级条件
local XUiGridCondition = XClass(nil, "XUiGridCondition")
function XUiGridCondition:Ctor(ui)
XTool.InitUiObjectByUi(self, ui)
end
function XUiGridCondition:Refresh(data)
self.GameObject:SetActiveEx(true)
self.ImgGou.gameObject:SetActiveEx(data.Finish)
self.TxtContent.text = data.Text
end
local XUiPanelRestaurantLevelUp = require("XUi/XUiRestaurant/XUiPanel/XUiPanelRestaurantLevelUp")
---@class XUiPanelCondition : XUiPanelRestaurantLevelUp
local XUiPanelCondition = XClass(XUiPanelRestaurantLevelUp, "XUiPanelCondition")
function XUiPanelCondition:Refresh(list, level, curLevel)
self.Level = level
self.CurLevel = curLevel
local filter = {}
for _, data in ipairs(list or {}) do
if data.Type == 1 then
table.insert(filter, data)
end
end
self.Super.Refresh(self, filter)
end
function XUiPanelCondition:GetTxtEmpty()
if self.Level <= self.CurLevel and self.Level ~= XRestaurantConfigs.LevelRange.Max then
return XRestaurantConfigs.GetClientConfig("RestaurantLvUpConditionText", 3)
elseif self.Level >= XRestaurantConfigs.LevelRange.Max then
return XRestaurantConfigs.GetClientConfig("RestaurantLvUpConditionText", 4)
end
end
---@class XUiRestaurantHire : XLuaUi
local XUiRestaurantHire = XLuaUiManager.Register(XLuaUi, "UiRestaurantHire")
local XUiGridLevelButton = require("XUi/XUiRestaurant/XUiGrid/XUiGridLevelButton")
local PreviewLevel = 1
function XUiRestaurantHire:OnAwake()
self:InitUi()
self:InitCb()
end
function XUiRestaurantHire:OnStart()
self:InitView()
end
function XUiRestaurantHire:InitUi()
---@type XUiGridLevelButton[]
self.LevelButton = {}
---@type XUiPanelRestaurantLevelUp
self.PanelEffectLevelUp = XUiPanelRestaurantLevelUp.New(self.PanelFunction, XUiGridEffect)
---@type XUiPanelRestaurantLevelUp
self.PanelFoodLevelUp = XUiPanelRestaurantLevelUp.New(self.PanelFood, XUiGridProduct)
---@type XUiPanelCondition
self.PanelConditionLevelUp = XUiPanelCondition.New(self.PanelCondition, XUiGridCondition)
end
function XUiRestaurantHire:InitCb()
self.BtnWndClose.CallBack = function()
self:Close()
end
self.BtnClose.CallBack = function()
self:Close()
end
self.BtnDetermine.CallBack = function()
self:OnBtnDetermineClick()
end
end
function XUiRestaurantHire:InitView()
local viewModel = XDataCenter.RestaurantManager.GetViewModel()
self.Level = viewModel:GetProperty("_Level")
self:InitLevelButton(self.Level)
self:BindViewModelPropertyToObj(viewModel, function(isLevelUp)
if not isLevelUp then
return
end
self:Close()
end, "_IsLevelUp")
end
function XUiRestaurantHire:InitLevelButton(level)
for _, grid in pairs(self.LevelButton) do
if grid and not XTool.UObjIsNil(grid.GameObject) then
grid.GameObject:SetActiveEx(false)
end
end
local previewLevel = math.min(XRestaurantConfigs.LevelRange.Max, level + PreviewLevel)
local gridIndex = 1
for lv = XRestaurantConfigs.LevelRange.Min, previewLevel do
local grid = self.LevelButton[gridIndex]
if not grid then
local ui = gridIndex == 1 and self.GridLevel or XUiHelper.Instantiate(self.GridLevel, self.PanelTabGroup)
grid = XUiGridLevelButton.New(ui, handler(self, self.OnSelectLevel))
self.LevelButton[gridIndex] = grid
end
local isUnlock = lv <= level
grid:Refresh(lv, level, isUnlock, not isUnlock, "Lv." .. lv)
if lv == level then
grid:OnBtnLevelClick()
end
gridIndex = gridIndex + 1
end
end
---@param levelBtn XUiGridLevelButton
function XUiRestaurantHire:OnSelectLevel(levelBtn)
if self.LastLevelBtn then
self.LastLevelBtn:SetSelect(false)
end
self:PlayAnimation("QieHuan")
self.LastLevelBtn = levelBtn
self.SelectLevel = levelBtn.Level
self:RefreshDetail()
end
function XUiRestaurantHire:RefreshDetail()
local isUnlock = self.Level >= self.SelectLevel
self.BtnDetermine.gameObject:SetActiveEx(not isUnlock)
self.ImgRenovation:SetRawImage(XRestaurantConfigs.GetRestaurantDecorationIcon(self.SelectLevel))
self.ImgTitle:SetSprite(XRestaurantConfigs.GetRestaurantTitleIcon(self.SelectLevel))
local levelUpgrade = XRestaurantConfigs.GetUpgradeCondition(self.SelectLevel - 1)
local conditionList = {}
local effectList = XRestaurantConfigs.GetRestaurantUnlockEffectList(self.SelectLevel)
self.AbleLevelUp = not isUnlock
if not isUnlock then
local consumeList = levelUpgrade.ConsumeData
for _, consume in pairs(consumeList or {}) do
local id = consume.ItemId
local need = consume.Count
local count = XDataCenter.ItemManager.GetCount(id)
local icon = XDataCenter.ItemManager.GetItemIcon(id)
self.RImgCoinIcon:SetRawImage(icon)
self.TxtConsume.text = count
self.TxtPrice.text = "/" .. need
local enough = count >= need
self.TxtConsume.color = enough and ColorEnum.Enable or ColorEnum.Disable
self.AbleLevelUp = enough
break
end
conditionList = XRestaurantConfigs.GetRestaurantUnlockConditionList(levelUpgrade)
for _, condition in pairs(conditionList or {}) do
if not condition.Finish then
self.AbleLevelUp = false
break
end
end
self.BtnDetermine:SetDisable(not self.AbleLevelUp)
self.BtnDetermine:ShowReddot(self.AbleLevelUp)
end
self.PanelEffectLevelUp:Refresh(effectList)
self.PanelFoodLevelUp:Refresh(XRestaurantConfigs.GetRestaurantUnlockProductList(
XRestaurantConfigs.AreaType.FoodArea, XRestaurantConfigs.GetUnlockFood(self.SelectLevel)))
self.PanelConditionLevelUp:Refresh(conditionList, self.SelectLevel, self.Level)
end
function XUiRestaurantHire:OnBtnDetermineClick()
if not self.AbleLevelUp then
local tip = XRestaurantConfigs.GetClientConfig("RestaurantLvUpConditionText", 5)
XUiManager.TipMsg(tip)
return
end
local title = XRestaurantConfigs.GetClientConfig("RestaurantLvUpPopupTip", 1)
local content = XRestaurantConfigs.GetClientConfig("RestaurantLvUpPopupTip", 2)
content = XUiHelper.ReplaceTextNewLine(string.format(content, self.Level, self.Level + 1))
XDataCenter.RestaurantManager.OpenPopup(title, content, nil, nil, function()
self:Close()
XDataCenter.RestaurantManager.RequestLevelUpRestaurant()
end)
end