227 lines
7.5 KiB
Lua
227 lines
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
|