285 lines
9.0 KiB
Lua
285 lines
9.0 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.QuickEquipTacticalItem
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl = HL.Class('QuickEquipTacticalItemCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
}
|
|
|
|
|
|
QuickEquipTacticalItemCtrl.m_tacticalItemId = HL.Field(HL.String) << ""
|
|
|
|
|
|
QuickEquipTacticalItemCtrl.m_getSquadCell = HL.Field(HL.Function)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl.m_squadCellDataList = HL.Field(HL.Table)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self.m_tacticalItemId = arg.tacticalItemId
|
|
|
|
self:_InitAction()
|
|
self:_InitController()
|
|
self:_SetMainTacticalItem()
|
|
self:_SetSquadTacticalItem()
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._InitAction = HL.Method() << function(self)
|
|
self.view.topNode.btnClose.onClick:AddListener(function()
|
|
if self:_isDirty() then
|
|
Notify(MessageConst.SHOW_POP_UP, {
|
|
content = Language.LUA_CHANGE_NOT_SAVED_CONFIRM,
|
|
onConfirm = function()
|
|
self:PlayAnimationOutAndClose()
|
|
end,
|
|
})
|
|
else
|
|
self:PlayAnimationOutAndClose()
|
|
end
|
|
end)
|
|
self.view.rightNode.btnCommon.onClick:AddListener(function()
|
|
self:_SaveAndClose()
|
|
end)
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._SetMainTacticalItem = HL.Method() << function(self)
|
|
local itemId = self.m_tacticalItemId
|
|
local cell = self.view.medicineNode
|
|
local itemCfg = Tables.itemTable:GetValue(itemId)
|
|
local itemCount = Utils.getBagItemCount(itemId)
|
|
local useDesc = UIUtils.getItemUseDesc(itemId)
|
|
local equipDesc = UIUtils.getItemEquippedDesc(itemId)
|
|
cell.name.text = itemCfg.name
|
|
CSUtils.UIContainerResize(cell.starInfoLayout, itemCfg.rarity)
|
|
cell.storageCountTxt.text = itemCount
|
|
cell.iconImg:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, itemCfg.iconId)
|
|
cell.useDescTxt:SetAndResolveTextStyle(useDesc)
|
|
cell.equipDescTxt:SetAndResolveTextStyle(equipDesc)
|
|
UIUtils.setItemRarityImage(cell.rarityColor, itemCfg.rarity)
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._SetSquadTacticalItem = HL.Method() << function(self)
|
|
self.m_getSquadCell = UIUtils.genCachedCellFunction(self.view.rightNode.scrollList)
|
|
self.m_squadCellDataList = {}
|
|
local squadSlots = GameInstance.player.squadManager:GetSquad(GameInstance.player.squadManager.curSquadIndex).slots
|
|
for i = 1, Const.BATTLE_SQUAD_MAX_CHAR_NUM do
|
|
if i <= squadSlots.Count then
|
|
local slot = squadSlots[CSIndex(i)]
|
|
table.insert(self.m_squadCellDataList, {
|
|
isEmpty = false,
|
|
squadSlot = slot,
|
|
})
|
|
else
|
|
table.insert(self.m_squadCellDataList, {
|
|
isEmpty = true,
|
|
})
|
|
end
|
|
end
|
|
self.view.rightNode.scrollList.onUpdateCell:AddListener(function(object, csIndex)
|
|
self:_UpdateSquadCell(self.m_getSquadCell(object), LuaIndex(csIndex))
|
|
end)
|
|
self.view.rightNode.scrollList:UpdateCount(#self.m_squadCellDataList)
|
|
self:_UpdateSaveBtn()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._UpdateSquadCell = HL.Method(HL.Table, HL.Number) << function(self, cell, index)
|
|
local data = self.m_squadCellDataList[index]
|
|
data.cell = cell
|
|
cell.stateController:SetState(data.isEmpty and 'empty' or 'normal')
|
|
if data.isEmpty then
|
|
return
|
|
end
|
|
|
|
cell.button.onClick:RemoveAllListeners()
|
|
cell.button.onClick:AddListener(function()
|
|
self:_OnSquadCellClicked(index)
|
|
end)
|
|
|
|
cell.charHeadCellLongHpBar:InitCharFormationHeadCell({
|
|
instId = data.squadSlot.charInstId,
|
|
templateId = data.squadSlot.charId,
|
|
})
|
|
local isAlive = data.squadSlot.character ~= nil and data.squadSlot.character.abilityCom.alive
|
|
cell.charHeadCellLongHpBar.view.charHeadBar.gameObject:SetActive(isAlive)
|
|
if isAlive then
|
|
local abilityCom = data.squadSlot.character.abilityCom
|
|
local currentHpPct = abilityCom.hp / abilityCom.maxHp
|
|
cell.charHeadCellLongHpBar.view.curHpFill.fillAmount = currentHpPct
|
|
end
|
|
|
|
local charInst = CharInfoUtils.getPlayerCharInfoByInstId(data.squadSlot.charInstId)
|
|
local curTacticalItemId = charInst.tacticalItemId
|
|
data.curTacticalItemId = curTacticalItemId
|
|
self:_UpdateCellItemDetail(cell, curTacticalItemId)
|
|
|
|
local _, targetItemCfg = Tables.itemTable:TryGetValue(self.m_tacticalItemId)
|
|
if targetItemCfg then
|
|
cell.medicineNode.newItem.iconImage:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, targetItemCfg.iconId)
|
|
UIUtils.setItemRarityImage(cell.medicineNode.newItem.lineImage, targetItemCfg.rarity)
|
|
end
|
|
local isEquipped = curTacticalItemId == self.m_tacticalItemId
|
|
data.isEquippedBefore = isEquipped
|
|
self:_SetSquadCellEquipped(index, isEquipped)
|
|
|
|
if DeviceInfo.usingController and index == 1 then
|
|
InputManagerInst.controllerNaviManager:SetTarget(cell.button)
|
|
end
|
|
InputManagerInst:SetBindingText(cell.button.hoverConfirmBindingId, data.isEquipped and
|
|
Language.LUA_QUICK_EQUIP_TACTICAL_ITEM_OFF or Language.LUA_QUICK_EQUIP_TACTICAL_ITEM_ON)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._UpdateCellItemDetail = HL.Method(HL.Table, HL.String, HL.Opt(HL.Boolean)) << function(
|
|
self, cell, itemId, isEquipped)
|
|
local hasCurItem, curItemCfg = Tables.itemTable:TryGetValue(itemId)
|
|
local stateName = isEquipped and 'equipped' or (hasCurItem and 'normal' or 'empty')
|
|
cell.detailNode.stateController:SetState(stateName)
|
|
if curItemCfg then
|
|
if not isEquipped then
|
|
cell.medicineNode.currentItem.iconImage:LoadSprite(UIConst.UI_SPRITE_ITEM_BIG, curItemCfg.iconId)
|
|
UIUtils.setItemRarityImage(cell.medicineNode.currentItem.lineImage, curItemCfg.rarity)
|
|
end
|
|
|
|
UIUtils.setItemRarityImage(cell.detailNode.rarityColor, curItemCfg.rarity)
|
|
cell.detailNode.name.text = curItemCfg.name
|
|
local itemCount = Utils.getBagItemCount(itemId)
|
|
cell.detailNode.carryNode.storageCountTxt.text = itemCount
|
|
cell.detailNode.carryNode.stateController:SetState(itemCount > 0 and 'normal' or 'empty')
|
|
local useDesc = UIUtils.getItemUseDesc(itemId)
|
|
local equipDesc = UIUtils.getItemEquippedDesc(itemId)
|
|
cell.detailNode.useTxt:SetAndResolveTextStyle(useDesc)
|
|
cell.detailNode.equipTxt:SetAndResolveTextStyle(equipDesc)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._OnSquadCellClicked = HL.Method(HL.Number) << function(self, index)
|
|
local cellData = self.m_squadCellDataList[index]
|
|
self:_SetSquadCellEquipped(index, not cellData.isEquipped)
|
|
InputManagerInst:SetBindingText(cellData.cell.button.hoverConfirmBindingId, cellData.isEquipped and
|
|
Language.LUA_QUICK_EQUIP_TACTICAL_ITEM_OFF or Language.LUA_QUICK_EQUIP_TACTICAL_ITEM_ON)
|
|
self:_UpdateSaveBtn()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._SetSquadCellEquipped = HL.Method(HL.Number, HL.Boolean) << function(self, index, isEquipped)
|
|
local cellData = self.m_squadCellDataList[index]
|
|
cellData.cell.detailNode.wearNode.stateController:SetState(isEquipped and 'equipped' or 'normal')
|
|
cellData.isEquipped = isEquipped
|
|
cellData.cell.medicineNode.newNode.gameObject:SetActive(isEquipped and cellData.curTacticalItemId ~= self.m_tacticalItemId)
|
|
if cellData.curTacticalItemId == self.m_tacticalItemId then
|
|
cellData.cell.medicineNode.currentItem.gameObject:SetActive(isEquipped)
|
|
end
|
|
local equippedItemId = cellData.curTacticalItemId
|
|
if isEquipped then
|
|
equippedItemId = self.m_tacticalItemId
|
|
else
|
|
if cellData.curTacticalItemId == self.m_tacticalItemId then
|
|
equippedItemId = ""
|
|
else
|
|
equippedItemId = cellData.curTacticalItemId
|
|
end
|
|
end
|
|
self:_UpdateCellItemDetail(cellData.cell, equippedItemId, isEquipped)
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._isDirty = HL.Method().Return(HL.Boolean) << function(self)
|
|
local isDirty = false
|
|
for _, data in ipairs(self.m_squadCellDataList) do
|
|
if not data.isEmpty and data.isEquipped ~= data.isEquippedBefore then
|
|
isDirty = true
|
|
break
|
|
end
|
|
end
|
|
return isDirty
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._UpdateSaveBtn = HL.Method() << function(self)
|
|
local isDirty = self:_isDirty()
|
|
self.view.rightNode.btnStateCtrl:SetState(isDirty and 'Normal' or 'Disabled')
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._SaveAndClose = HL.Method() << function(self)
|
|
for _, data in ipairs(self.m_squadCellDataList) do
|
|
if not data.isEmpty and data.isEquipped ~= data.isEquippedBefore then
|
|
GameInstance.player.charBag:ChangeTactical(data.squadSlot.charInstId, data.isEquipped and self.m_tacticalItemId or "")
|
|
end
|
|
end
|
|
self:PlayAnimationOutAndClose()
|
|
Notify(MessageConst.SHOW_TOAST, Language.LUA_QUICK_EQUIP_SAVED)
|
|
end
|
|
|
|
|
|
|
|
QuickEquipTacticalItemCtrl._InitController = HL.Method() << function(self)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
UIUtils.bindHyperlinkPopup(self, "TacticalItem", self.view.inputGroup.groupId)
|
|
end
|
|
|
|
HL.Commit(QuickEquipTacticalItemCtrl)
|