local SoldierSandtableCharItemCtrl = class("SoldierSandtableCharItemCtrl", BaseCtrl) local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData") local iconPath2 = "Icon/SoldierOtherIcon/" local chessAnimType = { PUTIN = 1, DRAGIN = 2, COMPOUND = 3, COMPOUND_OUT = 4, WARRIOR = 5 } local chessAnimName = { [chessAnimType.PUTIN] = "SoldierSupportCard_putin", [chessAnimType.DRAGIN] = "SoldierSupportCard_dragin", [chessAnimType.COMPOUND] = "SoldierSupportCard_compound", [chessAnimType.COMPOUND_OUT] = "SoldierSupportCard_compoundout", [chessAnimType.WARRIOR] = "SoldierSupportCard_warrior" } SoldierSandtableCharItemCtrl._mapNodeConfig = { btn_char = { sComponentName = "UIButton", callback = "OnBtnClick_Char" }, HaveStatus = {}, drag = { sNodeName = "HaveStatus", sComponentName = "UIDrag", callback = "OnUIDrag_Drag" }, trSortItem = { sNodeName = "HaveStatus", sComponentName = "RectTransform" }, raySortItem = { sNodeName = "HaveStatus", sComponentName = "Empty4Raycast" }, rayDragEvent = { sComponentName = "Empty4Raycast" }, SoldierCharacterCardItem = {}, AnimRoot = {}, ImgPutLightADD = {} } SoldierSandtableCharItemCtrl._mapEventConfig = { SoldierSandtableCharItemDragStart = "OnSoldierSandtableCharItemDragStart", SoldierSandtableCharItemDragging = "OnSoldierSandtableCharItemDragging", SoldierSandtableCharItemDragEnd = "OnSoldierSandtableCharItemDragEnd", SoldierExtraPartnerTagChange = "OnSoldierExtraPartnerTagChange", SoldierChessCanPutIn = "OneEvent_SoldierChessCanPutIn" } SoldierSandtableCharItemCtrl._mapRedDotConfig = {} function SoldierSandtableCharItemCtrl:Awake() self.chessData = nil self.itemCtrl = nil self.animRoot = self._mapNode.AnimRoot:GetComponent("Animator") end function SoldierSandtableCharItemCtrl:OnDisable() if self.itemCtrl ~= nil then self:UnbindCtrlByNode(self.itemCtrl) self.itemCtrl = nil end end function SoldierSandtableCharItemCtrl:SetData(chessData) self.levelData = PlayerData.SoldierData:GetCurLevelData() self.chessData = chessData self._mapNode.trSortItem.localPosition = Vector3(0, 0, 0) self._mapNode.ImgPutLightADD.gameObject:SetActive(false) if self.chessData == nil or self.chessData.nId == 0 then self._mapNode.HaveStatus.gameObject:SetActive(false) else if self.itemCtrl == nil then if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then self.itemCtrl = self:BindCtrlByNode(self._mapNode.SoldierCharacterCardItem, "Game.UI.Soldier.Template.Character.SoldierCharSupportCardItemCtrl") else self.itemCtrl = self:BindCtrlByNode(self._mapNode.SoldierCharacterCardItem, "Game.UI.Soldier.Template.Character.SoldierCharCardItemCtrl") end end self._mapNode.HaveStatus.gameObject:SetActive(true) if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then self.itemCtrl:SetItemData(self.chessData.nId) else self.itemCtrl:SetItemData(self.chessData.nId, true) end self.itemCtrl:SetStar(self.chessData.nStar) if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition then self.itemCtrl:SetChessPosition(GameEnum.SoldierPositionType.FightPosition) elseif chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then self.itemCtrl:SetChessPosition(GameEnum.SoldierPositionType.SupportPosition) end if chessData.nPositionType == GameEnum.SoldierPositionType.FightPosition or chessData.nPositionType == GameEnum.SoldierPositionType.SupportPosition then else end end self.itemCanvas = self.gameObject:GetComponent("Canvas") NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false) self._mapNode.rayDragEvent.gameObject:SetActive(false) end function SoldierSandtableCharItemCtrl:GetItemBtnInstanceId() return self._mapNode.rayDragEvent.gameObject:GetInstanceID() end function SoldierSandtableCharItemCtrl:SetPositionIndex(nIndex) self.nPositionIndex = nIndex local img_pos = self.gameObject.transform:Find("btn_pos/AnimRoot/img_pos"):GetComponent("Image") local btn_pos = self.gameObject.transform:Find("btn_pos"):GetComponent("UIButton") local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(self.nPositionIndex) local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId) if cfg then self:SetPngSprite(img_pos, iconPath2 .. cfg.Icon) end btn_pos.onClick:RemoveAllListeners() btn_pos.onClick:AddListener(function() EventManager.Hit("ShowSoldierPositionEffect", self.nPositionIndex) end) end function SoldierSandtableCharItemCtrl:SetDetailRoot(tr) self.trDetailRoot = tr end function SoldierSandtableCharItemCtrl:SetItemPos(dragPos) local localPos = GameUIUtils.ScreenPointToLocalPoint(dragPos, self.gameObject.transform) self._mapNode.trSortItem.localPosition = Vector3(localPos.x, localPos.y, 0) end function SoldierSandtableCharItemCtrl:InitSortingOrder(nSortOrder) self.nInitSortingOrder = nSortOrder end function SoldierSandtableCharItemCtrl:CheckLimitAction() return self.levelData:CheckSandTableDisable() end function SoldierSandtableCharItemCtrl:SetAnimator(nAnimType) if self.itemCtrl == nil then return end local anim = self.itemCtrl:GetAnimator() if anim == nil then return end anim:Play(chessAnimName[nAnimType]) end function SoldierSandtableCharItemCtrl:OnUIDrag_Drag(mDrag) if self:CheckLimitAction() then EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Sandtable_TemporaryReturn_Tips")) return end if self.chessData.nId <= 0 then return end if mDrag.DragEventType == AllEnum.UIDragType.DragStart then self.nLastPointerInsId = nil self:SetItemPos(mDrag.EventData.position) self._mapNode.raySortItem.enabled = false self._mapNode.rayDragEvent.enabled = false self._mapNode.btn_char.gameObject:SetActive(false) EventManager.Hit("SoldierSandtableCharItemDragStart", self:GetItemBtnInstanceId()) 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("SoldierSandtableCharItemDragging", self:GetItemBtnInstanceId(), nPointerInsId) end end elseif mDrag.DragEventType == AllEnum.UIDragType.DragEnd then 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("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), nPointerInsId) else EventManager.Hit("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), nPointerInsId) end else EventManager.Hit("SoldierSandtableCharItemDragEnd", self:GetItemBtnInstanceId(), 0) end NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false) NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder) self._mapNode.raySortItem.enabled = true self._mapNode.rayDragEvent.enabled = true self._mapNode.btn_char.gameObject:SetActive(true) end end function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragStart(objInsId) self._mapNode.rayDragEvent.gameObject:SetActive(true) NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, true) NovaAPI.SetCanvasSortingName(self.itemCanvas, AllEnum.SortingLayerName.UI) if self:GetItemBtnInstanceId() ~= objInsId then NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1) else NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 2) end end function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragging(objInsId, targetInsId) if targetInsId == self:GetItemBtnInstanceId() then self._mapNode.ImgPutLightADD.gameObject:SetActive(true) else self._mapNode.ImgPutLightADD.gameObject:SetActive(false) end end function SoldierSandtableCharItemCtrl:OnSoldierSandtableCharItemDragEnd() NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1) self._mapNode.rayDragEvent.gameObject:SetActive(false) end function SoldierSandtableCharItemCtrl:OnSoldierExtraPartnerTagChange() if self.chessData ~= nil and self.chessData.nId ~= 0 and self.animRoot ~= nil then local tbTags = PlayerData.SoldierData:GetCurLevelData():GetExtraPartnerTags(self.chessData.nId) if tbTags ~= nil then end end end function SoldierSandtableCharItemCtrl:OnBtnClick_Char() if self.chessData.nId <= 0 then return end local nPositionType = self.chessData.nPositionType if nPositionType == 0 or nPositionType == nil then nPositionType = AllEnum.SoldierPositionType.Waiting end local tbDeploy, _, _ = self.levelData:GetDeploy() local tbPartner, tbUIData = SoldierAttrData.CalcActivePartners(tbDeploy) local chessData = { nId = self.chessData.nId, nStar = self.chessData.nStar, nPositionType = nPositionType } local tr = self.trDetailRoot if tr == nil then tr = self.gameObject.transform end if nPositionType == AllEnum.SoldierPositionType.Waiting then EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, tr, chessData) else EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, tr, chessData, tbDeploy, tbPartner) end EventManager.Hit("OnSetTipsPosition", tr:GetChild(0).position, tr:GetChild(1).position, tr:GetChild(2).position) end function SoldierSandtableCharItemCtrl:OneEvent_SoldierChessCanPutIn(bCanPutIn) local img_input = self.gameObject.transform:Find("EmptyStatus/imgPut") local ImgPutLight = self.gameObject.transform:Find("EmptyStatus/ImgPutLight") if img_input == nil then return end if bCanPutIn then img_input.gameObject:SetActive(true) ImgPutLight.gameObject:SetActive(true) else img_input.gameObject:SetActive(false) ImgPutLight.gameObject:SetActive(false) end end return SoldierSandtableCharItemCtrl