PGRData/Script/matrix/xui/xuidorm/xuifurniturereform/XUiGridFurniture.lua

227 lines
No EOL
7.5 KiB
Lua

XUiGridFurniture = XClass(nil, "XUiGridFurniture")
function XUiGridFurniture:Ctor(ui)
self.GameObject = ui.gameObject
self.Transform = ui.transform
XTool.InitUiObject(self)
self.GridAttributePool = {}
self.GridAttribute.gameObject:SetActiveEx(false)
end
function XUiGridFurniture:Init(rootUi, parent, roomFurniureCount)
self.RootUi = rootUi
self.Parent = parent
self.RoomFurnitureCount = roomFurniureCount
--初始化家具属性
self.PointerDownPosition = nil
self.UiFurnitureScore = XUiFurnitureScore.New(self.RootUi, self.PanelFurnitureScore)
self.BtnItemWidget = self.BtnItem:GetComponent("XUiWidget")
self.BtnItemWidget:AddPointerDownListener(function(data) self:OnBtnItemPointerDown(data) end)
self.BtnItemWidget:AddDragListener(function(data) self:OnBtnItemOnDrag(data) end)
self.BtnItemWidget:AddPointerClickListener(function(data) self:OnBtnItemClick(data) end)
self.BtnItemWidget:AddBeginDragListener(function(data) self:OnBtnItemOnBeginDrag(data) end)
self.BtnItemWidget:AddEndDragListener(function(data) self:OnBtnItemOnEndDrag(data) end)
end
-- 按下家具item
function XUiGridFurniture:OnBtnItemPointerDown(data)
self.PointerDownPosition = data.position.y
XHomeDormManager.AttachSurfaceToRoom(self.RootUi.RoomId)
if not self.Data then
return
end
local cfg = XFurnitureConfigs.GetFurnitureTemplateById(self.Data.ConfigId)
if not cfg then
return
end
local type = XFurnitureConfigs.LocateTypeToXHomePlatType(cfg.LocateType)
XHomeDormManager.ShowSurface(type)
end
function XUiGridFurniture:OnBtnItemOnBeginDrag(data)
self.IsDraging = true
self.Parent:OnBeginDrag(data)
end
function XUiGridFurniture:OnBtnItemOnEndDrag(data)
self.IsDraging = false
self.Parent:OnEndDrag(data)
end
-- 拖动家具item
function XUiGridFurniture:OnBtnItemOnDrag(data)
if not self.Data then
return
end
local cfg = XFurnitureConfigs.GetFurnitureTemplateById(self.Data.ConfigId)
if not cfg then
return
end
if XHomeDormManager.CheckFurnitureCountReachLimitByPutNumType(self.RootUi.RoomId, cfg.PutNumType) and cfg.LocateType ~= XFurnitureConfigs.HomeLocateType.Replace then
XUiManager.TipError(CS.XTextManager.GetText("FurnitureOutOfLimit"))
return
end
local room = XHomeDormManager.GetRoom(self.RootUi.RoomId)
local furnitures = room:GetAllFurnitureConfig()
if #furnitures >= XFurnitureConfigs.MaxPutFurnitureCount then
if cfg.LocateType ~= XFurnitureConfigs.HomeLocateType.Replace then
XUiManager.TipText("DormMaxPutFurnitureCountHit", XUiManager.UiTipType.Tip)
return
end
end
if not self.PointerDownPosition then
return
end
self.Parent:OnDrag(data)
if data.position.y - self.PointerDownPosition < self.Parent.ControlLimit then
return
end
if cfg.LocateType ~= XFurnitureConfigs.HomeLocateType.Replace then
-- 家具
local camera = XHomeSceneManager.GetSceneCamera()
if not XTool.UObjIsNil(camera) then
local ray = camera:ScreenPointToRay(CS.UnityEngine.Vector3(data.position.x, data.position.y, 0))
local layerMask = CS.UnityEngine.LayerMask.GetMask("HomeSurface")
if (layerMask) then
local ret, hit = ray:RayCast(layerMask)
if ret then
self.PointerDownPosition = nil
local gridPos, rotate = XHomeDormManager.GetGridPosByWorldPos(hit.point, hit.transform, cfg.Width, cfg.Height)
self.Furniture = XHomeDormManager.CreateFurniture(self.RootUi.RoomId, self.Data, gridPos, rotate)
if not self.Furniture then
return
end
self.RootUi:ShowFurnitureMenu(self.Furniture, true, true)
end
end
end
-- else
-- 改造
end
end
function XUiGridFurniture:GetWallWidthAndHeightByRotate(rotateAngle)
local mapWidth, mapHeight
local rot = rotateAngle % 2
if rot == 0 then
mapWidth = XHomeDormManager.GetMapWidth()
mapHeight = XHomeDormManager.GetMapTall()
else
mapWidth = XHomeDormManager.GetMapHeight()
mapHeight = XHomeDormManager.GetMapTall()
end
return mapWidth, mapHeight
end
-- 点击家具item
function XUiGridFurniture:OnBtnItemClick(data)
if self.IsDraging then
return
end
if not data then
return
end
local cfg = XFurnitureConfigs.GetFurnitureTemplateById(self.Data.ConfigId)
if not cfg then
return
end
if XHomeDormManager.CheckFurnitureCountReachLimitByPutNumType(self.RootUi.RoomId, cfg.PutNumType) and cfg.LocateType ~= XFurnitureConfigs.HomeLocateType.Replace then
XUiManager.TipError(CS.XTextManager.GetText("FurnitureOutOfLimit"))
return
end
local room = XHomeDormManager.GetRoom(self.RootUi.RoomId)
local furnitures = room:GetAllFurnitureConfig()
if #furnitures >= XFurnitureConfigs.MaxPutFurnitureCount then
if cfg.LocateType ~= XFurnitureConfigs.HomeLocateType.Replace then
XUiManager.TipText("DormMaxPutFurnitureCountHit", XUiManager.UiTipType.Tip)
return
end
end
-- 墙上的,初始化墙上位置数据
local pos = {}
pos.x = 15
pos.y = 15
local rotate = 0
if cfg.LocateType == XFurnitureConfigs.HomeLocateType.LocateWall then
rotate = XHomeDormManager.DormistoryGetFarestWall(self.RootUi.RoomId) - 1
local wallWidth, wallHeight = self:GetWallWidthAndHeightByRotate(rotate)
pos.x = math.floor(wallWidth / 2 - cfg.Width / 2)
pos.y = math.floor(wallHeight / 2 - cfg.Height / 2)
end
self.Furniture = XHomeDormManager.CreateFurniture(self.RootUi.RoomId, self.Data, pos, rotate)
if not self.Furniture then
return
end
self.Furniture:SetInteractInfoGo()
if cfg.LocateType == XFurnitureConfigs.HomeLocateType.Replace then
-- 改造
XHomeDormManager.ReplaceSurface(self.RootUi.RoomId, self.Furniture)
else
-- 家具
self.RootUi:ShowFurnitureMenu(self.Furniture, false, true)
self.Furniture:ShowSelectGrid()
end
end
--更新表现
function XUiGridFurniture:UpdateData(data, roomType)
if not data then
return
end
local isMyRoom = roomType == XDormConfig.DormDataType.Self
local baseData = XFurnitureConfigs.GetFurnitureBaseTemplatesById(data.ConfigId)
self.TxtName.text = baseData.Name
if isMyRoom then
self.ImgIcon:SetRawImage(XDataCenter.FurnitureManager.GetFurnitureIconById(data.Id, XDormConfig.DormDataType.Self))
else
local cfg = XFurnitureConfigs.GetFurnitureBaseTemplatesById(data.ConfigId)
local icon = cfg and cfg.Icon or ""
self.ImgIcon:SetRawImage(icon)
end
self.Data = data
self.PanelFurnitureScore.gameObject:SetActiveEx(isMyRoom)
if isMyRoom then
self:UpdateAttributeItems()
end
end
function XUiGridFurniture:UpdateAttributeItems()
local attributes = {}
for k, v in pairs(self.Data.AttrList) do
attributes[k] = {
Id = k,
Val = v,
FurnitureId = self.Data.Id
}
end
XUiHelper.CreateTemplates(self.RootUi, self.GridAttributePool, attributes, XUiGridAttribute.New, self.GridAttribute, self.PanelFurnitureScore, XUiGridAttribute.Init)
for i = 1, #attributes do
self.GridAttributePool[i].GameObject:SetActiveEx(true)
end
end
return XUiGridFurniture