local XUiPanelMenu = XClass(XLuaBehaviour, "XUiPanelMenu") function XUiPanelMenu:Ctor(rootUi, ui) self.GameObject = ui.gameObject self.Transform = ui.transform self.RootUi = rootUi self.IsNew = false self.IsFollowMouse = false self.IsShow = false self.Furniture = nil XTool.InitUiObject(self) self.BtnCancel.CallBack = function() self:OnBtnCancelClick() end self.BtnStorage.CallBack = function() self:OnBtnStorageClick() end self.BtnRotate.CallBack = function() self:OnBtnRotateClick() end self.BtnOk.CallBack = function() self:OnBtnOkClick() end self.BtnBuild.CallBack = function() self:OnBtnBuildClick() end end function XUiPanelMenu:Update() if not self.Furniture then self:ShowButtons(false) return end if XTool.UObjIsNil(self.Furniture.GameObject) then self:ShowButtons(false) return end local camera = XHomeSceneManager.GetSceneCamera() if XTool.UObjIsNil(camera) then self:ShowButtons(false) return end self:ShowButtons(true) if self.IsFollowMouse then local screenPoint if CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsEditor or CS.UnityEngine.Application.platform == CS.UnityEngine.RuntimePlatform.WindowsPlayer then if CS.UnityEngine.Input.GetMouseButtonUp(0) then self.IsFollowMouse = false end screenPoint = CS.UnityEngine.Vector2(CS.UnityEngine.Input.mousePosition.x, CS.UnityEngine.Input.mousePosition.y) else if CS.UnityEngine.Input.touches.Length > 0 then screenPoint = CS.UnityEngine.Input.GetTouch(0).position else self.IsFollowMouse = false end end if screenPoint then self.Furniture:AdjustPosition(screenPoint) end end local viewportPos = camera:WorldToViewportPoint(self.Furniture:GetCenterPosition()) local uiDesignSize = XGlobalVar.UiDesignSize self.Transform.anchoredPosition = CS.UnityEngine.Vector2((viewportPos.x - 0.5) * uiDesignSize.Width, (viewportPos.y - 0.5) * uiDesignSize.Height) end -- 显示该面板 function XUiPanelMenu:Show(show) if self.IsShow == show then return end XHomeDormManager.SetSelectedFurniture(show) self.IsShow = show self.GameObject:SetActive(show) if show then XHomeDormManager.SetRoomInteractInfo(self.RootUi.RoomId) self.RootUi:OnShowBlockGrids() else XHomeDormManager.HideRoomInteractInfo(self.RootUi.RoomId) self.RootUi:OnHideBlockGrids() end end -- 显示菜单按钮 function XUiPanelMenu:ShowButtons(show) self.BtnCancel.gameObject:SetActive(show) self.BtnStorage.gameObject:SetActive(show) self.BtnRotate.gameObject:SetActive(show) self.BtnOk.gameObject:SetActive(show) end -- 设置该面板的家具对象 function XUiPanelMenu:SetFurniture(furniture, isFollowMouse, isNew, isOutOfLimit) if furniture then furniture.IsSelected = true self.IsFollowMouse = isFollowMouse local _, _, rotate = furniture:GetPos() local type = furniture:GetXHomePlatType() XHomeDormManager.LockCollider(rotate) if furniture.PlaceType == XFurniturePlaceType.OnWall then furniture.Room.Wall:ShowFixGrid(true, rotate) elseif furniture.PlaceType == XFurniturePlaceType.OnGround then furniture.Room.Ground:ShowFixGrid(true) end --TODO Test XHomeDormManager.AttachSurfaceToRoom(furniture.Room.Data.Id) XHomeDormManager.ShowSurface(type) else if self.Furniture then self.Furniture.IsSelected = false end -- local type = self.Furniture:GetXHomePlatType() end self.IsNew = isNew self.Furniture = furniture self.IsOutOfLimit = isOutOfLimit self:Show(furniture ~= nil) end -- 取消 function XUiPanelMenu:OnBtnCancelClick() if self.Furniture.PlaceType == XFurniturePlaceType.OnWall then self.Furniture.Room.Wall:ShowFixGrid(false) elseif self.Furniture.PlaceType == XFurniturePlaceType.OnGround then self.Furniture.Room.Ground:ShowFixGrid(false) end if self.IsNew then self.Furniture:Storage() else self.Furniture:RevertPosition() end self.RootUi:ShowFurnitureMenu(nil) XHomeDormManager.UnlockCollider() end -- 收纳 function XUiPanelMenu:OnBtnStorageClick() if self.Furniture.PlaceType == XFurniturePlaceType.OnWall then self.Furniture.Room.Wall:ShowFixGrid(false) elseif self.Furniture.PlaceType == XFurniturePlaceType.OnGround then self.Furniture.Room.Ground:ShowFixGrid(false) end self.Furniture:Storage() self.RootUi:ShowFurnitureMenu(nil) XHomeDormManager.UnlockCollider() end -- 旋转 function XUiPanelMenu:OnBtnRotateClick() if self.Furniture.PlaceType == XFurniturePlaceType.OnGround then local x, y, rotate = self.Furniture:GetPos() rotate = rotate + 1 rotate = rotate % 4 self.Furniture:SetPos(x, y, rotate) end end -- 创建 function XUiPanelMenu:OnBtnBuildClick() if XDataCenter.FurnitureManager.IsFurnitureCreatePosFull() then XUiManager.TipText("FurnitureBuildingListFull") return end XLuaUiManager.Open("UiFurnitureCreate", self.Furniture.Cfg.TypeId) end -- 确定 function XUiPanelMenu:OnBtnOkClick() if not self.Furniture:CheckCanLocate() then XUiManager.TipError(CS.XTextManager.GetText("FurniturePlaceNotCorrect")) return end if self.IsOutOfLimit then XUiManager.TipError(CS.XTextManager.GetText("FurnitureOutOfLimit")) return end -- if self.Furniture:CheckPutTypeCountReachLimit() then -- XUiManager.TipError(CS.XTextManager.GetText("FurnitureOutOfLimit")) -- return -- end if self.Furniture.PlaceType == XFurniturePlaceType.OnWall then self.Furniture.Room.Wall:ShowFixGrid(false) elseif self.Furniture.PlaceType == XFurniturePlaceType.OnGround then self.Furniture.Room.Ground:ShowFixGrid(false) end self.Furniture:LocateFurniture() self.RootUi:ShowFurnitureMenu(nil) XHomeDormManager.UnlockCollider() end return XUiPanelMenu