eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
152 lines
5.9 KiB
Lua
152 lines
5.9 KiB
Lua
local TowerDefenseSelectedCharCtrl = class("TowerDefenseSelectedCharCtrl", BaseCtrl)
|
|
TowerDefenseSelectedCharCtrl._mapNodeConfig = {
|
|
drag = {
|
|
sNodeName = "go_char",
|
|
sComponentName = "UIDrag",
|
|
callback = "OnUIDrag_Drag"
|
|
},
|
|
trSortItem = {
|
|
sNodeName = "go_char",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
raySortItem = {
|
|
sNodeName = "go_char",
|
|
sComponentName = "Empty4Raycast"
|
|
},
|
|
rayDragEvent = {
|
|
sNodeName = "rayDragEvent",
|
|
sComponentName = "Empty4Raycast"
|
|
},
|
|
btn_add = {
|
|
sNodeName = "img_add",
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_EditorTeam"
|
|
},
|
|
img_icon = {},
|
|
icon_char = {sComponentName = "Image"},
|
|
txt_name = {sComponentName = "TMP_Text"},
|
|
img_add = {},
|
|
img_none = {}
|
|
}
|
|
TowerDefenseSelectedCharCtrl._mapEventConfig = {
|
|
TowerDefenseItemDragStart = "OnTowerDefenseItemDragStart",
|
|
TowerDefenseItemDragEnd = "OnTowerDefenseItemDragEnd"
|
|
}
|
|
TowerDefenseSelectedCharCtrl._mapRedDotConfig = {}
|
|
local item_Width = 198
|
|
local item_spacing = 8.6
|
|
function TowerDefenseSelectedCharCtrl:Awake()
|
|
self.tweener = nil
|
|
self.nGuideId = 0
|
|
self.bCanChange = true
|
|
self.nItemHeight = self.gameObject:GetComponent("RectTransform").rect.height
|
|
self.nItemWidth = self.gameObject:GetComponent("RectTransform").rect.width
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnEnable()
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnDisable()
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnDestroy()
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:SetData(guideId, bCanChange, nIndex)
|
|
self.nGuideId = guideId
|
|
self.bCanChange = bCanChange
|
|
self.nIndex = nIndex
|
|
self._mapNode.btn_add.interactable = bCanChange
|
|
self._mapNode.drag:SetDragEnable(bCanChange and self.nGuideId > 0)
|
|
self._mapNode.img_none.gameObject:SetActive(self.nGuideId == -1)
|
|
self._mapNode.img_add.gameObject:SetActive(self.nGuideId == 0)
|
|
self._mapNode.img_icon.gameObject:SetActive(self.nGuideId > 0)
|
|
if self.nGuideId > 0 then
|
|
local guideConfig = ConfigTable.GetData("TowerDefenseGuide", self.nGuideId)
|
|
local characterConfig = ConfigTable.GetData("TowerDefenseCharacter", guideConfig.ObjectId)
|
|
if characterConfig ~= nil then
|
|
self:SetPngSprite(self._mapNode.icon_char, characterConfig.Icon .. AllEnum.CharHeadIconSurfix.QM)
|
|
NovaAPI.SetTMPText(self._mapNode.txt_name, characterConfig.Name)
|
|
end
|
|
end
|
|
if nil ~= self.tweener then
|
|
self.tweener:Kill()
|
|
self.tweener = nil
|
|
end
|
|
self._mapNode.trSortItem.localPosition = Vector3(0, 0, 0)
|
|
self.itemCanvas = self.gameObject:GetComponent("Canvas")
|
|
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
|
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
|
end
|
|
local clamp = function(x, min, max)
|
|
return math.max(math.min(x, max), min)
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:InitSortingOrder(nSortOrder, goDragMin, goDragMax)
|
|
self.nInitSortingOrder = nSortOrder
|
|
self.goDragMin = goDragMin
|
|
self.goDragMax = goDragMax
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:GetItemBtnInstanceId()
|
|
return self._mapNode.rayDragEvent.gameObject:GetInstanceID()
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:PlayItemMoveAnim(nIndex)
|
|
local nEndPosX = (self.nItemWidth + item_spacing) * (nIndex - self.nIndex)
|
|
local endPos = Vector2(nEndPosX, 0)
|
|
self.tweener = self._mapNode.trSortItem:DOAnchorPos(endPos, 0.1):SetUpdate(true)
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:SetItemPos(dragPos)
|
|
local localPos = GameUIUtils.ScreenPointToLocalPoint(dragPos, self.gameObject.transform)
|
|
localPos.x = clamp(localPos.x, self.nDragMinPosX, self.nDragMaxPosX)
|
|
self._mapNode.trSortItem.localPosition = Vector3(localPos.x, self.nItemHeight * 0.25, 0)
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:CalDragRange()
|
|
if nil == self.nDragMinPosX or nil == self.nDragMaxPosX then
|
|
local transform = self.gameObject:GetComponent("Transform")
|
|
self.nDragMinPosX = transform:InverseTransformPoint(self.goDragMin.position).x + item_Width / 2
|
|
self.nDragMaxPosX = transform:InverseTransformPoint(self.goDragMax.position).x - item_Width / 2
|
|
end
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnUIDrag_Drag(mDrag)
|
|
if self.nGuideId <= 0 then
|
|
return
|
|
end
|
|
if mDrag.DragEventType == AllEnum.UIDragType.DragStart then
|
|
self.nLastPointerInsId = nil
|
|
self:CalDragRange()
|
|
self:SetItemPos(mDrag.EventData.position)
|
|
self._mapNode.raySortItem.enabled = false
|
|
self._mapNode.rayDragEvent.enabled = false
|
|
EventManager.Hit("TowerDefenseItemDragStart", self.gameObject:GetInstanceID())
|
|
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
|
|
self:SetItemPos(mDrag.EventData.position)
|
|
local pointerObj = mDrag.EventData.pointerCurrentRaycast
|
|
if nil ~= pointerObj and nil ~= pointerObj.gameObject then
|
|
local nPointerInsId = pointerObj.gameObject:GetInstanceID()
|
|
if nPointerInsId ~= self.nLastPointerInsId then
|
|
self.nLastPointerInsId = nPointerInsId
|
|
EventManager.Hit("TowerDefenseItemDragging", self:GetItemBtnInstanceId(), nPointerInsId)
|
|
end
|
|
end
|
|
elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then
|
|
EventManager.Hit("TowerDefenseItemDragEnd")
|
|
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
|
|
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder)
|
|
self._mapNode.raySortItem.enabled = true
|
|
self._mapNode.rayDragEvent.enabled = true
|
|
end
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnBtnClick_EditorTeam()
|
|
EventManager.Hit("TowerDefense_EditorTeam")
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnTowerDefenseItemDragStart(objInsId)
|
|
self._mapNode.rayDragEvent.gameObject:SetActive(true)
|
|
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, true)
|
|
NovaAPI.SetCanvasSortingName(self.itemCanvas, AllEnum.SortingLayerName.UI)
|
|
if self.gameObject:GetInstanceID() ~= objInsId then
|
|
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
|
else
|
|
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 2)
|
|
end
|
|
end
|
|
function TowerDefenseSelectedCharCtrl:OnTowerDefenseItemDragEnd()
|
|
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
|
|
self._mapNode.rayDragEvent.gameObject:SetActive(false)
|
|
end
|
|
return TowerDefenseSelectedCharCtrl
|