Files
StellaSora_DataLua/lua/game/ui/towerdefense/towerdefenseselectedcharctrl.lua
SL1900 eafd8f4088 Update - 1.9.0.107
EN: 1.9.0.107
CN: 1.9.0.108
JP: 1.9.0.112
KR: 1.9.0.112
2026-05-14 16:00:00 +09:00

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