Update - 1.13.0.124

EN: 1.13.0.124
CN: 1.13.0.124
JP: 1.13.0.128
KR: 1.13.0.130
This commit is contained in:
SL1900
2026-07-21 12:30:00 +09:00
parent a12087abad
commit 8c4bd41668
1334 changed files with 873026 additions and 95164 deletions
@@ -0,0 +1,79 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local SoldierBuffCtrl = class("SoldierBuffCtrl", BaseCtrl)
SoldierBuffCtrl._mapNodeConfig = {
BigBuffItem = {
sNodeName = "BigBuff",
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierBuffItemCtrl"
},
sv_buff = {
sComponentName = "LoopScrollView"
},
smallBuff = {
sNodeName = "buff",
nCount = 20,
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierBuffItemCtrl"
},
imgLineRoot = {},
goBuffRoot = {
sComponentName = "RectTransform"
}
}
SoldierBuffCtrl._mapEventConfig = {}
SoldierBuffCtrl._mapRedDotConfig = {}
function SoldierBuffCtrl:Awake()
end
function SoldierBuffCtrl:OnEnable()
end
function SoldierBuffCtrl:OnDisable()
end
function SoldierBuffCtrl:OnDestroy()
end
function SoldierBuffCtrl:RefreshBuff()
self._nStarterCardId = 0
self._tbStrategyCardIds = {}
self.tbBuffCfgs = {}
if self.btn_detail == nil then
self.btn_detail = self.gameObject:GetComponent("UIButton")
end
local levelData = PlayerData.SoldierData:GetCurLevelData()
local tbStarterCard, tbStrategyCard = levelData:GetCardData()
if tbStarterCard == nil or #tbStarterCard == 0 then
self._mapNode.goBuffRoot.gameObject:SetActive(false)
return
end
self._mapNode.goBuffRoot.gameObject:SetActive(true)
self._nStarterCardId = tbStarterCard[1].nId
self._tbStrategyCardIds = tbStrategyCard
local cfg = ConfigTable.GetData("SoldierStarterCard", self._nStarterCardId)
table.insert(self.tbBuffCfgs, cfg)
for k, v in ipairs(self._tbStrategyCardIds) do
local cfg = ConfigTable.GetData("SoldierStrategyCard", v.nId)
table.insert(self.tbBuffCfgs, cfg)
end
self.btn_detail.onClick:RemoveAllListeners()
self.btn_detail.onClick:AddListener(function()
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierBuffTipsPanel, self.tbBuffCfgs)
end)
self:_RefreshBuffItems()
end
function SoldierBuffCtrl:_RefreshBuffItems()
self._mapNode.imgLineRoot.gameObject:SetActive(#self._tbStrategyCardIds > 0)
if self._mapNode.BigBuffItem ~= nil then
local cfg = ConfigTable.GetData("SoldierStarterCard", self._nStarterCardId)
self._mapNode.BigBuffItem:SetData(cfg)
end
for k, v in ipairs(self._mapNode.smallBuff) do
v.gameObject:SetActive(false)
end
for k, v in ipairs(self._tbStrategyCardIds) do
if self._mapNode.smallBuff[k] ~= nil then
local cfg = ConfigTable.GetData("SoldierStrategyCard", v.nId)
self._mapNode.smallBuff[k]:SetData(cfg)
self._mapNode.smallBuff[k].gameObject:SetActive(true)
end
end
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.goBuffRoot)
end
function SoldierBuffCtrl:RefreshBuffItem(goGrid, gridIndex)
end
return SoldierBuffCtrl
@@ -0,0 +1,72 @@
local BaseCtrl = require("GameCore.UI.BaseCtrl")
local SoldierBuffTipsCtrl = class("SoldierBuffTipsCtrl", BaseCtrl)
SoldierBuffTipsCtrl._mapNodeConfig = {
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
loopTips = {
sComponentName = "LoopScrollView",
sNodeName = "sv"
},
grid = {
sComponentName = "RectTransform"
}
}
SoldierBuffTipsCtrl._mapEventConfig = {}
local RootPath = "Icon/SoldierBuffCard/"
local bgPath = "Icon/SoldierOtherIcon/"
local initHeight = 90.85
local gridHeight = 224
function SoldierBuffTipsCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.tbBuffCfgs = param[1] or {}
end
end
function SoldierBuffTipsCtrl:OnEnable()
self:RefreshBuffTips()
end
function SoldierBuffTipsCtrl:RefreshBuffTips()
self:CalBuffHeight()
self._mapNode.loopTips:InitEx(self.tbBuffHeight, self, self.RefreshBuffTipsItem)
end
function SoldierBuffTipsCtrl:CalBuffHeight()
self.tbBuffHeight = {}
for i, cfg in ipairs(self.tbBuffCfgs) do
local buffItem = self._mapNode.grid.transform:Find("btnGrid/AnimRoot/BuffItem")
local TextName = buffItem.transform:Find("imgItemBg/TextName"):GetComponent("TMP_Text")
local imgItemBg = buffItem.transform:Find("imgItemBg"):GetComponent("RectTransform")
NovaAPI.SetTMPText(TextName, cfg.Desc)
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(imgItemBg)
local nHeight = imgItemBg.sizeDelta.y - initHeight
table.insert(self.tbBuffHeight, nHeight + gridHeight)
end
end
function SoldierBuffTipsCtrl:RefreshBuffTipsItem(grid, gridIndex)
gridIndex = gridIndex + 1
local cfg = self.tbBuffCfgs[gridIndex]
if cfg then
local buffItem = grid.transform:Find("btnGrid/AnimRoot/BuffItem")
local txtTitle = buffItem.transform:Find("txtTitle"):GetComponent("TMP_Text")
local ImageIcon = buffItem.transform:Find("ImageIcon"):GetComponent("Image")
local TextName = buffItem.transform:Find("imgItemBg/TextName"):GetComponent("TMP_Text")
local ImageIconBg = buffItem.transform:Find("ImageIconBg"):GetComponent("Image")
NovaAPI.SetTMPText(txtTitle, cfg.Name)
self:SetPngSprite(ImageIcon, RootPath .. cfg.Icon)
NovaAPI.SetTMPText(TextName, cfg.Desc)
if cfg.Rarity ~= 0 then
self:SetPngSprite(ImageIconBg, bgPath .. AllEnum.SoldierStrategyCardRarityIcon[cfg.Rarity] .. AllEnum.SoldierChessIconSurfix.S)
end
local ImageLine = buffItem.transform:Find("imgItemBg/imgLine").gameObject
ImageLine:SetActive(gridIndex == 1 and 1 < #self.tbBuffCfgs)
end
end
function SoldierBuffTipsCtrl:OnDisable()
end
function SoldierBuffTipsCtrl:OnDestroy()
end
function SoldierBuffTipsCtrl:OnBtnClick_Close()
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierBuffTipsPanel)
end
return SoldierBuffTipsCtrl
@@ -0,0 +1,20 @@
local BasePanel = require("GameCore.UI.BasePanel")
local SoldierBuffTipsPanel = class("SoldierBuffTipsPanel", BasePanel)
SoldierBuffTipsPanel._bIsMainPanel = false
SoldierBuffTipsPanel._tbDefine = {
{
sPrefabPath = "Soldier/Tips/SoldierBuffTips.prefab",
sCtrlName = "Game.UI.Soldier.Sandtable.Components.SoldierBuffTipsCtrl"
}
}
function SoldierBuffTipsPanel:Awake()
end
function SoldierBuffTipsPanel:OnEnable()
end
function SoldierBuffTipsPanel:OnDisable()
end
function SoldierBuffTipsPanel:OnDestroy()
end
function SoldierBuffTipsPanel:OnRelease()
end
return SoldierBuffTipsPanel
@@ -0,0 +1,32 @@
local iconPath2 = "Icon/SoldierOtherIcon/"
local SoldierEffectDesCtrl = class("SoldierEffectDesCtrl", BaseCtrl)
SoldierEffectDesCtrl._mapNodeConfig = {
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Soldier_Sandtable_PositionEffect"
},
ImageIcon = {sComponentName = "Image"},
TextDes = {sComponentName = "TMP_Text"},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
}
}
SoldierEffectDesCtrl._mapEventConfig = {}
SoldierEffectDesCtrl._mapRedDotConfig = {}
function SoldierEffectDesCtrl:HideTips()
self.gameObject:SetActive(false)
end
function SoldierEffectDesCtrl:ShowTips(nPositionIndex)
self.gameObject:SetActive(true)
local nCfgId = PlayerData.SoldierData:GetSoldierPositionEffectDataId(nPositionIndex)
local cfg = ConfigTable.GetData("SoldierPositionEffect", nCfgId)
if cfg then
self:SetPngSprite(self._mapNode.ImageIcon, iconPath2 .. cfg.Icon)
NovaAPI.SetTMPText(self._mapNode.TextDes, cfg.KeyEffectDes)
end
end
function SoldierEffectDesCtrl:OnBtnClick_Close()
self:HideTips()
end
return SoldierEffectDesCtrl
@@ -0,0 +1,37 @@
local SoldierNodeTipsCtrl = class("SoldierNodeTipsCtrl", BaseCtrl)
local AssetRoot = "Icon/SoldierOtherIcon/"
SoldierNodeTipsCtrl._mapNodeConfig = {
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtTitle = {
sComponentName = "TMP_Text",
sLanguageId = "SoldierNodeTips_Title"
},
Item = {nCount = 4}
}
SoldierNodeTipsCtrl._mapEventConfig = {}
SoldierNodeTipsCtrl._mapRedDotConfig = {}
function SoldierNodeTipsCtrl:Awake()
for i = 1, 4 do
local item = self._mapNode.Item[i]
local imageIcon = item.transform:Find("ImageIcon"):GetComponent("Image")
local textName = item.transform:Find("TextName"):GetComponent("TMP_Text")
local nodeConfig = AllEnum.SoliderNoteTypeCfg[i]
if nodeConfig then
self:SetPngSprite(imageIcon, AssetRoot .. nodeConfig.Icon)
NovaAPI.SetTMPText(textName, ConfigTable.GetUIText(nodeConfig.Language))
end
end
end
function SoldierNodeTipsCtrl:OpenNodeTips(nodeInfo)
self.gameObject:SetActive(true)
end
function SoldierNodeTipsCtrl:HideNodeTips()
self.gameObject:SetActive(false)
end
function SoldierNodeTipsCtrl:OnBtnClick_Close()
self:HideNodeTips()
end
return SoldierNodeTipsCtrl
@@ -0,0 +1,226 @@
local SoldierShopCtrl = class("SoldierShopCtrl", BaseCtrl)
SoldierShopCtrl._mapNodeConfig = {
btn_CloseShop = {
sComponentName = "UIButton",
callback = "OnBtnClick_CloseShop"
},
SoldierCharCardShopItem = {
nCount = 5,
sCtrlName = "Game.UI.Soldier.Sandtable.Items.SoldierCharCardShopItemCtrl"
},
btnRefreshShop = {
sComponentName = "UIButton",
callback = "OnBtnClick_RefreshShop"
},
txtBtnRefreshShop = {sComponentName = "TMP_Text"},
imgBtnRefreshShopMask = {},
goCoinRaidUnlock = {},
txtRefreshCount = {sComponentName = "TMP_Text"},
goCoinRaidFree = {},
txtRefreshFreeCount = {sComponentName = "TMP_Text"},
btnLock = {
sComponentName = "UIButton",
callback = "OnBtnClick_Lock"
},
imgLocked = {},
imgUnlocked = {},
goProbabilityBarItem = {nCount = 5},
imgTickets = {},
btn_Probability = {
sComponentName = "UIButton",
callback = "OnBtnClick_Probability"
}
}
SoldierShopCtrl._mapEventConfig = {
SoldierItemChange = "OnEvent_SoldierItemChange"
}
SoldierShopCtrl._mapRedDotConfig = {}
function SoldierShopCtrl:OnEnable()
self.nFreeCount = 0
self.nReRollPrice = 0
self.levelData = PlayerData.SoldierData:GetCurLevelData()
self.timer = nil
end
function SoldierShopCtrl:OnDisable()
if self.timer ~= nil then
self.timer:_Stop()
self.timer = nil
end
end
function SoldierShopCtrl:ShowShopPanel()
if self.levelData == nil then
self.levelData = PlayerData.SoldierData:GetCurLevelData()
end
self:RefreshShopData()
self.gameObject:SetActive(true)
end
function SoldierShopCtrl:RefreshShopData()
local shopData = self.levelData:GetShopData()
if shopData == nil then
return
end
self.tbChessData = shopData.tbGoods
self.tbProbability = shopData.tbWeightList
self.bLock = shopData.bLock
self.nFreeCount = shopData.nFreeCount
self.nReRollPrice = shopData.nReRollPrice
self.bDisablePurchase = shopData.bDisablePurchase
self.bDisableRefresh = shopData.bDisableRefresh
self:RefreshRefreshBtnState()
self:RefreshGoodsData()
self:RefreshProbabilityData()
self:RefreshTicketsData()
self._mapNode.imgLocked:SetActive(self.bLock)
self._mapNode.imgUnlocked:SetActive(not self.bLock)
EventManager.Hit("RefreshPurchaseExpPrice")
end
function SoldierShopCtrl:HideShopPanel()
self.gameObject:SetActive(false)
end
function SoldierShopCtrl:RefreshRefreshBtnState()
self._mapNode.imgBtnRefreshShopMask.gameObject:SetActive(self.bDisableRefresh)
self._mapNode.goCoinRaidUnlock.gameObject:SetActive(self.nFreeCount <= 0 and not self.bDisableRefresh)
self._mapNode.goCoinRaidFree.gameObject:SetActive(self.nFreeCount > 0 and not self.bDisableRefresh)
NovaAPI.SetTMPText(self._mapNode.txtRefreshFreeCount, self.nFreeCount)
local sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh")
if self.bDisableRefresh then
sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh_Disable")
elseif self.nFreeCount > 0 then
sBtn = ConfigTable.GetUIText("Soldier_Shop_Refresh_Free")
end
NovaAPI.SetTMPText(self._mapNode.txtBtnRefreshShop, sBtn)
end
function SoldierShopCtrl:RefreshGoodsData()
local tbGoodsData = {
nil,
nil,
nil,
nil,
nil
}
for i = 1, 5 do
if self.tbChessData[i] ~= nil then
local bCombine = false
local nNextStar = 0
if self.tbChessData[i].Id ~= 0 then
bCombine, nNextStar = self.levelData:CheckSoldierCombine(self.tbChessData[i].Id, self.tbChessData[i].Star)
end
if nNextStar == 0 and 1 < self.tbChessData[i].Star then
nNextStar = self.tbChessData[i].Star
end
tbGoodsData[i] = {
nCharId = self.tbChessData[i].Id,
nStar = nNextStar,
nCost = self.tbChessData[i].Price
}
end
end
for i = 1, 5 do
self._mapNode.SoldierCharCardShopItem[i]:SetData(tbGoodsData[i].nCharId, tbGoodsData[i].nCost, tbGoodsData[i].nStar, self.bDisablePurchase)
self._mapNode.SoldierCharCardShopItem[i]:SetClickCallback(_, function()
self:OnBtnClick_Char(i)
end)
end
end
function SoldierShopCtrl:RefreshProbabilityData()
for i = 1, 5 do
local TextRatio = self._mapNode.goProbabilityBarItem[i].transform:Find("TextRatio"):GetComponent("TMP_Text")
local goFx = self._mapNode.goProbabilityBarItem[i].transform:Find("Fx_Upgrade")
local nWeight = self.tbProbability[i].nWeight
local bDouble = self.tbProbability[i].bDouble
NovaAPI.SetTMPText(TextRatio, tostring(nWeight) .. "%")
goFx.gameObject:SetActive(bDouble)
end
end
function SoldierShopCtrl:RefreshTicketsData()
self._mapNode.imgTickets:SetActive(self.nFreeCount <= 0)
if self.nFreeCount > 0 then
NovaAPI.SetTMPText(self._mapNode.txtRefreshCount, tostring(self.nFreeCount))
else
NovaAPI.SetTMPText(self._mapNode.txtRefreshCount, tostring(self.nReRollPrice))
end
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
if coinCount < self.nReRollPrice then
NovaAPI.SetTMPColor(self._mapNode.txtRefreshCount, Color(0.8431372549019608, 0.3568627450980392, 0.4392156862745098, 1))
else
NovaAPI.SetTMPColor(self._mapNode.txtRefreshCount, Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764, 1))
end
end
function SoldierShopCtrl:OnBtnClick_CloseShop()
self:HideShopPanel()
EventManager.Hit("SoldierShopClose")
end
function SoldierShopCtrl:OnBtnClick_Lock()
self.levelData:SendShopLock(not self.bLock, function()
self.bLock = not self.bLock
self._mapNode.imgLocked:SetActive(self.bLock)
self._mapNode.imgUnlocked:SetActive(not self.bLock)
end)
end
function SoldierShopCtrl:OnBtnClick_RefreshShop()
if self.bDisableRefresh then
return
end
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
if coinCount < self.nReRollPrice and self.nFreeCount <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_BuyExp_Tips2"))
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_refresh_poor")
return
end
self.levelData:SendShopRefresh(function(callbackData)
EventManager.Hit("SoldierShopRefresh")
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_refresh")
if self.timer ~= nil then
self.timer:_Stop()
self.timer = nil
end
local data = callbackData.shopBecomeAnother
if callbackData.shopBecomeAnother ~= nil then
self._mapNode.SoldierCharCardShopItem[data.nGoodsIndex]:PlayRandomRefreshOneShot()
end
EventManager.Hit("SoldierSandtableRefreshStep", callbackData.tbChessChangeStep)
self.timer = self:AddTimer(1, 0.23, function()
self:RefreshShopData()
end, true, true, true)
end)
end
function SoldierShopCtrl:OnBtnClick_Char(nIndex)
local chessData = self.tbChessData[nIndex]
if chessData == nil then
return
end
if chessData.Id == 0 then
return
end
local coinCount = self.levelData:GetItem(AllEnum.CoinItemId.SoldierCurrency)
if coinCount < chessData.Price then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_InsufficientCoin_Tips"))
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_buy_poor")
return
end
local _, tbWaiting, _ = self.levelData:GetDeploy()
local bWaitingMax = true
for _, v in ipairs(tbWaiting) do
if v.nId == 0 then
bWaitingMax = false
break
end
end
local bCombine, _ = self.levelData:CheckSoldierCombine(chessData.Id, chessData.Star)
if bWaitingMax and not bCombine then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_OverBench_Tips"))
return
end
self.levelData:SendShopPurchase(nIndex, function(tbChange)
CS.WwiseAudioManager.Instance:PostEvent("mode_900001_chess_shop_buy")
self:RefreshShopData()
EventManager.Hit("SoldierCharItemChange", tbChange.tbChessChangeStep, self._mapNode.SoldierCharCardShopItem[nIndex].gameObject.transform)
end)
end
function SoldierShopCtrl:OnBtnClick_Probability()
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierShopProbabilityPanel)
end
function SoldierShopCtrl:OnEvent_SoldierItemChange()
self:RefreshTicketsData()
end
return SoldierShopCtrl
@@ -0,0 +1,29 @@
local SoldierBuffItemCtrl = class("SoldierBuffItemCtrl", BaseCtrl)
local RootPath = "Icon/SoldierBuffCard/"
local bgPath = "Icon/SoldierOtherIcon/"
SoldierBuffItemCtrl._mapNodeConfig = {
imgIcon = {sComponentName = "Image"},
imgBg = {sComponentName = "Image"}
}
SoldierBuffItemCtrl._mapEventConfig = {}
SoldierBuffItemCtrl._mapRedDotConfig = {}
function SoldierBuffItemCtrl:Awake()
end
function SoldierBuffItemCtrl:OnEnable()
end
function SoldierBuffItemCtrl:OnDisable()
end
function SoldierBuffItemCtrl:OnDestroy()
end
function SoldierBuffItemCtrl:SetData(mapCfg)
if mapCfg == nil then
return
end
self:SetPngSprite(self._mapNode.imgIcon, RootPath .. mapCfg.Icon)
if mapCfg.Rarity ~= 0 then
self:SetPngSprite(self._mapNode.imgBg, bgPath .. AllEnum.SoldierStrategyCardRarityIcon[mapCfg.Rarity] .. AllEnum.SoldierChessIconSurfix.S)
end
end
function SoldierBuffItemCtrl:OnRefresh()
end
return SoldierBuffItemCtrl
@@ -0,0 +1,13 @@
local SoldierBuffTipsItemCtrl = class("SoldierBuffTipsItemCtrl", BaseCtrl)
SoldierBuffTipsItemCtrl._mapEventConfig = {}
SoldierBuffTipsItemCtrl._mapRedDotConfig = {}
function SoldierBuffTipsItemCtrl:OnRefresh(mapCfg)
if mapCfg == nil then
return
end
self:SetPngSprite(self._mapNode.ImageIcon, mapCfg.Icon)
NovaAPI.SetTMPText(self._mapNode.TextName, mapCfg.Name or "")
local sDes = mapCfg.Desc or mapCfg.Des or ""
NovaAPI.SetTMPText(self._mapNode.TextDes, sDes)
end
return SoldierBuffTipsItemCtrl
@@ -0,0 +1,323 @@
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
local SoldierCharCardShopItemCtrl = class("SoldierCharCardShopItemCtrl", BaseCtrl)
local SYNERGY_TEMPLATE_PATH = "Game.UI.Soldier.Sandtable.Items.SoldierCharCardShopPartnerItemCtrl"
local _DestroyNode = function(node)
if node == nil then
return
end
if node.IsNull ~= nil and node:IsNull() == true then
return
end
destroy(node.gameObject or node)
end
SoldierCharCardShopItemCtrl._mapNodeConfig = {
imgUpgradeStar = {nCount = 5},
imgUpgrade = {},
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnItemClick"
},
imgSelect = {},
imageRarity = {sComponentName = "Image"},
imgEmpty = {},
Container = {},
txtShopName = {sComponentName = "TMP_Text"},
txtCharName = {sComponentName = "TMP_Text"},
ImageIcon = {sComponentName = "Image"},
imgPosition = {},
img_Position = {sComponentName = "Image"},
imgRecommend = {sComponentName = "Image"},
imgUnavailable = {},
imgInHand = {},
txtCost = {sComponentName = "TMP_Text"},
goSynergyRoot = {
sComponentName = "RectTransform"
},
SynergyTemplate = {},
animRoot = {sNodeName = "AnimRoot", sComponentName = "Animator"},
FxCard_Random = {sComponentName = "Animator"}
}
SoldierCharCardShopItemCtrl._mapEventConfig = {
SoldierCharCardShopItemClicked = "OnEvent_SoldierCharCardShopItemClicked",
SoldierRecommend_Update = "SetTrackAndRecommend",
SoldierPartnerTrace = "SetTrackAndRecommend",
SoldierShopRefresh = "OnShopRefresh"
}
SoldierCharCardShopItemCtrl._mapRedDotConfig = {}
function SoldierCharCardShopItemCtrl:Awake()
self.nSlotIndex = 0
self.fnClickHost = nil
self.fnClickFunc = nil
self._tbSynergyItemCtrl = {}
self._tbSynergyItemGo = {}
self._mapNode.FxCard_Random.gameObject:SetActive(false)
end
function SoldierCharCardShopItemCtrl:OnEnable()
end
function SoldierCharCardShopItemCtrl:OnDisable()
self:SetEmpty()
end
function SoldierCharCardShopItemCtrl:OnDestroy()
self._objClickCallback = nil
self._fnClickCallback = nil
end
function SoldierCharCardShopItemCtrl:SetSlotIndex(nIndex)
self.nSlotIndex = nIndex
end
function SoldierCharCardShopItemCtrl:SetClickCallback(host, func)
self._objClickCallback = host
self._fnClickCallback = func
end
function SoldierCharCardShopItemCtrl:SetData(nCharId, nCost, nStar, bDisablePurchase)
self.nCharId = nCharId
if nCharId == nil or nCharId <= 0 then
self:SetEmpty()
return
end
local mapChar = ConfigTable.GetData("SoldierCharacter", nCharId)
if mapChar == nil then
self:SetEmpty()
return
end
self:SetNodeActive(self._mapNode.imgEmpty, false)
self:SetNodeActive(self._mapNode.Container, true)
self:RefreshBaseCard(mapChar)
self:SetInHand(nStar)
if nStar ~= nil then
self:SetUpgradeHint(nStar or 0)
end
local mapShopData
ForEachTableLine(DataTable.SoldierShopPool, function(mapData)
if mapData.ChessCharacterId == nCharId then
mapShopData = mapData
end
end)
if mapShopData ~= nil then
local nHasMoney = PlayerData.SoldierData:GetCurLevelData():GetItem(AllEnum.CoinItemId.SoldierCurrency)
self:SetAvailable(nHasMoney >= (nCost or 0) and not bDisablePurchase)
local sCost = tostring(nCost or 0)
if nHasMoney < (nCost or 0) then
sCost = "<color=#E15C73>" .. sCost .. "</color>"
end
self:SetCost(sCost)
end
self:RefreshSynergy()
end
function SoldierCharCardShopItemCtrl:SetEmpty()
self.nCharId = nil
self:SetNodeActive(self._mapNode.imgEmpty or self._mapNode.EmptyContainer or self._mapNode.imgEmpty, true)
self:SetNodeActive(self._mapNode.Container, false)
self:ResetAllStates()
end
function SoldierCharCardShopItemCtrl:ResetAllStates()
self:SetNodeActive(self._mapNode.imgRecommend, false)
self:SetNodeActive(self._mapNode.imgUnavailable, false)
self:SetNodeActive(self._mapNode.imgInHand, false)
self:SetNodeActive(self._mapNode.imgPosition, false)
self:SetUpgradeHint(0)
self:_ClearSynergyItems()
end
function SoldierCharCardShopItemCtrl:RefreshBaseCard(mapChar)
NovaAPI.SetTMPText(self._mapNode.txtShopName, mapChar.Name or "")
NovaAPI.SetTMPText(self._mapNode.txtCharName, mapChar.Name or "")
local mapSkin = ConfigTable.GetData("SoldierSkin", mapChar.Skin)
if mapSkin ~= nil then
self:SetPngSprite(self._mapNode.ImageIcon, mapSkin.Icon .. AllEnum.SoldierChessIconSurfix.L)
end
self:SetChessPosition(mapChar.Type)
self:SetRarity(mapChar.Rarity)
self:SetTrackAndRecommend()
end
function SoldierCharCardShopItemCtrl:SetRarity(nRarity)
if nRarity == nil then
return
end
self:SetPngSprite(self._mapNode.imageRarity, "Icon/SoldierOtherIcon/" .. AllEnum.SoldierChessRarityIcon[nRarity] .. AllEnum.SoldierChessIconSurfix.L)
end
function SoldierCharCardShopItemCtrl:SetChessPosition(nType)
self._mapNode.imgPosition.gameObject:SetActive(true)
if nType == nil then
return
end
local tbChessTypeConfig = CacheTable.GetData("_SoldierChessType", nType)
local sIcon = ""
if tbChessTypeConfig ~= nil then
sIcon = tbChessTypeConfig.Icon
end
local sPath = "Icon/SoldierOtherIcon/" .. sIcon
self:SetPngSprite(self._mapNode.img_Position, sPath)
end
function SoldierCharCardShopItemCtrl:SetTrackAndRecommend()
if self.nCharId == nil then
return
end
self._mapNode.imgRecommend.gameObject:SetActive(true)
local levelData = PlayerData.SoldierData:GetCurLevelData()
if levelData == nil then
self._mapNode.imgRecommend.gameObject:SetActive(false)
return
end
local bTrack = levelData:CheckChessTrace(self.nCharId)
local bRecommend = PlayerData.SoldierData:CheckChessRecommendState(self.nCharId)
local sIcon = ""
if bRecommend and bTrack then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_03"
elseif bTrack then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_02"
elseif bRecommend then
sIcon = "Icon/SoldierOtherIcon/SoldierPartnerBuilds_01"
else
self._mapNode.imgRecommend.gameObject:SetActive(false)
end
if sIcon ~= "" then
self:SetPngSprite(self._mapNode.imgRecommend, sIcon)
end
end
function SoldierCharCardShopItemCtrl:SetInHand(nStar)
if nStar ~= nil and 2 <= nStar then
self:SetNodeActive(self._mapNode.imgInHand, true)
return
end
local tbDeploy, tbWaiting, _ = PlayerData.SoldierData:GetCurLevelData():GetDeploy()
local bInHand = false
for k, v in pairs(tbDeploy) do
if v.nId == self.nCharId then
bInHand = true
break
end
end
if bInHand == false then
for k, v in pairs(tbWaiting) do
if v.nId == self.nCharId then
bInHand = true
break
end
end
end
self:SetNodeActive(self._mapNode.imgInHand, bInHand)
end
function SoldierCharCardShopItemCtrl:SetUpgradeHint(nStar)
nStar = nStar or 0
if nStar < 2 then
nStar = 0
end
if nStar == 0 then
self:SetNodeActive(self._mapNode.imgUpgrade, false)
return
else
self:SetNodeActive(self._mapNode.imgUpgrade, true)
end
for i = 1, 5 do
self:SetNodeActive(self._mapNode.imgUpgradeStar and self._mapNode.imgUpgradeStar[i], nStar >= i)
end
end
function SoldierCharCardShopItemCtrl:SetAvailable(bAvailable)
self:SetNodeActive(self._mapNode.imgUnavailable, not bAvailable)
end
function SoldierCharCardShopItemCtrl:SetCost(sCost)
NovaAPI.SetTMPText(self._mapNode.txtCost, sCost)
end
function SoldierCharCardShopItemCtrl:SetSelect(bSelect)
self:SetNodeActive(self._mapNode.imgSelect, bSelect)
end
function SoldierCharCardShopItemCtrl:GetAnimator()
if self._mapNode.animRoot == nil then
self._mapNode.animRoot = self.gameObejct.transform:GetChild(0):GetChild(0):GetComponent("Animator")
if self._mapNode.animRoot == nil then
return nil
end
end
return self._mapNode.animRoot
end
function SoldierCharCardShopItemCtrl:PlayRandomRefreshOneShot()
if self.timerRandomRefresh ~= nil then
self.timerRandomRefresh:Cancel()
self.timerRandomRefresh = nil
self._mapNode.FxCard_Random.gameObject:SetActive(false)
end
self._mapNode.FxCard_Random.gameObject:SetActive(true)
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.FxCard_Random, {
"ShopCardItem_random"
})
self.timerRandomRefresh = self:AddTimer(1, nAnimLength, function()
self._mapNode.FxCard_Random.gameObject:SetActive(false)
end, true, true, true)
end
function SoldierCharCardShopItemCtrl:RefreshSynergy()
self:_ClearSynergyItems()
self:SetNodeActive(self._mapNode.SynergyTemplate, false)
local tbPartnerTypes = SoldierAttrData.GetPartnerGroupsByChessId(self.nCharId)
if tbPartnerTypes == nil or #tbPartnerTypes == 0 then
self:SetNodeActive(self._mapNode.goSynergyRoot, false)
return
end
local goTemplate = self._mapNode.SynergyTemplate
local goRoot = self._mapNode.goSynergyRoot
if goTemplate == nil or goRoot == nil then
return
end
self:SetNodeActive(goRoot, true)
local trParent = goRoot.transform or goRoot
local nItemCount = 0
for _, nPartnerType in ipairs(tbPartnerTypes) do
local mapGroup = CacheTable.GetData("_SoldierPartnerGroup", nPartnerType)
if mapGroup ~= nil then
local goItem = instantiate(goTemplate, trParent)
self:SetNodeActive(goItem, true)
local ctrl = self:BindCtrlByNode(goItem, SYNERGY_TEMPLATE_PATH)
if ctrl ~= nil then
ctrl:OnRefresh(mapGroup)
nItemCount = nItemCount + 1
self._tbSynergyItemCtrl = self._tbSynergyItemCtrl or {}
self._tbSynergyItemGo = self._tbSynergyItemGo or {}
table.insert(self._tbSynergyItemCtrl, ctrl)
table.insert(self._tbSynergyItemGo, goItem)
else
_DestroyNode(goItem)
end
end
end
self:SetNodeActive(goRoot, 0 < nItemCount)
end
function SoldierCharCardShopItemCtrl:_ClearSynergyItems()
local tbSynergyItemCtrl = self._tbSynergyItemCtrl or {}
for _, ctrl in ipairs(tbSynergyItemCtrl) do
self:UnbindCtrlByNode(ctrl)
end
local tbSynergyItemGo = self._tbSynergyItemGo or {}
for _, goItem in ipairs(tbSynergyItemGo) do
_DestroyNode(goItem)
end
self._tbSynergyItemCtrl = {}
self._tbSynergyItemGo = {}
end
function SoldierCharCardShopItemCtrl:SetNodeActive(node, bActive)
if node == nil then
return
end
if node.gameObject ~= nil then
node.gameObject:SetActive(bActive)
else
node:SetActive(bActive)
end
end
function SoldierCharCardShopItemCtrl:OnBtnItemClick()
if self._fnClickCallback ~= nil and self.nCharId ~= nil then
self._fnClickCallback(self._objClickCallback, self.nCharId)
end
end
function SoldierCharCardShopItemCtrl:OnEvent_SoldierCharCardShopItemClicked(nCharId)
if nCharId == nil then
self:SetSelect(false)
return
end
self:SetSelect(nCharId == self.nCharId)
end
function SoldierCharCardShopItemCtrl:OnShopRefresh(bRandomRefresh)
if bRandomRefresh then
self:PlayRandomRefreshOneShot()
else
self:GetAnimator():Play("ShopCardItem_refresh")
end
end
return SoldierCharCardShopItemCtrl
@@ -0,0 +1,18 @@
local SoldierCharCardShopPartnerItemCtrl = class("SoldierCharCardShopPartnerItemCtrl", BaseCtrl)
SoldierCharCardShopPartnerItemCtrl._mapNodeConfig = {
txtPartnerName = {sComponentName = "TMP_Text"},
imgPartnerIcon = {sComponentName = "Image"}
}
SoldierCharCardShopPartnerItemCtrl._mapEventConfig = {}
SoldierCharCardShopPartnerItemCtrl._mapRedDotConfig = {}
function SoldierCharCardShopPartnerItemCtrl:Awake()
self._tbTimer = {}
end
function SoldierCharCardShopPartnerItemCtrl:OnRefresh(mapGroup)
if mapGroup == nil then
return
end
NovaAPI.SetTMPText(self._mapNode.txtPartnerName, mapGroup.Name or "")
self:SetPngSprite(self._mapNode.imgPartnerIcon, "Icon/SoldierPartner/" .. mapGroup.Icon .. AllEnum.SoldierChessIconSurfix.M)
end
return SoldierCharCardShopPartnerItemCtrl
@@ -0,0 +1,13 @@
local SoldierEffectDesItemCtrl = class("SoldierEffectDesItemCtrl", BaseCtrl)
SoldierEffectDesItemCtrl._mapNodeConfig = {}
SoldierEffectDesItemCtrl._mapEventConfig = {}
SoldierEffectDesItemCtrl._mapRedDotConfig = {}
function SoldierEffectDesItemCtrl:OnRefresh(tbData, nCardId)
if self._mapNode.TextName ~= nil then
NovaAPI.SetTMPText(self._mapNode.TextName, tbData and tbData.sName or "")
end
if self._mapNode.TextDes ~= nil then
NovaAPI.SetTMPText(self._mapNode.TextDes, tbData and tbData.sDes or "")
end
end
return SoldierEffectDesItemCtrl
@@ -0,0 +1,19 @@
local SoldierNodeItemCtrl = class("SoldierNodeItemCtrl", BaseCtrl)
function SoldierNodeItemCtrl:Awake()
self.serverData = PlayerData.SoldierData.ServerData
end
function SoldierNodeItemCtrl:OnEnable()
end
function SoldierNodeItemCtrl:OnDisable()
end
function SoldierNodeItemCtrl:OnDestroy()
end
function SoldierNodeItemCtrl:OnRefresh(nodeId)
local config = ConfigTable.GetData("SoldierNodePlan", nodeId)
if config then
self:SetPngSprite(self._mapNode.imgIcon, config.NodeIcon)
end
local curNodeId = self.serverData:GetNodeId()
self._mapNode.imgStatus:SetActive(curNodeId == nodeId)
end
return SoldierNodeItemCtrl
@@ -0,0 +1,98 @@
local SoldierPartnerListCtrl = class("SoldierPartnerListCtrl", BaseCtrl)
local iconPath = "Icon/SoldierOtherIcon/"
local partnerPath = "Icon/SoldierPartner/"
SoldierPartnerListCtrl._mapNodeConfig = {
sv_partner = {
sNodeName = "PartnerContainer",
sComponentName = "LoopScrollView"
}
}
SoldierPartnerListCtrl._mapEventConfig = {
SoldierPartnerTrace = "OnEvent_SoldierPartnerTrace",
SoldierPartnerNewActive = "OnEvent_SoldierPartnerNewActive"
}
SoldierPartnerListCtrl._mapRedDotConfig = {}
function SoldierPartnerListCtrl:SetData(tbPartner)
self.tbPartner = tbPartner
self:RefreshPartnerList()
end
function SoldierPartnerListCtrl:SetTipsRoot(tr)
self.trTipsRoot = tr
end
function SoldierPartnerListCtrl:RefreshPartnerList()
if self.tbPartner == nil or #self.tbPartner == 0 then
self._mapNode.sv_partner.gameObject:SetActive(false)
return
end
self._mapNode.sv_partner.gameObject:SetActive(true)
self._mapNode.sv_partner:Init(#self.tbPartner, self, self.OnPartnerRefreshGrid, self.OnPartnerGridBtnClick, false)
self.tbNewPartner = {}
end
function SoldierPartnerListCtrl:OnPartnerRefreshGrid(goGrid, gridIndex)
local nIndex = gridIndex + 1
local partner = self.tbPartner[nIndex]
local partnerGroupCfg = CacheTable.GetData("_SoldierPartnerGroup", partner.nType)
if partnerGroupCfg == nil then
return
end
local nIndex = table.indexof(partner.tbNumList, partner.nActiveNum)
local partnerCfgList = CacheTable.GetData("_SoldierPartner", partner.nType)
if partnerCfgList == nil then
return
end
local partnerCfg = partnerCfgList[partner.nActiveLevel]
if partnerCfg == nil then
partnerCfg = partnerCfgList[1]
end
local img_bg = goGrid.transform:Find("Common/ImageIcon"):GetComponent("Image")
local img_icon = goGrid.transform:Find("Common/imgPartnericon"):GetComponent("Image")
local txt_name = goGrid.transform:Find("Common/TextName"):GetComponent("TMP_Text")
local txtPartner = goGrid.transform:Find("Common/imgPartnerbg/txtPartner"):GetComponent("TMP_Text")
local txtPartner2 = goGrid.transform:Find("Common/txtPartner2"):GetComponent("TMP_Text")
local img_Trace = goGrid.transform:Find("Common/imgBuildsIcon")
if partner.nActiveLevel == 0 then
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[GameEnum.PartnerLevelQuality.None].bg)
else
self:SetPngSprite(img_bg, iconPath .. AllEnum.SoldierPartnerLevelIcon[partnerCfg.PartnerLevelQuality].bg)
end
self:SetPngSprite(img_icon, partnerPath .. partnerGroupCfg.Icon .. AllEnum.SoldierChessIconSurfix.M)
NovaAPI.SetTMPText(txt_name, partnerCfg.Name)
NovaAPI.SetTMPText(txtPartner2, partner.nCurNum)
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(partner.nType)
local bRecommend = PlayerData.SoldierData:CheckPartnerRecommendState(partner.nType)
img_Trace.gameObject:SetActive(bTrace or bRecommend)
local strLevel = ""
for i = 1, #partner.tbNumList do
if 1 < i then
strLevel = strLevel .. "/"
end
if i ~= partner.nActiveLevel then
strLevel = strLevel .. partner.tbNumList[i]
else
strLevel = strLevel .. "<color=#EED9BD>" .. partner.tbNumList[i] .. "</color>"
end
end
NovaAPI.SetTMPText(txtPartner, strLevel)
local animator = goGrid.transform:GetComponent("Animator")
if animator ~= nil and self.tbNewPartner ~= nil and 0 < table.indexof(self.tbNewPartner, partner.nType) then
animator:Play("PartnerActive")
end
end
function SoldierPartnerListCtrl:OnPartnerGridBtnClick(goGrid, gridIndex)
local nIndex = gridIndex + 1
local partner = self.tbPartner[nIndex]
local bTrace = PlayerData.SoldierData:GetCurLevelData():CheckPartnerTrace(partner.nType)
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierPartnerTips, self.trTipsRoot, partner.nType, partner.nActiveLevel, bTrace)
local tr = self.trTipsRoot
EventManager.Hit("OnSetParnterTipsPosition", tr:GetChild(0).position, tr:GetChild(1).position, tr:GetChild(2).position, tr:GetChild(3).position)
end
function SoldierPartnerListCtrl:OnEvent_SoldierPartnerTrace()
self:RefreshPartnerList()
end
function SoldierPartnerListCtrl:OnEvent_SoldierPartnerNewActive(tbActivePartner)
self.tbNewPartner = {}
for k, v in pairs(tbActivePartner) do
table.insert(self.tbNewPartner, k)
end
end
return SoldierPartnerListCtrl
@@ -0,0 +1,251 @@
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
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,163 @@
local SoldierSandtableFxCtrl = class("SoldierSandtableFxCtrl", BaseCtrl)
local nTime = 0.5
local fxType = {
Gray = 1,
Green = 2,
Blue = 3,
Purple = 4,
Gold = 5,
Coin = 99
}
SoldierSandtableFxCtrl._mapNodeConfig = {
RoleSlide_Coin = {},
RoleSlide_Blue = {nCount = 5},
RoleSlide_Gold = {nCount = 5},
RoleSlide_Gray = {nCount = 6},
RoleSlide_Green = {nCount = 5},
RoleSlide_Purple = {nCount = 5}
}
SoldierSandtableFxCtrl._mapEventConfig = {}
SoldierSandtableFxCtrl._mapRedDotConfig = {}
function SoldierSandtableFxCtrl:Awake()
end
function SoldierSandtableFxCtrl:OnEnable()
self:InitFx()
end
function SoldierSandtableFxCtrl:InitFx()
self._mapNode.RoleSlide_Coin:SetActive(false)
self.tbUnUseNode = {
[fxType.Coin] = {},
[fxType.Blue] = {},
[fxType.Gold] = {},
[fxType.Gray] = {},
[fxType.Green] = {},
[fxType.Purple] = {}
}
self.tbUseNode = {
[fxType.Coin] = {},
[fxType.Blue] = {},
[fxType.Gold] = {},
[fxType.Gray] = {},
[fxType.Green] = {},
[fxType.Purple] = {}
}
table.insert(self.tbUnUseNode[fxType.Coin], self._mapNode.RoleSlide_Coin)
for _, v in ipairs(self._mapNode.RoleSlide_Blue) do
v:SetActive(false)
table.insert(self.tbUnUseNode[fxType.Blue], v)
end
for _, v in ipairs(self._mapNode.RoleSlide_Gold) do
v:SetActive(false)
table.insert(self.tbUnUseNode[fxType.Gold], v)
end
for _, v in ipairs(self._mapNode.RoleSlide_Gray) do
v:SetActive(false)
table.insert(self.tbUnUseNode[fxType.Gray], v)
end
for _, v in ipairs(self._mapNode.RoleSlide_Green) do
v:SetActive(false)
table.insert(self.tbUnUseNode[fxType.Green], v)
end
for _, v in ipairs(self._mapNode.RoleSlide_Purple) do
v:SetActive(false)
table.insert(self.tbUnUseNode[fxType.Purple], v)
end
end
function SoldierSandtableFxCtrl:PlayFx(tbfx, callback)
for nType, v in pairs(tbfx) do
if nType == fxType.Coin then
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[1].from, v[1].to, nType)
elseif nType == fxType.Blue then
for i = 1, #v do
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[i].from, v[i].to, nType)
end
elseif nType == fxType.Gold then
for i = 1, #v do
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[i].from, v[i].to, nType)
end
elseif nType == fxType.Gray then
for i = 1, #v do
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[i].from, v[i].to, nType)
end
elseif nType == fxType.Green then
for i = 1, #v do
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[i].from, v[i].to, nType)
end
elseif nType == fxType.Purple then
for i = 1, #v do
local go = self:GetUnUseNode(nType)
self:PlayFxItem(go, v[i].from, v[i].to, nType)
end
end
end
self:AddTimer(1, nTime - 0.2, function()
if callback ~= nil then
callback()
end
end, true, true, true)
end
function SoldierSandtableFxCtrl:PlayFxItem(go, from, to, nType)
if go == nil then
return
end
go:SetActive(true)
go.transform.position = from.position
local boomfx = go.transform:Find("P_Ecplor_Cbess")
boomfx.gameObject:SetActive(true)
local trail = go.transform:Find("P_Slide_Cbess")
local animaFunc = function()
local beginPos = from.position
local endPos = to.position
local controlPos = Vector3((beginPos.x + endPos.x) / 2.0, (beginPos.y + endPos.y) / 2.0, 0)
local wait = function()
local totalMoveTime = nTime - 0.2
local moveTime = 0
local normalizedTime = 0
while normalizedTime < 1 do
moveTime = moveTime + CS.UnityEngine.Time.unscaledDeltaTime
normalizedTime = moveTime / totalMoveTime
normalizedTime = normalizedTime <= 1 and normalizedTime or 1
local x, y, z = UTILS.GetBezierPointByT(beginPos, controlPos, endPos, normalizedTime)
local angleZ = 100 * normalizedTime * 2
angleZ = angleZ <= 100 and angleZ or 100
go.transform.localEulerAngles = Vector3(0, 0, angleZ)
go.transform.position = Vector3(x, y, z)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
end
go:SetActive(false)
self:BackUseNode(nType, go)
end
cs_coroutine.start(wait)
end
self:AddTimer(1, 0.2, function()
boomfx.gameObject:SetActive(false)
animaFunc()
end, true, true, true)
end
function SoldierSandtableFxCtrl:GetUnUseNode(nType)
if self.tbUnUseNode[nType] == nil then
return nil
end
local go = table.remove(self.tbUnUseNode[nType], 1)
if go == nil then
return nil
end
table.insert(self.tbUseNode[nType], go)
return go
end
function SoldierSandtableFxCtrl:BackUseNode(nType, go)
if self.tbUseNode[nType] == nil then
return nil
end
local index = table.indexof(self.tbUseNode[nType], go)
table.remove(self.tbUseNode[nType], index)
table.insert(self.tbUnUseNode[nType], go)
end
function SoldierSandtableFxCtrl:OnEvent_AAA()
end
return SoldierSandtableFxCtrl
@@ -0,0 +1,131 @@
local SoldierSandtableOtherCharItemCtrl = class("SoldierSandtableOtherCharItemCtrl", BaseCtrl)
SoldierSandtableOtherCharItemCtrl._mapNodeConfig = {
btn_char = {
sComponentName = "UIButton",
callback = "OnBtnClick_Char"
},
drag = {
sNodeName = "char",
sComponentName = "UIDrag",
callback = "OnUIDrag_Drag"
},
trSortItem = {
sNodeName = "char",
sComponentName = "RectTransform"
},
raySortItem = {
sNodeName = "char",
sComponentName = "Empty4Raycast"
},
rayDragEvent = {
sComponentName = "Empty4Raycast"
},
charCtrl = {
sNodeName = "tc_char_small",
sCtrlName = "Game.UI.Soldier.Template.Character.SoldierCharItemCtrl"
}
}
SoldierSandtableOtherCharItemCtrl._mapEventConfig = {
SoldierSandtableOtherCharItemDragStart = "OnSoldierSandtableOtherCharItemDragStart",
SoldierSandtableOtherCharItemDragEnd = "OnSoldierSandtableOtherCharItemDragEnd"
}
SoldierSandtableOtherCharItemCtrl._mapRedDotConfig = {}
function SoldierSandtableOtherCharItemCtrl:Awake()
self.otherChessData = nil
self.itemCtrl = nil
end
function SoldierSandtableOtherCharItemCtrl:OnDisable()
if self.itemCtrl ~= nil then
self:UnbindCtrlByNode(self.itemCtrl)
self.itemCtrl = nil
end
end
function SoldierSandtableOtherCharItemCtrl:SetData(otherChessData, nIndex)
self.levelData = PlayerData.SoldierData:GetCurLevelData()
self.otherChessData = otherChessData
self.nIndex = nIndex
self._mapNode.trSortItem.localPosition = Vector3(0, 0, 0)
self._mapNode.charCtrl:SetItemData(self.otherChessData.nId)
self._mapNode.charCtrl:SetCharLevel(self.otherChessData.nStar or 1)
self.itemCanvas = self.gameObject:GetComponent("Canvas")
NovaAPI.SetCanvasOverrideSorting(self.itemCanvas, false)
self._mapNode.rayDragEvent.gameObject:SetActive(false)
end
function SoldierSandtableOtherCharItemCtrl:GetItemBtnInstanceId()
return self._mapNode.rayDragEvent.gameObject:GetInstanceID()
end
function SoldierSandtableOtherCharItemCtrl:SetAnimator()
end
function SoldierSandtableOtherCharItemCtrl:SetItemPos(dragPos)
local localPos = GameUIUtils.ScreenPointToLocalPoint(dragPos, self.gameObject.transform)
self._mapNode.trSortItem.localPosition = Vector3(localPos.x, localPos.y, 0)
end
function SoldierSandtableOtherCharItemCtrl:InitSortingOrder(nSortOrder)
self.nInitSortingOrder = nSortOrder
end
function SoldierSandtableOtherCharItemCtrl:CheckLimitAction()
return self.levelData:CheckSandTableDisable()
end
function SoldierSandtableOtherCharItemCtrl:OnUIDrag_Drag(mDrag)
if self:CheckLimitAction() then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Soldier_Sandtable_TemporaryReturn_Tips"))
return
end
if self.otherChessData.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("SoldierSandtableOtherCharItemDragStart", self:GetItemBtnInstanceId(), self.otherChessData, self.nIndex)
elseif mDrag.DragEventType == AllEnum.UIDragType.Drag then
self:SetItemPos(mDrag.EventData.position)
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("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, nPointerInsId)
else
EventManager.Hit("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, nPointerInsId)
end
else
EventManager.Hit("SoldierSandtableOtherCharItemDragEnd", self.otherChessData, 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 SoldierSandtableOtherCharItemCtrl:OnSoldierSandtableOtherCharItemDragStart(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 SoldierSandtableOtherCharItemCtrl:OnSoldierSandtableOtherCharItemDragEnd()
NovaAPI.SetCanvasSortingOrder(self.itemCanvas, self.nInitSortingOrder + 1)
self._mapNode.rayDragEvent.gameObject:SetActive(false)
end
function SoldierSandtableOtherCharItemCtrl:OnBtnClick_Char()
if self.otherChessData.nId <= 0 then
return
end
local chessData = {
nId = self.otherChessData.nId,
nStar = self.otherChessData.nStar,
nPositionType = AllEnum.SoldierPositionType.Other
}
EventManager.Hit(EventId.OpenPanel, PanelId.SoldierCharCardTips, self.gameObject.transform, chessData)
end
return SoldierSandtableOtherCharItemCtrl
@@ -0,0 +1,48 @@
local SoldierSandtablePanel = class("SoldierSandtablePanel", BasePanel)
SoldierSandtablePanel._bIsMainPanel = true
SoldierSandtablePanel._tbDefine = {
{
sPrefabPath = "Soldier/Level/SoldierSandtablePanel.prefab",
sCtrlName = "Game.UI.Soldier.Sandtable.SoldierSandtableCtrl"
}
}
function SoldierSandtablePanel:Awake()
self.MainChessList = {}
self.SupportChessList = {}
self.WaitingChessList = {}
self.OtherChessList = {}
self.bFirstRefreshed = false
end
function SoldierSandtablePanel:InitChessList()
for i = 1, 3 do
self.MainChessList[i] = {
nId = 0,
nStar = 0,
nPositionType = GameEnum.SoldierPositionType.FightPosition,
nIndex = i
}
end
for i = 1, 6 do
self.SupportChessList[i] = {
nId = 0,
nStar = 0,
nPositionType = GameEnum.SoldierPositionType.SupportPosition,
nIndex = i
}
end
for i = 1, 9 do
self.WaitingChessList[i] = {
nId = 0,
nStar = 0,
nPositionType = 3,
nIndex = i
}
end
end
function SoldierSandtablePanel:OnEnable()
end
function SoldierSandtablePanel:OnDisable()
end
function SoldierSandtablePanel:OnDestroy()
end
return SoldierSandtablePanel