local uiCtrl = require_ex('UI/Panels/Base/UICtrl') local PANEL_ID = PanelId.FacMainRight FacMainRightCtrl = HL.Class('FacMainRightCtrl', uiCtrl.UICtrl) FacMainRightCtrl.s_messages = HL.StaticField(HL.Table) << { [MessageConst.ON_ENTER_BUILDING_MODE] = 'OnEnterBuildingMode', [MessageConst.ON_ENTER_LOGISTIC_MODE] = 'OnEnterLogisticMode', [MessageConst.ON_EXIT_FACTORY_MODE] = 'OnExitFactoryMode', [MessageConst.ON_SYSTEM_UNLOCK_CHANGED] = 'OnSystemUnlock', [MessageConst.ON_TOGGLE_FAC_TOP_VIEW] = 'OnToggleFacTopView', [MessageConst.ON_RESET_BLACKBOX] = 'OnResetBlackbox', [MessageConst.FAC_MAIN_HUD_CLOSE_MOBILE_BOX] = '_CloseBtnBox', [MessageConst.FAC_MAIN_HUD_RIGHT_STOP_FOCUS] = 'StopFocus', } FacMainRightCtrl.m_isBuilding = HL.Field(HL.Boolean) << false FacMainRightCtrl.m_lastBuildItemId = HL.Field(HL.String) << '' FacMainRightCtrl.m_zoomCamGroupId = HL.Field(HL.Number) << 0 FacMainRightCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg) self.view.blueprintBtn.onClick:AddListener(function() PhaseManager:OpenPhase(PhaseId.FacBlueprint) end) self:_UpdateBlueprintBtn() self.view.buildBtn.onClick:AddListener(function() Notify(MessageConst.OPEN_FAC_BUILD_MODE_SELECT) end) self.view.destroyBtn.onClick:AddListener(function() Notify(MessageConst.FAC_ENTER_DESTROY_MODE) end) self.view.batchSelectBtn.onClick:AddListener(function() Notify(MessageConst.FAC_ENTER_DESTROY_MODE) end) self.view.equipBtn.onClick:AddListener(function() PhaseManager:OpenPhase(PhaseId.EquipTech) end) if self.view.equipBtnDragHandler then self.view.equipBtnDragHandler.onDrag:AddListener(function(eventData) Notify(MessageConst.MOVE_LEVEL_CAMERA, eventData.delta) end) end if self.view.toolBoxToggleDragHandler then self.view.toolBoxToggleDragHandler.onDrag:AddListener(function(eventData) Notify(MessageConst.MOVE_LEVEL_CAMERA, eventData.delta) end) end if self.view.machineIconBtn then self.view.machineIconBtn.button.onClick:AddListener(function() local showOutput = not GameInstance.remoteFactoryManager:GetBuildingOutputVisible() GameInstance.remoteFactoryManager:SwitchBuildingOutputVisible(showOutput) self:UpdateMachineIcon() local toastTextId = showOutput and "LUA_BUILDING_TARGET_ICON_SHOW_TOAST" or "LUA_BUILDING_TARGET_ICON_HIDE_TOAST" Notify(MessageConst.SHOW_TOAST, Language[toastTextId]) end) end if self.view.lastBuildNode then self.view.lastBuildNode.button.onClick:AddListener(function() self:_OnCLickLastBuild() end) self:_UpdateLastBuildNode() end if self.isControllerPanel then self.m_zoomCamGroupId = InputManagerInst:CreateGroup(self.view.content.groupId) UIUtils.bindControllerCamZoom(self.m_zoomCamGroupId) InputManagerInst:ToggleGroup(self.m_zoomCamGroupId, false) self.view.animationSelectableNaviGroup.onIsTopLayerChanged:AddListener(function(isTopLayer) self:_OnIsTopLayerChanged(isTopLayer) end) self.view.animationSelectableNaviGroup.focusPanelSortingOrder = UIManager:GetBaseOrder(Types.EPanelOrderTypes.PopUp) - 1 end self:_CloseBtnBox() self:_InitBtnRedDot() end FacMainRightCtrl.OnShow = HL.Override() << function(self) self:_UpdateLastBuildNode() self:UpdateMachineIcon() self:_UpdateTopViewState() self.view.equipBtn.gameObject:SetActive(PhaseManager:CheckCanOpenPhase(PhaseId.EquipTech)) end FacMainRightCtrl.OnHide = HL.Override() << function(self) self:StopFocus() end FacMainRightCtrl.StopFocus = HL.Method() << function(self) if self.isControllerPanel then self.view.animationSelectableNaviGroup:ManuallyStopFocus() end end FacMainRightCtrl.UpdateMachineIcon = HL.Method() << function(self) if not self.view.machineIconBtn then return end local isOn = GameInstance.remoteFactoryManager:GetBuildingOutputVisible() self.view.machineIconBtn.iconOn.gameObject:SetActive(not isOn) self.view.machineIconBtn.iconOff.gameObject:SetActive(isOn) self.view.machineIconBtn.text.text = isOn and Language.LUA_FAC_MAIN_RIGHT_MACHINE_ICON_OFF or Language.LUA_FAC_MAIN_RIGHT_MACHINE_ICON_ON end FacMainRightCtrl.OnToggleFacTopView = HL.Method(HL.Boolean) << function(self, isTopView) if self.view.toolBoxToggle then if isTopView then self.m_btnBoxOpened = self.view.toolBoxToggle.isOn self.view.toolBoxToggle.isOn = self.m_btnBoxOpenedInTopView else self.m_btnBoxOpenedInTopView = self.view.toolBoxToggle.isOn self.view.toolBoxToggle.isOn = self.m_btnBoxOpened end end self:_UpdateTopViewState() if DeviceInfo.usingController then self.view.animationSelectableNaviGroup:ClearLastFocusNaviTarget() end end FacMainRightCtrl.OnSystemUnlock = HL.Method(HL.Opt(HL.Any)) << function(self, _) self:_UpdateBlueprintBtn() end FacMainRightCtrl.OnExitFactoryMode = HL.Method(HL.Opt(HL.Any)) << function(self) self.m_lastBuildItemId = "" self:_UpdateLastBuildNode() self:_CloseBtnBox() self.m_btnBoxOpened = false self.m_btnBoxOpenedInTopView = false end FacMainRightCtrl.OnEnterBuildingMode = HL.Method(HL.String) << function(self, id) local count = Utils.getItemCount(id) if count == 0 then return end self.m_lastBuildItemId = id self.m_isBuilding = true self:_UpdateLastBuildNode() end FacMainRightCtrl.OnEnterLogisticMode = HL.Method(HL.String) << function(self, id) self.m_lastBuildItemId = id self.m_isBuilding = false self:_UpdateLastBuildNode() end FacMainRightCtrl._InitBtnRedDot = HL.Method() << function(self) if Utils.isInBlackbox() then self.view.buildBtnRedDot.gameObject:SetActive(false) return end self.view.buildBtnRedDot:InitRedDot("FacBuildModeMenuLogisticTab") self.view.equipBtnRedDot:InitRedDot("EquipTech") end FacMainRightCtrl._UpdateLastBuildNode = HL.Method() << function(self) local node = self.view.lastBuildNode if not node then return end if string.isEmpty(self.m_lastBuildItemId) or (self.m_isBuilding and Utils.getItemCount(self.m_lastBuildItemId) == 0) then node.gameObject:SetActive(false) return end node.gameObject:SetActive(true) local data = Tables.itemTable[self.m_lastBuildItemId] node.itemIcon:LoadSprite(UIConst.UI_SPRITE_ITEM, data.iconId) node.itemIconShadow:LoadSprite(UIConst.UI_SPRITE_ITEM, data.iconId) end FacMainRightCtrl._OnCLickLastBuild = HL.Method() << function(self) local itemId = self.m_lastBuildItemId if self.m_isBuilding then local count, backpackCount = Utils.getItemCount(itemId) if count == 0 then return end end if self.m_isBuilding then Notify(MessageConst.FAC_ENTER_BUILDING_MODE, { itemId = itemId, }) else Notify(MessageConst.FAC_ENTER_LOGISTIC_MODE, { itemId = itemId, }) end end FacMainRightCtrl._OnIsTopLayerChanged = HL.Method(HL.Boolean) << function(self, isTopLayer) if isTopLayer then if not InputManagerInst:GetKey(CS.Beyond.Input.GamepadKeyCode.ArrowLeft) then self:_StartTimer(0, function() self.view.animationSelectableNaviGroup:ManuallyStopFocus() end) return end end self.view.animation.isActive = isTopLayer if isTopLayer then UIManager:HideWithKey(PanelId.GeneralAbility, "FacMainRightPanel") else UIManager:ShowWithKey(PanelId.GeneralAbility, "FacMainRightPanel") end InputManagerInst:ToggleGroup(self.m_zoomCamGroupId, isTopLayer and UIUtils.isBattleControllerModifyKeyChanged()) local isOpen, mainCtrl = UIManager:IsOpen(PanelId.FacMain) if isOpen then mainCtrl:OnFacMainRightActiveChange(isTopLayer) local pinGroupId = mainCtrl.view.pinFormulaNode.inputBindingGroupMonoTarget.groupId if isTopLayer then InputManagerInst:ChangeParent(true, pinGroupId, self.view.animationInputBindingGroupMonoTarget.groupId) else InputManagerInst:ChangeParent(true, pinGroupId, mainCtrl.view.inputGroup.groupId) end end local _, jsPanelCtrl = UIManager:IsOpen(PanelId.Joystick) if jsPanelCtrl then local jsGroupId = jsPanelCtrl.view.joystick.groupId if isTopLayer then InputManagerInst:ChangeParent(true, jsGroupId, self.view.animationInputBindingGroupMonoTarget.groupId) else InputManagerInst:ChangeParent(true, jsGroupId, jsPanelCtrl.view.inputGroup.groupId) end end Notify(MessageConst.TOGGLE_HIDE_INTERACT_OPTION_LIST, { "FacMainRight", isTopLayer }) Notify(MessageConst.TOGGLE_HIDE_FAC_TOP_VIEW_RIGHT_SIDE_UI, isTopLayer) end FacMainRightCtrl._CloseBtnBox = HL.Method() << function(self) if self.view.toolBoxToggle then self.view.toolBoxToggle.isOn = false end end FacMainRightCtrl._UpdateTopViewState = HL.Method() << function(self) local inTopView = LuaSystemManager.factory.inTopView self.view.stateController:SetState(inTopView and "TopView" or "Normal") self.view.destroyBtn.gameObject:SetActive(not inTopView) self.view.batchSelectBtn.gameObject:SetActive(inTopView and not DeviceInfo.usingController) if self.view.machineIconBtn then self.view.machineIconBtn.gameObject:SetActive(not inTopView) end end FacMainRightCtrl.m_btnBoxOpened = HL.Field(HL.Boolean) << false FacMainRightCtrl.m_btnBoxOpenedInTopView = HL.Field(HL.Boolean) << false FacMainRightCtrl.OnResetBlackbox = HL.Method() << function(self) self:_CloseBtnBox() end FacMainRightCtrl._UpdateBlueprintBtn = HL.Method() << function(self) local isSystemUnlocked = Utils.isSystemUnlocked(GEnums.UnlockSystemType.FacBlueprint) if Utils.isInBlackbox() then self.view.blueprintBtn.gameObject:SetActive(isSystemUnlocked and GameInstance.player.remoteFactory.blueprint.presetBlueprints.Count > 0) else self.view.blueprintBtn.gameObject:SetActive(isSystemUnlocked) end end HL.Commit(FacMainRightCtrl)