PGRData/Script/matrix/xui/xuicollectionwall/xuicollectionwallgrid/XUiGridPlacedCollection.lua

220 lines
No EOL
6.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiGridPlacedCollection = XClass(nil, "XUiGridPlacedCollection")
local XUiCollectionStyle = require("XUi/XUiMedal/XUiCollectionStyle")
local Vector3 = CS.UnityEngine.Vector3
---
--- 'collectionData'的结构为{ Id, LocalPos, PedestalId }
function XUiGridPlacedCollection:Ctor(ui, rootUi, parentUi, collectionData)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
self.ParentRectTransform = parentUi
self.IsNew = collectionData.IsNew
self.Id = collectionData.Id
self.SizeId = collectionData.SizeId -- 尺寸Id
self.CollectionStyleDic = {} -- Key:收藏品Id Value:XUiCollectionStyle脚本
-- 可移动的范围边界
self.Size = XCollectionWallConfigs.GetCollectionSize(collectionData.SizeId)
self.OriGridPos = XDataCenter.CollectionWallManager.GetGridPosByLocalPos(collectionData.LocalPos, self.Size)
self.MinXY = self.Size / 2
self.MaxX = self.ParentRectTransform.rect.width - (self.Size / 2)
self.MaxY = self.ParentRectTransform.rect.height - (self.Size / 2)
self.Camera = CS.XUiManager.Instance.UiCamera
XTool.InitUiObject(self)
-- 监听点击
self.GoInputHandler = self.Transform:GetComponent(typeof(CS.XGoInputHandler))
if XTool.UObjIsNil(self.GoInputHandler) then
self.GoInputHandler = self.GameObject:AddComponent(typeof(CS.XGoInputHandler))
end
if not XTool.UObjIsNil(self.GoInputHandler) then
self.GoInputHandler:AddPointerClickListener(function(eventData)
self:OnClick(eventData)
end)
self.GoInputHandler:AddDragListener(function(eventData)
self:OnDrag(eventData)
end)
end
self:InitComponent()
self:SetPos(self.OriGridPos, true)
end
function XUiGridPlacedCollection:InitComponent()
self.TxtName.text = XMedalConfigs.GetCollectionNameById(self.Id)
local prefabPath = XMedalConfigs.GetCollectionPrefabPath(self.Id)
local styleObj = self.CollectionStyleNode.gameObject:LoadPrefab(prefabPath)
local collectionData = XDataCenter.MedalManager.GetScoreTitleById(self.Id)
self.CollectionStyleDic[self.Id] = XUiCollectionStyle.New(styleObj, collectionData)
self:SetSelect(false)
end
function XUiGridPlacedCollection:SetSelect(isSelect)
self.IsSelected = isSelect
self.RImBlack.gameObject:SetActiveEx(isSelect)
end
---
--- 取消
function XUiGridPlacedCollection:Cancel()
if self.IsNew then
-- 删除物体和字典中的脚本引用
self.RootUi:StorageCollection(self.Id)
self.RootUi:SetConflict(false)
else
-- 恢复位置
self:SetPos(self.OriGridPos, false)
end
self:SetSelect(false)
self.RootUi:UpdateGridOccupy()
end
---
--- 确认
function XUiGridPlacedCollection:Confirm()
if self.IsNew then
-- 刷新选择列表
self.RootUi:RefreshSelectItemList()
self.IsNew = false
end
self:SetSelect(false)
self.OriGridPos = self.GridPos
self.RootUi:UpdateGridOccupy()
end
---
--- 收纳
function XUiGridPlacedCollection:Storage()
-- 删除物体和字典中的脚本引用
self.RootUi:StorageCollection(self.Id)
-- 更新格子占用情况
self.RootUi:UpdateGridOccupy()
-- 设置冲突
self.RootUi:SetConflict(false)
if not self.IsNew then
-- 刷新选择列表
self.RootUi:RefreshSelectItemList()
end
end
---
--- 调整位置把Screen坐标换算成Canvas坐标
--- 然后再转成对应的格子行列坐标
function XUiGridPlacedCollection:AdjustPosition(screenPos)
-- 设置拖拽
local hasValue, pos = CS.UnityEngine.RectTransformUtility.ScreenPointToLocalPointInRectangle(self.ParentRectTransform, screenPos, self.Camera)
if hasValue then
local localPos = {}
localPos.x = pos.x
localPos.y = pos.y
if localPos.x < self.MinXY then
localPos.x = self.MinXY
elseif localPos.x > self.MaxX then
localPos.x = self.MaxX
end
if localPos.y < self.MinXY then
localPos.y = self.MinXY
elseif localPos.y > self.MaxY then
localPos.y = self.MaxY
end
local gridPos = XDataCenter.CollectionWallManager.GetGridPosByLocalPos(localPos, self.Size)
self:SetPos(gridPos, true)
end
end
---
--- 设置本地
function XUiGridPlacedCollection:SetPos(gridPos, isSetAcross)
if XTool.UObjIsNil(self.Transform) then
return
end
self.GridPos = {}
self.GridPos.x = gridPos.x
self.GridPos.y = gridPos.y
local posVector2 = XDataCenter.CollectionWallManager.GetLocalPosByGridPos(gridPos, self.Size)
self.Transform.localPosition = Vector3(posVector2.x, posVector2.y, 0)
self.RootUi:SetPanelConfirmMenuPos()
self.RootUi:CheckConflict(self.Id, self:GetOccupyGridsList(), isSetAcross)
self.RootUi:UpdateAcrossPos(XCollectionWallConfigs.GetCollectionGridNum(self.SizeId))
end
---
--- 获取本地坐标
function XUiGridPlacedCollection:GetPos()
if XTool.UObjIsNil(self.Transform) then
return
end
return self.Transform.localPosition
end
---
--- 设获取格子坐标
function XUiGridPlacedCollection:GetGridPos()
return self.GridPos
end
function XUiGridPlacedCollection:GetOccupyGridsList()
local result = {}
local gridNum = XCollectionWallConfigs.GetCollectionGridNum(self.SizeId)
for i = 1,gridNum do
for j =1,gridNum do
local temp = {}
temp.x = self.GridPos.x + (i - 1)
temp.y = self.GridPos.y + (j - 1)
table.insert(result,temp)
end
end
return result
end
---
--- 获取尺寸Id
function XUiGridPlacedCollection:GetSizeId()
return self.SizeId
end
function XUiGridPlacedCollection:GetId()
return self.Id
end
---
--- 点击
function XUiGridPlacedCollection:OnClick()
if self.RootUi.IsEditMode then
if self.RootUi.CurSelectCollection then
return
end
-- 进入摆放模式
self.RootUi:EnterPutModel(self)
end
end
---
--- 拖动
function XUiGridPlacedCollection:OnDrag(eventData)
if not self.IsSelected then
return
end
local pos = eventData.position
return self:AdjustPosition(pos)
end
function XUiGridPlacedCollection:Destroy()
self.GoInputHandler:RemoveAllListeners()
end
return XUiGridPlacedCollection