---@class XUiRestaurantMain : XLuaUi local XUiRestaurantMain = XLuaUiManager.Register(XLuaUi, "UiRestaurantMain") local XUiPanelStorage = require("XUi/XUiRestaurant/XUiPanel/XUiPanelStorage") local TipShowTime = 2 function XUiRestaurantMain:OnAwake() self.Room = XDataCenter.RestaurantManager.GetRoom() self:InitUi() self:InitCb() end function XUiRestaurantMain:OnStart() self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XRestaurantConfigs.ItemId.RestaurantShopCoin, XRestaurantConfigs.ItemId.RestaurantUpgradeCoin) self.AssetPanel:RegisterJumpCallList({ function() self:OnJumpToUiTip(XRestaurantConfigs.ItemId.RestaurantShopCoin) end, function() self:OnJumpToUiTip(XRestaurantConfigs.ItemId.RestaurantUpgradeCoin) end, }) self:InitView() XEventManager.AddEventListener(XEventId.EVENT_RESTAURANT_SHOW_ASSIGN_WORK, self.ShowTips, self) XEventManager.AddEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XRestaurantConfigs.ItemId.RestaurantUpgradeCoin, self.OnCoinChanged, self) XEventManager.AddEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XRestaurantConfigs.ItemId.RestaurantShopCoin, self.OnCoinChanged, self) XEventManager.AddEventListener(XEventId.EVENT_RESTAURANT_WORK_BENCH_CHANGE_STAFF, self.RefreshArrowBtnRedPoint, self) end function XUiRestaurantMain:OnEnable() self.Super.OnEnable(self) end function XUiRestaurantMain:OnDestroy() self.PanelTips.gameObject:SetActiveEx(false) if self.TipTimer then XScheduleManager.UnSchedule(self.TipTimer) self.TipTimer = nil end XEventManager.RemoveEventListener(XEventId.EVENT_RESTAURANT_SHOW_ASSIGN_WORK, self.ShowTips, self) XEventManager.RemoveEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XRestaurantConfigs.ItemId.RestaurantUpgradeCoin, self.OnCoinChanged, self) XEventManager.RemoveEventListener(XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XRestaurantConfigs.ItemId.RestaurantShopCoin, self.OnCoinChanged, self) XEventManager.RemoveEventListener(XEventId.EVENT_RESTAURANT_WORK_BENCH_CHANGE_STAFF, self.RefreshArrowBtnRedPoint, self) end function XUiRestaurantMain:OnRelease() if self.IsLevelUp then XDataCenter.RestaurantManager.OnLeave(self.IsLevelUp) else XDataCenter.RestaurantManager.StopBusiness() end self.Super.OnRelease(self) --避免界面非正常关闭时,资源未被销毁 XLuaUiManager.Remove("UiRestaurantCommon") XLuaUiManager.Remove("UiRestaurantMain") end function XUiRestaurantMain:OnNotify(evt, ...) if evt == XEventId.EVENT_FINISH_TASK or evt == XEventId.EVENT_TASK_SYNC then self:RefreshTaskRedPoint() XDataCenter.RestaurantManager.PopRecipeTaskTip() end end function XUiRestaurantMain:OnGetEvents() return { XEventId.EVENT_FINISH_TASK, XEventId.EVENT_TASK_SYNC } end function XUiRestaurantMain:Close() XLuaUiManager.Close("UiRestaurantCommon") self.Super.Close(self) if self.IsLevelUp then XDataCenter.RestaurantManager.OnLeave(self.IsLevelUp) else XDataCenter.RestaurantManager.StopBusiness() end --XDataCenter.RestaurantManager.OnLeave(self.IsLevelUp) --XDataCenter.RestaurantManager.RequestExitRoom() end function XUiRestaurantMain:InitUi() self.PanelTips.gameObject:SetActiveEx(false) ---@type table self.PanelStorageMap = { [XRestaurantConfigs.AreaType.IngredientArea] = XUiPanelStorage.New(self.PanelIngredient, self), [XRestaurantConfigs.AreaType.FoodArea] = XUiPanelStorage.New(self.PanelFood, self), [XRestaurantConfigs.AreaType.SaleArea] = XUiPanelStorage.New(self.PanelSale, self), } XLuaUiManager.Open("UiRestaurantCommon") end function XUiRestaurantMain:InitCb() self:BindExitBtns() self:BindHelpBtn() self.BtnLeft.CallBack = function() local camera = self.Room:GetCameraModel() self:OnBtnArrowClick(camera:GetLastAreaInfo()) end self.BtnRight.CallBack = function() local camera = self.Room:GetCameraModel() self:OnBtnArrowClick(camera:GetNextAreaInfo()) end self.BtnHot.CallBack = function() self:OnBtnHotClick() end self.BtnShop.CallBack = function() self:OnBtnShopClick() end self.BtnTask.CallBack = function() self:OnBtnTaskClick() end self.BtnRestaurant.CallBack = function() self:OnBtnRestaurantClick() end self.BtnWorker.CallBack = function() self:OnBtnWorkerClick() end self.BtnStatistics.CallBack = function() self:OnBtnStatisticsClick() end self.BtnBuff.CallBack = function() self:OnBtnBuffClick() end self.BtnStop.CallBack = function() self:OnBtnStopClick() end self.Room:AddBeginDragCb(function() self:SetUiState(false) end) self.Room:AddEndDragCb(function() local endCb = function() self:SetUiState(true) self:OnAreaTypeChange() end self.Room:OnStopMoveCamera(nil, endCb) end) self.TipFunc = asynTask(function(msg, cb) XUiManager.TipMsg(msg, nil, cb) end) end function XUiRestaurantMain:InitView() XDataCenter.RestaurantManager.StartBusiness() local viewModel = XDataCenter.RestaurantManager.GetViewModel() ---@type UnityEngine.Canvas local canvas = self.Transform:GetComponent("Canvas") if canvas then viewModel:SetProperty("_UiMainSorting", canvas.sortingOrder) end self:OnAreaTypeChange() local endTime = viewModel:GetBusinessEndTime() local nowTime = XTime.GetServerNowTimestamp() if self.TxtTime then self.TxtTime.text = XUiHelper.GetTime(endTime - nowTime, XUiHelper.TimeFormatType.PIVOT_COMBAT) end self:SetAutoCloseInfo(endTime, function(isClose) if isClose or not XDataCenter.RestaurantManager.IsOpen() then self.Room:ClearAllCustomer() XLuaUiManager.RunMain() XUiManager.TipText("CommonActivityEnd") return end end) --备菜台 self:BindViewModelPropertyToObj(viewModel, function(map) self:TryWorking(map) end, "_IngredientWorkBenches") --烹饪台 self:BindViewModelPropertyToObj(viewModel, function(map) self:TryWorking(map) end, "_CookingWorkBenches") --售卖台 self:BindViewModelPropertyToObj(viewModel, function(map) self:TryWorking(map) end, "_SalesWorkBenches") --升级 self:BindViewModelPropertyToObj(viewModel, function(isLevelUp) if not isLevelUp then return end self.IsLevelUp = true self:Close() XDataCenter.RestaurantManager.EnterUiMain(self.IsLevelUp) end, "_IsLevelUp") --按钮状态 self:BindViewModelPropertyToObj(viewModel, function(level) local minLevel = XRestaurantConfigs.GetBuffUnlockMinLevel() self.BtnBuff:SetDisable(level < minLevel) end, "_Level") --热销红点 self:BindViewModelPropertyToObj(viewModel, function(curDay) self.BtnHot:ShowReddot(XDataCenter.RestaurantManager.CheckHotSaleRedPoint()) end, "_CurDay") --餐厅升级/空闲工作台红点 self:BindViewModelPropertyToObj(viewModel, function() self.BtnRestaurant:ShowReddot(XDataCenter.RestaurantManager.CheckRestaurantUpgradeRedPoint()) self:RefreshArrowBtnRedPoint() end, "_EventLevelConditionChange") --buff红点 self:BindViewModelPropertyToObj(viewModel, function() self.BtnBuff:ShowReddot(XDataCenter.RestaurantManager.CheckBuffRedPoint()) end, "_BuffRedPointMarkCount") self:RefreshTaskRedPoint() end function XUiRestaurantMain:ShowTips(tips) self.TxtTips.text = tips self.PanelTips.gameObject:SetActiveEx(true) XLuaUiManager.SetMask(true) self.TipTimer = XScheduleManager.ScheduleOnce(function() XLuaUiManager.SetMask(false) if XTool.UObjIsNil(self.PanelTips.gameObject) then return end self.PanelTips.gameObject:SetActiveEx(false) end, XScheduleManager.SECOND * TipShowTime) end function XUiRestaurantMain:RefreshTaskRedPoint() --商店红点 self.BtnTask:ShowReddot(XDataCenter.RestaurantManager.CheckTaskRedPoint()) end --- 场景切换 ---@param direction XAreaInfoNode ---@return void -------------------------- function XUiRestaurantMain:OnBtnArrowClick(direction) if not direction then return end local camera = self.Room:GetCameraModel() camera:MoveTo(direction.Type, function() self:SetUiState(false) end, function() self:SetUiState(true) self:OnAreaTypeChange() end) end function XUiRestaurantMain:OnBtnHotClick() XRestaurantConfigs.Burying(XRestaurantConfigs.BuryingButton.BtnHot, self.Name) XDataCenter.RestaurantManager.MarkHotSaleRedPoint() self.BtnHot:ShowReddot(false) XLuaUiManager.Open("UiRestaurantRecommend") end function XUiRestaurantMain:OnBtnShopClick() XRestaurantConfigs.Burying(XRestaurantConfigs.BuryingButton.BtnShop, self.Name) XDataCenter.RestaurantManager.OpenShop() end function XUiRestaurantMain:OnBtnTaskClick() XRestaurantConfigs.Burying(XRestaurantConfigs.BuryingButton.BtnTask, self.Name) XDataCenter.RestaurantManager.OpenTask() end function XUiRestaurantMain:OnBtnRestaurantClick() XLuaUiManager.Open("UiRestaurantHire") end function XUiRestaurantMain:OnBtnWorkerClick() XLuaUiManager.Open("UiRestaurantCook") end function XUiRestaurantMain:OnBtnStatisticsClick() XRestaurantConfigs.Burying(XRestaurantConfigs.BuryingButton.BtnStatistics, self.Name) local camera = self.Room:GetCameraModel() local areaType = camera:GetAreaType() areaType = XRestaurantConfigs.CheckIsIngredientArea(areaType) and XRestaurantConfigs.AreaType.IngredientArea or XRestaurantConfigs.AreaType.FoodArea XDataCenter.RestaurantManager.OpenStatistics(areaType) end function XUiRestaurantMain:OnBtnBuffClick() local viewModel = XDataCenter.RestaurantManager.GetViewModel() local level = viewModel:GetProperty("_Level") local minLevel = XRestaurantConfigs.GetBuffUnlockMinLevel() if minLevel > level then XUiManager.TipMsg(string.format(XRestaurantConfigs.GetCommonUnlockText(2), minLevel)) return end XLuaUiManager.Open("UiRestaurantBuff") end function XUiRestaurantMain:OnBtnStopClick() local workingCount = XDataCenter.RestaurantManager.GetViewModel():GetOnBenchStaffCount() if workingCount <= 0 then XUiManager.TipMsg(XRestaurantConfigs.GetNoStaffWorkText()) return end local title, content = XRestaurantConfigs.GetStopAllProductText() XDataCenter.RestaurantManager.OpenPopup(title, content, nil, nil, function() XDataCenter.RestaurantManager.RequestStopAll() end) end function XUiRestaurantMain:SetUiState(state) local animName = state and "UiEnable" or "UiDisable" self:PlayAnimation(animName) if not state then for _, panel in pairs(self.PanelStorageMap) do panel:Hide() end end XEventManager.DispatchEvent(XEventId.EVENT_RESTAURANT_SHOW_MAIN_UI, state) end function XUiRestaurantMain:OnAreaTypeChange() local camera = self.Room:GetCameraModel() local last = camera:GetLastAreaInfo() local next = camera:GetNextAreaInfo() self.BtnLeft.gameObject:SetActiveEx(false) self.BtnRight.gameObject:SetActiveEx(false) if last then self.BtnLeft.gameObject:SetActiveEx(true) self.BtnLeft:SetNameByGroup(0, XRestaurantConfigs.GetCameraAuxiliaryAreaName(last.Type)) end if next then self.BtnRight.gameObject:SetActiveEx(true) self.BtnRight:SetNameByGroup(0, XRestaurantConfigs.GetCameraAuxiliaryAreaName(next.Type)) end self:RefreshArrowBtnRedPoint() local areaType = camera:GetAreaType() for _, panel in pairs(self.PanelStorageMap) do panel:Hide() end local panel = self.PanelStorageMap[areaType] if panel then panel:Show(areaType, nil, "_Count") end end function XUiRestaurantMain:RefreshArrowBtnRedPoint() local camera = self.Room:GetCameraModel() local last = camera:GetLastAreaInfo() local next = camera:GetNextAreaInfo() local cashierRedPoint, nextAreaPoint, lastAreaPoint = false, false, false if next then cashierRedPoint = XRestaurantConfigs.CheckIsSaleArea(next.Type) and XDataCenter.RestaurantManager.CheckCashierLimitRedPoint() nextAreaPoint = XDataCenter.RestaurantManager.CheckWorkBenchRedPoint(next.Type) end if last then lastAreaPoint = XDataCenter.RestaurantManager.CheckWorkBenchRedPoint(last.Type) end self.BtnRight:ShowReddot(cashierRedPoint or nextAreaPoint) self.BtnLeft:ShowReddot(lastAreaPoint) end function XUiRestaurantMain:TryWorking(benchMap) if XTool.IsTableEmpty(benchMap) then return end for _, bench in pairs(benchMap) do bench:TryWorking() end end function XUiRestaurantMain:OnJumpToUiTip(itemId) XLuaUiManager.Open("UiTip", itemId) end function XUiRestaurantMain:OnCoinChanged(id, count) self.BtnRestaurant:ShowReddot(XDataCenter.RestaurantManager.CheckRestaurantUpgradeRedPoint()) end