Files
Endfield-Data/LuaScripts/UI/Panels/ShopTrade/ShopTradeCtrl.lua
2025-12-02 20:37:18 +07:00

1732 lines
59 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.ShopTrade
local PHASE_ID = PhaseId.ShopTrade
local shopSystem = GameInstance.player.shopSystem
ShopTradeCtrl = HL.Class('ShopTradeCtrl', uiCtrl.UICtrl)
ShopTradeCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_BUY_ITEM_SUCC] = '_OnBuyItemSuccess',
[MessageConst.ON_SELL_ITEM_SUCC] = '_OnSellItemSuccess',
[MessageConst.ON_SHOP_REFRESH] = '_OnShopRefresh',
[MessageConst.ON_FRIEND_SHOP_INFO_SYNC] = '_OnFriendShopRefresh',
}
ShopTradeCtrl.m_isLocalShop = HL.Field(HL.Boolean) << false
ShopTradeCtrl.m_showFriendRecord = HL.Field(HL.Boolean) << false
ShopTradeCtrl.m_goodsTagCellCache = HL.Field(HL.Forward("UIListCache"))
ShopTradeCtrl.m_getGoodsGroupCellFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_goodsGroupSortFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_goodsSortFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_goodsFriendSortFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_myPositionGoodsSortFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_bindIdPreTab = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_bindIdNextTab = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_waitAutoScrollTagListTime = HL.Field(HL.Number) << -1
ShopTradeCtrl.m_domainId = HL.Field(HL.String) << ""
ShopTradeCtrl.m_onCloseCallBack = HL.Field(HL.Function)
ShopTradeCtrl.m_domainInfo = HL.Field(HL.Table)
ShopTradeCtrl.m_localShopInfo = HL.Field(HL.Table)
ShopTradeCtrl.m_isSelectCommonShop = HL.Field(HL.Boolean) << true
ShopTradeCtrl.m_curSelectTagIndex = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_curNaviLocalGoodsIndex = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_isNaviTag = HL.Field(HL.Boolean) << false
ShopTradeCtrl.m_bindIdFocus = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_bindIdStopFocus = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_commonShopRefreshGoodsSearchMap = HL.Field(HL.Table)
ShopTradeCtrl.m_friendRoleId = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_friendShopInfoList = HL.Field(HL.Table)
ShopTradeCtrl.m_friendTabCellCache = HL.Field(HL.Forward("UIListCache"))
ShopTradeCtrl.m_curSelectFriendShopIndex = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_nextRefreshTs = HL.Field(HL.Number) << 0
ShopTradeCtrl.m_getBulkSellGoodsCellFunc = HL.Field(HL.Function)
ShopTradeCtrl.m_onClickBulkSellGoods = HL.Field(HL.Function)
ShopTradeCtrl.m_onSelectorNumberChanged = HL.Field(HL.Function)
ShopTradeCtrl.m_bulkSellInfo = HL.Field(HL.Table)
ShopTradeCtrl.m_waitBulkSellResp = HL.Field(HL.Boolean) << false
ShopTradeCtrl.OpenDomainFriendShop = HL.StaticMethod(HL.Any) << function(arg)
if arg == nil then
return
end
local roleId = unpack(arg)
if roleId == nil then
return
end
DomainShopUtils.openDomainFriendShop(roleId)
end
ShopTradeCtrl.OpenDomainShop = HL.StaticMethod(HL.Table) << function(args)
local domainId = unpack(args)
PhaseManager:OpenPhase(PHASE_ID, { domainId = domainId, showFriendRecord = true })
end
ShopTradeCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self:_InitUI()
self:_InitData(arg)
self:_UpdateData()
self:_RefreshAllUI()
self:_BindingControllerOperate()
self:_StartUpdate(function(deltaTime)
if not self.m_isLocalShop then
local curTs = DateTimeUtils.GetCurrentTimestampBySeconds()
if curTs >= self.m_nextRefreshTs then
self.m_nextRefreshTs = Utils.getNextCommonServerRefreshTime()
GameInstance.player.shopSystem:SendQueryFriendShop(self.m_friendRoleId, DomainShopUtils.getAllLocalUnlockRandomShopIds())
UIManager:Close(PanelId.ShopTradeItem)
end
end
if DeviceInfo.usingController then
return
end
if self.m_waitAutoScrollTagListTime < 0 then
return
end
if self.m_waitAutoScrollTagListTime >= 1 then
local showRange = self.view.goodsNode.goodsGroupList:GetShowRange()
local csIndex = math.floor((showRange.x + showRange.y) / 2)
local newIndex = LuaIndex(csIndex)
if self.m_curSelectTagIndex ~= newIndex then
self:_OnChangeSelectTagUI(newIndex)
end
self.m_waitAutoScrollTagListTime = -1
else
self.m_waitAutoScrollTagListTime = self.m_waitAutoScrollTagListTime + deltaTime
end
end)
self.m_nextRefreshTs = Utils.getNextCommonServerRefreshTime()
end
ShopTradeCtrl.OnClose = HL.Override() << function(self)
local succ, level = GameUtil.SpaceshipUtils.TryGetSpaceshipLevel()
if succ then
level:TriggerDomainSellStatus()
end
shopSystem:SetGoodsIdSee()
local isOpen, _ = PhaseManager:IsOpen(PhaseId.Dialog)
if isOpen then
Notify(MessageConst.DIALOG_CLOSE_UI, { PANEL_ID, PHASE_ID, 0 })
end
end
ShopTradeCtrl._InitData = HL.Method(HL.Any) << function(self, arg)
self.m_domainId = arg.domainId or ""
self.m_onCloseCallBack = arg.onCloseCB
self.m_friendRoleId = arg.friendRoleId or 0
self.m_showFriendRecord = (arg.showFriendRecord == true) or Utils.isInSpaceShip()
self.m_isLocalShop = not string.isEmpty(self.m_domainId)
if self.m_isLocalShop then
local _, domainCfg = Tables.domainDataTable:TryGetValue(self.m_domainId)
local moneyId = domainCfg.domainGoldItemId
local moneyItemCfg = Utils.tryGetTableCfg(Tables.itemTable, moneyId)
self.m_domainInfo = {
moneyId = moneyId,
moneyIcon = moneyItemCfg and moneyItemCfg.iconId or "",
shopGroupId = domainCfg.domainShopGroupId,
}
local shopGroupId = self.m_domainInfo.shopGroupId
local _, shopGroupCfg = Tables.shopGroupTable:TryGetValue(shopGroupId)
local _, domainShopGroupCfg = Tables.shopGroupDomainTable:TryGetValue(shopGroupId)
local commonShopId, randomShopId
for _, shopId in pairs(shopGroupCfg.shopIds) do
local _, shopCfg = Tables.shopTable:TryGetValue(shopId)
if shopCfg.shopRefreshType == GEnums.ShopRefreshType.None then
commonShopId = shopId
elseif shopCfg.shopRefreshType == GEnums.ShopRefreshType.RefreshRandom then
randomShopId = shopId
end
end
local myPositionTagId = Tables.shopDomainConst.goodsTagIdMyPosition
self.m_localShopInfo = {
commonShopInfo = {
shopId = commonShopId,
},
randomShopInfo = {
shopId = randomShopId,
},
myPositionGoodsGroup = ShopTradeCtrl._CreateGoodsGroup(myPositionTagId),
bgImg = domainShopGroupCfg.bgImg,
icon = shopGroupCfg.icon,
}
else
end
self.m_onClickBulkSellGoods = function(luaIndex)
self:_OnSelectBulkSellGoods(luaIndex)
end
self.m_onSelectorNumberChanged = function(curNumber, isChangeByBtn)
if not isChangeByBtn then
return
end
self:_OnChangeBulkSellSelectCount(lume.round(curNumber))
end
self.m_goodsGroupSortFunc = Utils.genSortFunction({ "sortId" }, true)
self.m_goodsSortFunc = Utils.genSortFunction({ "remainLimitSort", "sortId", "raritySort", "priceRatioSort", "goodsId" }, true)
self.m_goodsFriendSortFunc = Utils.genSortFunction({ "hasPosition", "sortId", "raritySort", "priceRatioSort", "goodsId" }, true)
self.m_myPositionGoodsSortFunc = Utils.genSortFunction({ "sortId", "raritySort", "profitRatioSort", "goodsId" }, true)
end
ShopTradeCtrl._UpdateData = HL.Method() << function(self)
self.m_commonShopRefreshGoodsSearchMap = {}
if self.m_isLocalShop then
self:_UpdateCommonShopData()
self:_UpdateRandomShopData()
else
local shopData = shopSystem:GetFriendShopData(self.m_friendRoleId)
self.m_friendShopInfoList = {}
for shopId, goodsMap in cs_pairs(shopData.shopGoodsDic) do
local domainId = DomainShopUtils.getDomainIdByDomainShopId(shopId)
local hasCfg, domainCfg = Tables.domainDataTable:TryGetValue(domainId)
local hasData = GameInstance.player.domainDevelopmentSystem.domainDevDataDic:TryGetValue(domainId)
if hasCfg and hasData then
local moneyId = domainCfg.domainGoldItemId
local moneyItemCfg = Utils.tryGetTableCfg(Tables.itemTable, moneyId)
local shopInfo = {
shopId = shopId,
domainId = domainId,
domainName = domainCfg.domainName,
domainIcon = domainCfg.domainIcon,
moneyId = domainCfg.domainGoldItemId,
moneyIcon = moneyItemCfg and moneyItemCfg.iconId or "",
myPositionGoodsGroup = ShopTradeCtrl._CreateGoodsGroup(Tables.shopDomainConst.goodsTagIdMyPosition),
sortId = domainCfg.sortId,
}
self:_UpdateFriendShopData(shopInfo, goodsMap)
table.insert(self.m_friendShopInfoList, shopInfo)
end
end
table.sort(self.m_friendShopInfoList, function(a, b)
return a.sortId < b.sortId
end)
end
end
ShopTradeCtrl._CreateGoodsGroup = HL.StaticMethod(HL.String).Return(HL.Table) << function(tagId)
local _, tagCfg = Tables.shopGoodsTagTable:TryGetValue(tagId)
local goodsGroup = {
tagName = tagCfg.tagName,
tagIcon = tagCfg.tagIcon,
goodsList = {},
sortId = tagCfg.sortId,
}
return goodsGroup
end
ShopTradeCtrl._UpdateCommonShopData = HL.Method() << function(self)
local shopInfo = self.m_localShopInfo.commonShopInfo
local shopId = shopInfo.shopId
shopInfo.goodsGroupDic = {}
shopInfo.goodsGroupList = {}
local shopData = shopSystem:GetShopData(shopId)
if not shopSystem:CheckShopUnlocked(shopId) then
return
end
for _, goodsData in cs_pairs(shopData.goodList) do
local goodsTplId = goodsData.goodsTemplateId
local goodsId = goodsData.goodsId
local _, goodsCfg = Tables.shopGoodsTable:TryGetValue(goodsTplId)
local tagId = goodsCfg.goodsTagId
local unlock = shopSystem:CheckGoodsUnlocked(goodsId)
if unlock or goodsCfg.isShowWhenLock then
local goodsGroup = shopInfo.goodsGroupDic[tagId]
if goodsGroup == nil then
goodsGroup = ShopTradeCtrl._CreateGoodsGroup(tagId)
shopInfo.goodsGroupDic[tagId] = goodsGroup
table.insert(shopInfo.goodsGroupList, goodsGroup)
end
local itemBundle = UIUtils.getRewardFirstItem(goodsCfg.rewardId)
local itemId = itemBundle.id
local hasCfg, itemCfg = Tables.itemTable:TryGetValue(itemId)
if not hasCfg then
logger.error("itemTable表数据缺失itemId为", itemId)
else
local remainLimitCount = shopSystem:GetRemainCountByGoodsId(shopId, goodsTplId)
local discountedRatio = lume.round(goodsData.discount, 1e-7)
local discount = 1 - goodsData.discount
local goodsInfo = {
shopId = shopId,
goodsId = goodsId,
originPrice = goodsCfg.price,
discount = discount,
curPrice = math.floor(goodsCfg.price * discountedRatio + 1e-7),
remainLimitCount = remainLimitCount,
refreshType = goodsCfg.limitCountRefreshType,
itemId = itemId,
itemName = itemCfg.name,
itemCount = Utils.getItemCount(itemId, true, true),
itemBundleCount = itemBundle.count,
itemIcon = itemCfg.iconId,
itemRarity = itemCfg.rarity,
moneyId = self.m_domainInfo.moneyId,
moneyIcon = self.m_domainInfo.moneyIcon,
remainLimitSort = remainLimitCount == 0 and 1 or 0,
raritySort = -itemCfg.rarity,
priceRatioSort = -discount,
sortId = goodsCfg.sortId,
}
table.insert(goodsGroup.goodsList, goodsInfo)
end
end
end
table.sort(shopInfo.goodsGroupList, self.m_goodsGroupSortFunc)
local groupIndex = 1
for _, goodsGroup in pairs(shopInfo.goodsGroupList) do
table.sort(goodsGroup.goodsList, self.m_goodsSortFunc)
local goodsIndex = 1
for _, goodsInfo in pairs(goodsGroup.goodsList) do
self.m_commonShopRefreshGoodsSearchMap[goodsInfo.goodsId] = {
goodsInfo = goodsInfo,
groupIndex = groupIndex,
goodsIndex = goodsIndex,
}
goodsIndex = goodsIndex + 1
end
groupIndex = groupIndex + 1
end
end
ShopTradeCtrl._UpdateRandomShopData = HL.Method() << function(self)
local shopInfo = self.m_localShopInfo.randomShopInfo
local shopId = shopInfo.shopId
local myPositionGroup = self.m_localShopInfo.myPositionGoodsGroup
myPositionGroup.totalPrice = 0
myPositionGroup.totalTodayPrice = 0
myPositionGroup.totalProfit = 0
myPositionGroup.totalProfitRatio = 0
shopInfo.goodsGroupDic = {}
shopInfo.goodsGroupList = {}
myPositionGroup.goodsList = {}
if not shopSystem:CheckShopUnlocked(shopId) then
return
end
local shopData = shopSystem:GetShopData(shopId)
shopInfo.remainLimitCount = shopSystem:GetRemainLimitCountByShopId(shopId)
for _, goodsData in cs_pairs(shopData.goodList) do
local goodsTplId = goodsData.goodsTemplateId
local goodsId = goodsData.goodsId
local _, goodsCfg = Tables.shopGoodsTable:TryGetValue(goodsTplId)
local unlock = shopSystem:CheckGoodsUnlocked(goodsId)
if unlock or goodsCfg.isShowWhenLock then
local tagId = goodsCfg.goodsTagId
local goodsGroup = shopInfo.goodsGroupDic[tagId]
if goodsGroup == nil then
goodsGroup = ShopTradeCtrl._CreateGoodsGroup(tagId)
shopInfo.goodsGroupDic[tagId] = goodsGroup
table.insert(shopInfo.goodsGroupList, goodsGroup)
end
local itemBundle = UIUtils.getRewardFirstItem(goodsCfg.rewardId)
local itemId = itemBundle.id
local _, itemCfg = Tables.itemTable:TryGetValue(itemId)
local randomGoodsData = goodsData.domainRandomGoodsData
local originPrice = goodsCfg.randomGoodsStandardPrice
local todayPrice = randomGoodsData.historyPrice[0]
local avgPrice = randomGoodsData.avgPrice
local profit = todayPrice - avgPrice
local priceDiffRatio = lume.round((todayPrice - originPrice) * 100 / originPrice, 0.1)
local remainLimitCount = shopSystem:GetRemainCountByGoodsId(shopId, goodsTplId)
local profitRatio = avgPrice == 0 and 0 or lume.round(profit * 100 / avgPrice, 0.1)
local goodsInfo = {
shopId = shopId,
goodsId = goodsId,
originPrice = originPrice,
todayPrice = todayPrice,
priceDiffRatio = priceDiffRatio,
remainLimitCount = remainLimitCount,
refreshType = goodsCfg.limitCountRefreshType,
itemId = itemId,
itemName = itemCfg.name,
itemCount = randomGoodsData.quantity,
itemBundleCount = itemBundle.count,
itemIcon = itemCfg.iconId,
itemRarity = itemCfg.rarity,
moneyId = self.m_domainInfo.moneyId,
moneyIcon = self.m_domainInfo.moneyIcon,
positionAvgPrice = avgPrice,
profit = profit,
profitRatio = profitRatio,
remainLimitSort = remainLimitCount == 0 and 1 or 0,
raritySort = -itemCfg.rarity,
priceRatioSort = -priceDiffRatio,
profitRatioSort = -profitRatio,
sortId = goodsCfg.sortId,
}
table.insert(goodsGroup.goodsList, goodsInfo)
if goodsInfo.itemCount > 0 then
table.insert(myPositionGroup.goodsList, goodsInfo)
myPositionGroup.totalPrice = myPositionGroup.totalPrice + goodsInfo.positionAvgPrice * goodsInfo.itemCount
myPositionGroup.totalTodayPrice = myPositionGroup.totalTodayPrice + goodsInfo.todayPrice * goodsInfo.itemCount
end
end
end
myPositionGroup.totalProfit = myPositionGroup.totalTodayPrice - myPositionGroup.totalPrice
myPositionGroup.totalProfitRatio = myPositionGroup.totalProfit == 0 and 0 or
lume.round(myPositionGroup.totalProfit * 100 / myPositionGroup.totalPrice, 0.1)
table.sort(shopInfo.goodsGroupList, self.m_goodsGroupSortFunc)
for _, goodsGroup in pairs(shopInfo.goodsGroupList) do
table.sort(goodsGroup.goodsList, self.m_goodsSortFunc)
end
table.sort(myPositionGroup.goodsList, self.m_myPositionGoodsSortFunc)
end
ShopTradeCtrl._UpdateFriendShopData = HL.Method(HL.Table, HL.Any) << function(self, shopInfo, goodsMap)
local shopId = shopInfo.shopId
local myPositionGroup = shopInfo.myPositionGoodsGroup
shopInfo.goodsGroupDic = {}
shopInfo.goodsGroupList = {}
myPositionGroup.goodsList = {}
myPositionGroup.totalPrice = 0
myPositionGroup.totalTodayPrice = 0
myPositionGroup.totalProfit = 0
myPositionGroup.totalProfitRatio = 0
for goodsId, friendGoodsData in cs_pairs(goodsMap) do
local unlock = shopSystem:CheckGoodsUnlocked(goodsId)
if unlock then
local goodsData = shopSystem:GetShopGoodsData(shopId, goodsId)
local randomGoodsData = goodsData.domainRandomGoodsData
local goodsTplId = friendGoodsData.goodsTemplateId
local _, goodsCfg = Tables.shopGoodsTable:TryGetValue(goodsTplId)
local tagId = goodsCfg.goodsTagId
local goodsGroup = shopInfo.goodsGroupDic[tagId]
if goodsGroup == nil then
goodsGroup = ShopTradeCtrl._CreateGoodsGroup(tagId)
shopInfo.goodsGroupDic[tagId] = goodsGroup
table.insert(shopInfo.goodsGroupList, goodsGroup)
end
local itemBundle = UIUtils.getRewardFirstItem(goodsCfg.rewardId)
local itemId = itemBundle.id
local _, itemCfg = Tables.itemTable:TryGetValue(itemId)
local originPrice = goodsCfg.randomGoodsStandardPrice
local todayPrice = friendGoodsData.historyPrice[0]
local avgPrice = randomGoodsData.avgPrice
local profit = todayPrice - avgPrice
local priceDiffRatio = lume.round((todayPrice - originPrice) * 100 / originPrice, 0.1)
local profitRatio = avgPrice == 0 and 0 or lume.round(profit * 100 / avgPrice, 0.1)
local goodsInfo = {
shopId = shopId,
goodsId = goodsId,
friendGoodsData = friendGoodsData,
originPrice = originPrice,
todayPrice = todayPrice,
priceDiffRatio = priceDiffRatio,
itemId = itemId,
itemName = itemCfg.name,
itemCount = randomGoodsData.quantity,
itemBundleCount = itemBundle.count,
itemIcon = itemCfg.iconId,
itemRarity = itemCfg.rarity,
moneyId = shopInfo.moneyId,
moneyIcon = shopInfo.moneyIcon,
positionAvgPrice = avgPrice,
profit = profit,
profitRatio = profitRatio,
hasPosition = randomGoodsData.quantity > 0 and 0 or 1,
raritySort = -itemCfg.rarity,
priceRatioSort = -priceDiffRatio,
profitRatioSort = -profitRatio,
sortId = goodsCfg.sortId,
}
table.insert(goodsGroup.goodsList, goodsInfo)
if goodsInfo.itemCount > 0 then
table.insert(myPositionGroup.goodsList, goodsInfo)
myPositionGroup.totalPrice = myPositionGroup.totalPrice + goodsInfo.positionAvgPrice * goodsInfo.itemCount
myPositionGroup.totalTodayPrice = myPositionGroup.totalTodayPrice + goodsInfo.todayPrice * goodsInfo.itemCount
end
end
end
myPositionGroup.totalProfit = myPositionGroup.totalTodayPrice - myPositionGroup.totalPrice
myPositionGroup.totalProfitRatio = myPositionGroup.totalProfit == 0 and 0 or
lume.round(myPositionGroup.totalProfit * 100 / myPositionGroup.totalPrice, 0.1)
table.sort(shopInfo.goodsGroupList, self.m_goodsGroupSortFunc)
for _, goodsGroup in pairs(shopInfo.goodsGroupList) do
table.sort(goodsGroup.goodsList, self.m_goodsFriendSortFunc)
end
table.sort(myPositionGroup.goodsList, self.m_myPositionGoodsSortFunc)
end
ShopTradeCtrl._UpdateBulkSellData = HL.Method() << function(self)
local myPositionGroup
local moneyId
local moneyIcon
if self.m_isLocalShop then
myPositionGroup = self.m_localShopInfo.myPositionGoodsGroup
moneyId = self.m_domainInfo.moneyId
moneyIcon = self.m_domainInfo.moneyIcon
else
local shopInfo = self.m_friendShopInfoList[self.m_curSelectFriendShopIndex]
myPositionGroup = shopInfo.myPositionGoodsGroup
moneyId = shopInfo.moneyId
moneyIcon = shopInfo.moneyIcon
end
self.m_bulkSellInfo = {
goodsList = myPositionGroup.goodsList,
profitInfo = {
moneyId = moneyId,
moneyIcon = moneyIcon,
moneyCount = myPositionGroup.totalPrice,
profit = myPositionGroup.totalProfit,
profitRatio = myPositionGroup.totalProfitRatio,
},
selectCountList = {},
totalReward = 0,
curFocusGoodsIndex = 0,
}
end
ShopTradeCtrl._InitUI = HL.Method() << function(self)
self.view.domainTopMoneyTitle.view.closeBtn.onClick:AddListener(function()
PhaseManager:PopPhase(PHASE_ID)
if self.m_onCloseCallBack then
self.m_onCloseCallBack()
self.m_onCloseCallBack = nil
end
end)
self.view.goodsNode.bulkSellBtn.onClick:AddListener(function()
self:_ShowBulkSellNode(true)
self:_UpdateBulkSellData()
self:_RefreshBulkSellUI()
end)
self.m_goodsTagCellCache = UIUtils.genCellCache(self.view.goodsNode.goodsTagCell)
self.m_getGoodsGroupCellFunc = UIUtils.genCachedCellFunction(self.view.goodsNode.goodsGroupList)
self.view.goodsNode.goodsGroupList.onUpdateCell:AddListener(function(obj, csIndex)
local cell = self.m_getGoodsGroupCellFunc(obj)
self:_OnRefreshGoodsGroupCell(cell, LuaIndex(csIndex))
end)
local preActionId = self.view.tabNode.previousKeyHint.actionId
local nextActionId = self.view.tabNode.nextKeyHint.actionId
self.m_bindIdPreTab = UIUtils.bindInputPlayerAction(preActionId, function()
if self.m_isLocalShop then
local hasRandomTab = #self.m_localShopInfo.randomShopInfo.goodsGroupList > 0
if not hasRandomTab then
return
end
self:_OnChangeSelectLocalShop(not self.m_isSelectCommonShop)
AudioManager.PostEvent("Au_UI_Toggle_Tab_On")
else
local count = #self.m_friendShopInfoList
local newIndex = (self.m_curSelectFriendShopIndex + count - 2) % count + 1
if newIndex ~= self.m_curSelectFriendShopIndex then
self:_OnChangeSelectFriendShop(newIndex)
AudioManager.PostEvent("Au_UI_Toggle_Tab_On")
end
end
end, self.view.goodsNode.inputGroup.groupId)
self.m_bindIdNextTab = UIUtils.bindInputPlayerAction(nextActionId, function()
if self.m_isLocalShop then
local hasRandomTab = #self.m_localShopInfo.randomShopInfo.goodsGroupList > 0
if not hasRandomTab then
return
end
self:_OnChangeSelectLocalShop(not self.m_isSelectCommonShop)
AudioManager.PostEvent("Au_UI_Toggle_Tab_On")
else
local count = #self.m_friendShopInfoList
local newIndex = self.m_curSelectFriendShopIndex % count + 1
if newIndex ~= self.m_curSelectFriendShopIndex then
self:_OnChangeSelectFriendShop(newIndex)
AudioManager.PostEvent("Au_UI_Toggle_Tab_On")
end
end
end, self.view.goodsNode.inputGroup.groupId)
self.view.tabNode.shopCommonTab.selectBtn.onClick:AddListener(function()
if self.m_isSelectCommonShop == false then
self:_OnChangeSelectLocalShop(true)
end
end)
self.view.tabNode.shopRandomTab.selectBtn.onClick:AddListener(function()
if self.m_isSelectCommonShop == true then
self:_OnChangeSelectLocalShop(false)
end
end)
self.m_friendTabCellCache = UIUtils.genCellCache(self.view.tabNode.shopFriendTabCell)
self.view.tabNode.friendRecordBtn.onClick:AddListener(function()
PhaseManager:OpenPhase(PhaseId.SpaceshipSalesRecords)
end)
local bulkSellNode = self.view.bulkSellNode
bulkSellNode.closeBtn.onClick:AddListener(function()
self:_ShowBulkSellNode(false)
end)
bulkSellNode.confirmBtn.onClick:AddListener(function()
self:_OnConfirmBulkSellGoods()
end)
self.m_getBulkSellGoodsCellFunc = UIUtils.genCachedCellFunction(bulkSellNode.goodsList)
bulkSellNode.goodsList.onUpdateCell:AddListener(function(obj, csIndex)
local cell = self.m_getBulkSellGoodsCellFunc(obj)
self:_OnRefreshBulkSellGoodsCell(cell, LuaIndex(csIndex))
end)
self:_ShowBulkSellNode(false)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
end
ShopTradeCtrl._BindingControllerOperate = HL.Method() << function(self)
if not self.m_isLocalShop then
return
end
UIUtils.bindInputPlayerAction("shop_domain_navigation_4_dir_up_no_hint", function()
local curTagIndex = self.m_curSelectTagIndex
if self.m_isNaviTag then
if curTagIndex <= 1 then
return
end
local newIndex = curTagIndex - 1
local tagCell = self.m_goodsTagCellCache:Get(newIndex)
InputManagerInst.controllerNaviManager:SetTarget(tagCell.tagBtn)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, false)
else
local goodsGroupCell = self.m_getGoodsGroupCellFunc(curTagIndex)
if goodsGroupCell then
local gridLayout = goodsGroupCell.view.goodsListGridLayout
local lineMaxCellCount = self:_GetGridLayoutGroupHorizontalMaxCellCount(gridLayout)
local newIndex = self.m_curNaviLocalGoodsIndex - lineMaxCellCount
if newIndex <= 0 then
if curTagIndex > 1 then
local newTagIndex = curTagIndex - 1
goodsGroupCell = self.m_getGoodsGroupCellFunc(newTagIndex)
if not goodsGroupCell then
return
end
local preGroupTotalCellCount = goodsGroupCell.m_goodsCellCache:GetCount()
if not goodsGroupCell or preGroupTotalCellCount < 1 then
return
end
local indexInThisLine = (self.m_curNaviLocalGoodsIndex - 1) % lineMaxCellCount + 1
local preGroupListLineCount = math.floor(preGroupTotalCellCount / lineMaxCellCount) + 1
local preGroupLastLineCellCount = preGroupTotalCellCount % lineMaxCellCount
local preGroupPreLastLineTotalCellCount = (preGroupListLineCount - 1) * lineMaxCellCount
newIndex = math.min(preGroupPreLastLineTotalCellCount + indexInThisLine, preGroupPreLastLineTotalCellCount + preGroupLastLineCellCount)
self:_OnChangeSelectTagUI(newTagIndex)
else
return
end
end
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(newIndex)
if goodsCell then
self.m_curNaviLocalGoodsIndex = newIndex
InputManagerInst.controllerNaviManager:SetTarget(goodsCell.view.selectBtn)
end
end
end
end, self.view.goodsNode.inputGroup.groupId)
UIUtils.bindInputPlayerAction("shop_domain_navigation_4_dir_down", function()
local curTagIndex = self.m_curSelectTagIndex
if self.m_isNaviTag then
if curTagIndex >= self.m_goodsTagCellCache:GetCount() then
return
end
local newIndex = curTagIndex + 1
local tagCell = self.m_goodsTagCellCache:Get(newIndex)
InputManagerInst.controllerNaviManager:SetTarget(tagCell.tagBtn)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, false)
else
local goodsGroupCell = self.m_getGoodsGroupCellFunc(curTagIndex)
if goodsGroupCell then
local gridLayout = goodsGroupCell.view.goodsListGridLayout
local lineMaxCellCount = self:_GetGridLayoutGroupHorizontalMaxCellCount(gridLayout)
local newIndex = self.m_curNaviLocalGoodsIndex + lineMaxCellCount
local curGroupTotalCellCount = goodsGroupCell.m_goodsCellCache:GetCount()
if newIndex > curGroupTotalCellCount then
local curGroupLastLineCellCount = curGroupTotalCellCount % lineMaxCellCount
local isNotLastLine = (self.m_curNaviLocalGoodsIndex + curGroupLastLineCellCount) <= curGroupTotalCellCount
if isNotLastLine then
newIndex = curGroupTotalCellCount
end
end
if newIndex > goodsGroupCell.m_goodsCellCache:GetCount() then
if curTagIndex < self.m_goodsTagCellCache:GetCount() then
local newTagIndex = curTagIndex + 1
goodsGroupCell = self.m_getGoodsGroupCellFunc(newTagIndex)
if not goodsGroupCell then
return
end
local nextGroupTotalGoodsCount = goodsGroupCell.m_goodsCellCache:GetCount()
if not goodsGroupCell or nextGroupTotalGoodsCount < 1 then
return
end
local indexInThisLine = (self.m_curNaviLocalGoodsIndex - 1) % lineMaxCellCount + 1
newIndex = math.min(indexInThisLine, nextGroupTotalGoodsCount)
self:_OnChangeSelectTagUI(newTagIndex)
else
return
end
end
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(newIndex)
if goodsCell then
self.m_curNaviLocalGoodsIndex = newIndex
InputManagerInst.controllerNaviManager:SetTarget(goodsCell.view.selectBtn)
end
end
end
end, self.view.goodsNode.inputGroup.groupId)
UIUtils.bindInputPlayerAction("shop_domain_navigation_4_dir_left", function()
if not self.m_isNaviTag then
local goodsGroupCell = self.m_getGoodsGroupCellFunc(self.m_curSelectTagIndex)
if not goodsGroupCell then
return
end
local gridLayout = goodsGroupCell.view.goodsListGridLayout
local isLeftmost = (self.m_curNaviLocalGoodsIndex - 1) % self:_GetGridLayoutGroupHorizontalMaxCellCount(gridLayout) == 0
if isLeftmost then
self:_LocalShopStopFocusGoods()
else
local newIndex = self.m_curNaviLocalGoodsIndex - 1
if newIndex <= 0 then
return
end
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(newIndex)
if goodsCell then
self.m_curNaviLocalGoodsIndex = newIndex
InputManagerInst.controllerNaviManager:SetTarget(goodsCell.view.selectBtn)
end
end
end
end, self.view.goodsNode.inputGroup.groupId)
UIUtils.bindInputPlayerAction("shop_domain_navigation_4_dir_right", function()
if self.m_isNaviTag then
self:_LocalShopFocusGoods()
else
local goodsGroupCell = self.m_getGoodsGroupCellFunc(self.m_curSelectTagIndex)
if not goodsGroupCell then
return
end
local newIndex = self.m_curNaviLocalGoodsIndex + 1
if newIndex > goodsGroupCell.m_goodsCellCache:GetCount() then
return
end
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(newIndex)
if goodsCell then
self.m_curNaviLocalGoodsIndex = newIndex
InputManagerInst.controllerNaviManager:SetTarget(goodsCell.view.selectBtn)
end
end
end, self.view.goodsNode.inputGroup.groupId)
self.m_bindIdFocus = UIUtils.bindInputPlayerAction("shop_domain_manual_focus", function()
if self.m_isNaviTag then
self:_LocalShopFocusGoods()
end
end, self.view.goodsNode.inputGroup.groupId)
self.m_bindIdStopFocus = UIUtils.bindInputPlayerAction("common_stop_focus", function()
if not self.m_isNaviTag then
self:_LocalShopStopFocusGoods()
end
end, self.view.goodsNode.inputGroup.groupId)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, false)
end
ShopTradeCtrl._GetGridLayoutGroupHorizontalMaxCellCount = HL.Method(CS.UnityEngine.UI.GridLayoutGroup).Return(HL.Number) << function(self, gridLayout)
local rectTransform = gridLayout.transform
local availableWidth = rectTransform.rect.width - gridLayout.padding.left - gridLayout.padding.right;
local totalWidthPerCell = gridLayout.cellSize.x + gridLayout.spacing.x;
local cellsPerRow = math.floor((availableWidth + gridLayout.spacing.x) / totalWidthPerCell);
return math.max(1, cellsPerRow);
end
ShopTradeCtrl._LocalShopFocusGoods = HL.Method() << function(self)
local goodsGroupCell = self.m_getGoodsGroupCellFunc(self.m_curSelectTagIndex)
if goodsGroupCell.m_goodsCellCache:GetCount() <= 0 then
local newTagIndex = self.m_curSelectTagIndex + 1
goodsGroupCell = self.m_getGoodsGroupCellFunc(newTagIndex)
self:_OnChangeSelectTagUI(newTagIndex)
end
if goodsGroupCell then
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(1)
if goodsCell then
self.m_curNaviLocalGoodsIndex = 1
InputManagerInst.controllerNaviManager:SetTarget(goodsCell.view.selectBtn)
self.m_isNaviTag = false
InputManagerInst:ToggleBinding(self.m_bindIdFocus, false)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, true)
end
end
end
ShopTradeCtrl._LocalShopStopFocusGoods = HL.Method() << function(self)
self.m_isNaviTag = true
local tagCell = self.m_goodsTagCellCache:Get(self.m_curSelectTagIndex)
InputManagerInst.controllerNaviManager:SetTarget(tagCell.tagBtn)
InputManagerInst:ToggleBinding(self.m_bindIdFocus, true)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, false)
end
ShopTradeCtrl._RefreshAllUI = HL.Method() << function(self)
if self.m_isLocalShop then
self.view.shopStateCtrl:SetState("LocalShop")
self:_RefreshLocalShopTabUI()
self:_OnChangeSelectLocalShop(true, true)
local tabNode = self.view.tabNode
tabNode.titleBgImg:LoadSprite(UIConst.UI_SPRITE_SHOP_TRADE_AREA_BG, self.m_localShopInfo.bgImg)
if not string.isEmpty(self.m_localShopInfo.icon) and #self.m_localShopInfo.icon > 0 and not self.m_showFriendRecord then
tabNode.locationIconImg.gameObject:SetActive(true)
tabNode.locationIconImg:LoadSprite(UIConst.UI_SPRITE_SHOP_TRADE_AREA_ICON, self.m_localShopInfo.icon)
else
tabNode.locationIconImg.gameObject:SetActive(false)
end
tabNode.friendRecordBtn.gameObject:SetActive(self.m_showFriendRecord)
self.view.goodsNode.goodsGroupList.onEndDrag:RemoveAllListeners()
self.view.goodsNode.goodsGroupList.onEndDrag:AddListener(function()
self.m_waitAutoScrollTagListTime = 0
end)
local domainInfo = self.m_domainInfo
self:_RefreshTitleMoneyUI(self.m_domainId, domainInfo.moneyId)
else
self.view.shopStateCtrl:SetState("FriendShop")
local shopCount = #self.m_friendShopInfoList
self.m_friendTabCellCache:Refresh(shopCount, function(cell, luaIndex)
self:_OnUpdateFriendTabCell(cell, luaIndex)
end)
self.view.tabNode.previousKeyHintParent.gameObject:SetActive(shopCount > 1)
self.view.tabNode.nextKeyHintParent.gameObject:SetActive(shopCount > 1)
self:_OnChangeSelectFriendShop(1)
end
end
ShopTradeCtrl._RefreshTitleMoneyUI = HL.Method(HL.String, HL.String) << function(self, domainId, moneyId)
local hasCfg, domainCfg = Tables.domainDataTable:TryGetValue(domainId)
local _, domainDevData = GameInstance.player.domainDevelopmentSystem.domainDevDataDic:TryGetValue(domainId)
local maxCount = domainDevData.curLevelData.moneyLimit
self.view.domainTopMoneyTitle:InitDomainTopMoneyTitle(moneyId, maxCount)
if self.m_isLocalShop then
self.view.domainTopMoneyTitle.view.titleTxt.text = string.format(Language.LUA_DOMAIN_SHOP_TITLE, domainCfg.domainName)
else
self.view.domainTopMoneyTitle.view.titleTxt.text = Language.LUA_DOMAIN_SHOP_FRIEND_TITLE
end
end
ShopTradeCtrl._OnRefreshGoodsGroupCell = HL.Method(HL.Any, HL.Number) << function(self, cell, luaIndex)
cell:InitShopTradeGoodsGroupCell()
cell.gameObject.name = "GoodsGroupCell_" .. luaIndex
if self.m_isLocalShop then
if self.m_isSelectCommonShop then
self:_RefreshGoodsGroupCellCommonMode(cell, luaIndex)
else
self:_RefreshGoodsGroupCellRandomMode(cell, luaIndex)
end
else
self:_RefreshGoodsGroupCellFriendMode(cell, luaIndex)
end
end
ShopTradeCtrl._OnRefreshGoodsTagCell = HL.Method(HL.Any, HL.Number) << function(self, cell, luaIndex)
local groupInfo
local isLastIndex = false
if self.m_isSelectCommonShop then
groupInfo = self.m_localShopInfo.commonShopInfo.goodsGroupList[luaIndex]
isLastIndex = #self.m_localShopInfo.commonShopInfo.goodsGroupList == luaIndex
else
if luaIndex == 1 then
groupInfo = self.m_localShopInfo.myPositionGoodsGroup
else
groupInfo = self.m_localShopInfo.randomShopInfo.goodsGroupList[luaIndex - 1]
isLastIndex = #self.m_localShopInfo.randomShopInfo.goodsGroupList == luaIndex - 1
end
end
cell.connectLineImg.enabled = not isLastIndex
cell.tagIconImg:LoadSprite(UIConst.UI_SPRITE_SHOP_TAG_ICON, groupInfo.tagIcon)
cell.animationWrapper:ClearTween()
cell.animationWrapper:Play(self.m_curSelectTagIndex == luaIndex and "shoptrade_goodstagcell_select" or "shoptrade_goodstagcell_noselect")
cell.tagBtn.onClick:RemoveAllListeners()
cell.tagBtn.onClick:AddListener(function()
self:_OnClickGoodsTagCell(luaIndex)
end)
cell.tagBtn.onIsNaviTargetChanged = function(isTarget)
if isTarget then
self:_OnClickGoodsTagCell(luaIndex)
end
end
cell.gameObject.name = "tag_" .. luaIndex
end
ShopTradeCtrl._OnClickGoodsTagCell = HL.Method(HL.Number) << function(self, luaIndex)
if self.m_curSelectTagIndex ~= luaIndex then
self:_OnChangeSelectTagUI(luaIndex)
self.view.goodsNode.goodsGroupList:ScrollToIndex(CSIndex(luaIndex), true, CS.Beyond.UI.UIScrollList.ScrollAlignType.Top)
end
end
ShopTradeCtrl._RefreshLocalShopTabUI = HL.Method() << function(self)
local randomTab = self.view.tabNode.shopRandomTab
local hasRandomTab = #self.m_localShopInfo.randomShopInfo.goodsGroupList > 0
self.view.tabNode.previousKeyHintParent.gameObject:SetActive(hasRandomTab)
self.view.tabNode.nextKeyHintParent.gameObject:SetActive(hasRandomTab)
if not hasRandomTab then
randomTab.gameObject:SetActive(false)
else
randomTab.gameObject:SetActive(true)
randomTab.limitCountTxt.text = self.m_localShopInfo.randomShopInfo.remainLimitCount
local profitRatio = self.m_localShopInfo.myPositionGoodsGroup.totalProfitRatio
local stateName = DomainShopUtils.getProfitArrowStateName(profitRatio)
randomTab.profitTxt.text = math.abs(profitRatio)
randomTab.profitArrowStateCtrl:SetState(stateName)
local count = #self.m_localShopInfo.myPositionGoodsGroup.goodsList
randomTab.profitLossInfo.gameObject:SetActive(count > 0)
end
end
ShopTradeCtrl._RefreshLocalShopGoodsUI = HL.Method(HL.Boolean) << function(self, isChangeTab)
local count
local isCommonShop = self.m_isSelectCommonShop
if isCommonShop then
count = #self.m_localShopInfo.commonShopInfo.goodsGroupList
else
count = #self.m_localShopInfo.randomShopInfo.goodsGroupList + 1
end
local hasPosition = #self.m_localShopInfo.myPositionGoodsGroup.goodsList > 0
self.view.goodsNode.bulkSellBtnNode.gameObject:SetActive(not isCommonShop and hasPosition)
self.view.goodsNode.goodsGroupList:UpdateCount(count, isChangeTab)
if isChangeTab then
self.m_curSelectTagIndex = 1
end
self.m_goodsTagCellCache:Refresh(count, function(cell, luaIndex)
self:_OnRefreshGoodsTagCell(cell, luaIndex)
end)
end
ShopTradeCtrl._RefreshLocalShopTabAni = HL.Method(HL.Boolean, HL.Boolean) << function(self, isCommonShop, isReset)
if isReset then
self.view.tabNode.shopCommonTab.animationWrapper:Play(isCommonShop and "shopmarkettab_in" or "shopmarkettab_reset")
self.view.tabNode.shopRandomTab.animationWrapper:Play(not isCommonShop and "shopmarkettab_in" or "shopmarkettab_reset")
else
self.view.tabNode.shopCommonTab.animationWrapper:Play(isCommonShop and "shopmarkettab_in" or "shopmarkettab_out")
self.view.tabNode.shopRandomTab.animationWrapper:Play(not isCommonShop and "shopmarkettab_in" or "shopmarkettab_out")
end
end
ShopTradeCtrl._RefreshGoodsGroupCellCommonMode = HL.Method(HL.Forward("ShopTradeGoodsGroupCell"), HL.Number) << function(self, cell, luaIndex)
local groupInfo = self.m_localShopInfo.commonShopInfo.goodsGroupList[luaIndex]
cell:SetTitleCommonUI(groupInfo.tagName, groupInfo.tagIcon, false)
cell.view.groupStateCtrl:SetState("Normal")
cell.m_goodsCellCache:Refresh(#groupInfo.goodsList, function(goodsCell, index)
local goodsInfo = groupInfo.goodsList[index]
goodsCell:InitShopTradeGoodsCellCommonMode(goodsInfo)
goodsCell.gameObject.name = "GoodsCell_" .. index
end)
end
ShopTradeCtrl._RefreshGoodsGroupCellRandomMode = HL.Method(HL.Forward("ShopTradeGoodsGroupCell"), HL.Number) << function(self, cell, luaIndex)
local groupInfo
if luaIndex == 1 then
groupInfo = self.m_localShopInfo.myPositionGoodsGroup
cell:SetTitleCommonUI(groupInfo.tagName, groupInfo.tagIcon, true)
local goodsCount = #groupInfo.goodsList
if goodsCount <= 0 then
cell.view.groupStateCtrl:SetState("EmptyPosition")
cell.m_goodsCellCache:Refresh(0)
else
cell.view.groupStateCtrl:SetState("HasPosition")
local profitInfo = {
moneyIcon = self.m_domainInfo.moneyIcon,
moneyCount = self.m_localShopInfo.myPositionGoodsGroup.totalPrice,
profit = self.m_localShopInfo.myPositionGoodsGroup.totalProfit,
profitRatio = self.m_localShopInfo.myPositionGoodsGroup.totalProfitRatio,
}
DomainShopUtils.refreshTotalMyPositionDetail(cell.view.myPositionDetail, profitInfo)
cell.m_goodsCellCache:Refresh(goodsCount, function(goodsCell, index)
local goodsInfo = groupInfo.goodsList[index]
goodsCell:InitShopTradeGoodsCellRandomMode(goodsInfo, true)
goodsCell.gameObject.name = "GoodsCell_" .. index
end)
end
else
groupInfo = self.m_localShopInfo.randomShopInfo.goodsGroupList[luaIndex - 1]
cell:SetTitleCommonUI(groupInfo.tagName, groupInfo.tagIcon, false)
cell.view.groupStateCtrl:SetState("Normal")
local goodsCount = #groupInfo.goodsList
cell.m_goodsCellCache:Refresh(goodsCount, function(goodsCell, index)
local goodsInfo = groupInfo.goodsList[index]
goodsCell:InitShopTradeGoodsCellRandomMode(goodsInfo, false)
goodsCell.gameObject.name = "GoodsCell_" .. index
end)
end
end
ShopTradeCtrl._OnUpdateFriendTabCell = HL.Method(HL.Any, HL.Number) << function(self, cell, luaIndex)
local info = self.m_friendShopInfoList[luaIndex]
cell.tabNameTxt.text = info.domainName
cell.tabIconImg:LoadSprite(UIConst.UI_SPRITE_SETTLEMENT, info.domainIcon)
cell.tabBigIconImg:LoadSprite(UIConst.UI_SPRITE_SETTLEMENT_ICON_BIG, info.domainIcon)
cell.animationWrapper:Play("friendmarkettab_reset")
cell.selectBtn.onClick:RemoveAllListeners()
cell.selectBtn.onClick:AddListener(function()
if self.m_curSelectFriendShopIndex ~= luaIndex then
self:_OnChangeSelectFriendShop(luaIndex)
end
end)
end
ShopTradeCtrl._RefreshFriendShopGoodsUI = HL.Method(HL.Boolean) << function(self, isInit)
local shopInfo = self.m_friendShopInfoList[self.m_curSelectFriendShopIndex]
local count = #shopInfo.goodsGroupList
self.view.goodsNode.goodsGroupList:UpdateCount(count, isInit)
local hasPosition = #shopInfo.myPositionGoodsGroup.goodsList > 0
self.view.goodsNode.bulkSellBtnNode.gameObject:SetActive(hasPosition)
local groupObj = self.view.goodsNode.goodsGroupList:Get(0)
local groupCell = self.m_getGoodsGroupCellFunc(groupObj)
if groupCell then
local cell = groupCell.m_goodsCellCache:Get(1)
if cell then
InputManagerInst.controllerNaviManager:SetTarget(cell.view.selectBtn)
end
end
end
ShopTradeCtrl._RefreshGoodsGroupCellFriendMode = HL.Method(HL.Forward("ShopTradeGoodsGroupCell"), HL.Number) << function(self, cell, luaIndex)
local shopInfo = self.m_friendShopInfoList[self.m_curSelectFriendShopIndex]
local groupInfo = shopInfo.goodsGroupList[luaIndex]
cell:SetTitleCommonUI(groupInfo.tagName, groupInfo.tagIcon, luaIndex == 1)
cell.view.groupStateCtrl:SetState("HasPosition")
local profitInfo = {
moneyIcon = shopInfo.moneyIcon,
moneyCount = shopInfo.myPositionGoodsGroup.totalPrice,
profit = shopInfo.myPositionGoodsGroup.totalProfit,
profitRatio = shopInfo.myPositionGoodsGroup.totalProfitRatio,
}
DomainShopUtils.refreshTotalMyPositionDetail(cell.view.myPositionDetail, profitInfo)
local goodsCount = #groupInfo.goodsList
cell.m_goodsCellCache:Refresh(goodsCount, function(goodsCell, index)
local goodsInfo = groupInfo.goodsList[index]
goodsCell:InitShopTradeGoodsCellFriendMode(goodsInfo)
goodsCell.gameObject.name = "GoodsCell_" .. index
end)
end
ShopTradeCtrl._RefreshBulkSellUI = HL.Method() << function(self)
local bulkSellNode = self.view.bulkSellNode
DomainShopUtils.refreshTotalMyPositionDetail(bulkSellNode.myPositionDetail, self.m_bulkSellInfo.profitInfo)
local goodsCount = #self.m_bulkSellInfo.goodsList
bulkSellNode.goodsList:UpdateCount(goodsCount, true)
self:_RefreshBulkSellSelectState()
local obj = bulkSellNode.goodsList:Get(0)
local cell = self.m_getBulkSellGoodsCellFunc(obj)
if cell then
InputManagerInst.controllerNaviManager:SetTarget(cell.view.selectBtn)
end
end
ShopTradeCtrl._OnSelectBulkSellGoods = HL.Method(HL.Number) << function(self, luaIndex)
local bulkInfo = self.m_bulkSellInfo
local oldIndex = bulkInfo.curFocusGoodsIndex
local oldObj = self.view.bulkSellNode.goodsList:Get(CSIndex(oldIndex))
local newObj = self.view.bulkSellNode.goodsList:Get(CSIndex(luaIndex))
local oldCell = self.m_getBulkSellGoodsCellFunc(oldObj)
local newCell = self.m_getBulkSellGoodsCellFunc(newObj)
if oldIndex == luaIndex then
bulkInfo.curFocusGoodsIndex = 0
local count = bulkInfo.selectCountList[oldIndex]
local reward = bulkInfo.goodsList[oldIndex].todayPrice * count
bulkInfo.totalReward = bulkInfo.totalReward - reward
bulkInfo.selectCountList[oldIndex] = nil
if oldCell then
oldCell:SetSelectCount(0)
oldCell:SetSelectState(false)
end
else
bulkInfo.curFocusGoodsIndex = luaIndex
local curCount = bulkInfo.selectCountList[luaIndex]
if curCount == nil then
curCount = 1
bulkInfo.selectCountList[luaIndex] = 1
bulkInfo.totalReward = bulkInfo.totalReward + bulkInfo.goodsList[luaIndex].todayPrice
end
if oldCell then
oldCell:SetSelectState(false)
end
if newCell then
newCell:SetSelectCount(curCount)
newCell:SetSelectState(true)
end
end
self.view.bulkSellNode.goodsList:ScrollToIndex(CSIndex(luaIndex))
self:_RefreshBulkSellSelectState()
end
ShopTradeCtrl._RefreshBulkSellSelectState = HL.Method() << function(self)
local bulkSellNode = self.view.bulkSellNode
local curIndex = self.m_bulkSellInfo.curFocusGoodsIndex
if curIndex == 0 then
bulkSellNode.selectStateCtrl:SetState("noSelect")
return
end
bulkSellNode.selectStateCtrl:SetState("hasSelect")
local goodsInfo = self.m_bulkSellInfo.goodsList[curIndex]
bulkSellNode.goodsName.text = goodsInfo.itemName
bulkSellNode.avgPriceTxt.text = goodsInfo.positionAvgPrice
bulkSellNode.curPriceTxt.text = goodsInfo.todayPrice
bulkSellNode.curPriceRatioTxt.text = goodsInfo.profitRatio
bulkSellNode.profitArrowStateCtrl:SetState(DomainShopUtils.getProfitArrowStateName(goodsInfo.profitRatio))
bulkSellNode.moneyIcon1:LoadSprite(UIConst.UI_SPRITE_WALLET, goodsInfo.moneyIcon)
bulkSellNode.moneyIcon2:LoadSprite(UIConst.UI_SPRITE_WALLET, goodsInfo.moneyIcon)
bulkSellNode.moneyIcon3:LoadSprite(UIConst.UI_SPRITE_WALLET, goodsInfo.moneyIcon)
bulkSellNode.totalRewardMoneyTxt.text = self.m_bulkSellInfo.totalReward
local selectCount = self.m_bulkSellInfo.selectCountList[curIndex]
bulkSellNode.numberSelector:InitNumberSelector(selectCount, 1, goodsInfo.itemCount, self.m_onSelectorNumberChanged)
end
ShopTradeCtrl._OnRefreshBulkSellGoodsCell = HL.Method(HL.Forward("ShopTradeGoodsCell"), HL.Number) << function(self, cell, luaIndex)
local info = self.m_bulkSellInfo.goodsList[luaIndex]
cell:InitShopTradeGoodsCellBulkSellMode(info, luaIndex, self.m_onClickBulkSellGoods)
cell.gameObject.name = "GoodsCell_" .. luaIndex
end
ShopTradeCtrl._OnChangeSelectLocalShop = HL.Method(HL.Boolean, HL.Opt(HL.Boolean)) << function(self, isCommonShop, isInit)
shopSystem:SetGoodsIdSee()
self.m_isSelectCommonShop = isCommonShop
self:_RefreshLocalShopGoodsUI(true)
self:_RefreshLocalShopTabAni(isCommonShop, not not isInit)
local cell = self.m_goodsTagCellCache:Get(self.m_curSelectTagIndex)
if cell then
InputManagerInst.controllerNaviManager:SetTarget(cell.tagBtn)
InputManagerInst:ToggleBinding(self.m_bindIdStopFocus, false)
self.m_isNaviTag = true
end
end
ShopTradeCtrl._OnChangeSelectTagUI = HL.Method(HL.Number) << function(self, newIndex)
local oldIndex = self.m_curSelectTagIndex
self.m_curSelectTagIndex = newIndex
local oldCell = self.m_goodsTagCellCache:Get(oldIndex)
if oldCell then
oldCell.animationWrapper:Play("shoptrade_goodstagcell_noselect")
end
local newCell = self.m_goodsTagCellCache:Get(newIndex)
if newCell then
newCell.animationWrapper:Play("shoptrade_goodstagcell_select")
end
end
ShopTradeCtrl._OnChangeSelectFriendShop = HL.Method(HL.Number) << function(self, luaIndex)
local oldIndex = self.m_curSelectFriendShopIndex
self.m_curSelectFriendShopIndex = luaIndex
local oldCell = self.m_friendTabCellCache:Get(oldIndex)
if oldCell then
oldCell.animationWrapper:Play("friendmarkettab_out")
end
local newCell = self.m_friendTabCellCache:Get(luaIndex)
if newCell then
newCell.animationWrapper:Play("friendmarkettab_in")
end
local shopInfo = self.m_friendShopInfoList[luaIndex]
self:_RefreshFriendShopGoodsUI(true)
self:_RefreshTitleMoneyUI(shopInfo.domainId, shopInfo.moneyId)
end
ShopTradeCtrl._OnChangeBulkSellSelectCount = HL.Method(HL.Number) << function(self, curNumber)
local bulkInfo = self.m_bulkSellInfo
local curIndex = bulkInfo.curFocusGoodsIndex
local goodsInfo = bulkInfo.goodsList[curIndex]
local oldCount = bulkInfo.selectCountList[curIndex]
if oldCount == nil then
oldCount = 0
bulkInfo.selectCountList[curIndex] = 0
end
local countDiff = curNumber - oldCount
bulkInfo.selectCountList[curIndex] = curNumber
bulkInfo.totalReward = bulkInfo.totalReward + goodsInfo.todayPrice * countDiff
self.view.bulkSellNode.totalRewardMoneyTxt.text = bulkInfo.totalReward
self.view.bulkSellNode.numberSelector:RefreshNumber(
curNumber,
1,
goodsInfo.itemCount
)
local obj = self.view.bulkSellNode.goodsList:Get(CSIndex(curIndex))
local cell = self.m_getBulkSellGoodsCellFunc(obj)
if cell then
cell:SetSelectCount(curNumber)
end
end
ShopTradeCtrl._OnConfirmBulkSellGoods = HL.Method() << function(self)
local roleId
local shopId
local isSellLocal
if self.m_isLocalShop then
roleId = GameInstance.player.roleId
shopId = self.m_localShopInfo.randomShopInfo.shopId
isSellLocal = true
else
roleId = self.m_friendRoleId
shopId = self.m_friendShopInfoList[self.m_curSelectFriendShopIndex].shopId
isSellLocal = false
end
local goodsIds = {}
local goodsCountList = {}
for index, count in pairs(self.m_bulkSellInfo.selectCountList) do
table.insert(goodsIds, self.m_bulkSellInfo.goodsList[index].goodsId)
table.insert(goodsCountList, count)
end
shopSystem:SendSellGoods(roleId, shopId, goodsIds, goodsCountList, isSellLocal)
self.m_waitBulkSellResp = true
end
ShopTradeCtrl._OnBuyItemSuccess = HL.Method(HL.Any) << function(self, msg)
shopSystem:SetGoodsIdSee()
if self.m_isLocalShop then
if self.m_isSelectCommonShop then
self:_RefreshSingleGoods(msg)
else
self:_UpdateData()
self:_RefreshLocalShopGoodsUI(false)
self:_RefreshLocalShopTabUI()
end
else
self:_UpdateData()
self:_RefreshFriendShopGoodsUI(false)
end
end
ShopTradeCtrl._RefreshSingleGoods = HL.Method(HL.Any) << function(self, msg)
local unpackMsg = unpack(msg)
local goodsId = unpackMsg.GoodsId
local searchInfo = self.m_commonShopRefreshGoodsSearchMap[goodsId]
local goodsInfo = searchInfo.goodsInfo
local _, goodsCfg = Tables.shopGoodsTable:TryGetValue(goodsId)
local itemBundle = UIUtils.getRewardFirstItem(goodsCfg.rewardId)
local itemId = itemBundle.id
goodsInfo.remainLimitCount = shopSystem:GetRemainCountByGoodsId(unpackMsg.ShopId, goodsId)
goodsInfo.itemCount = Utils.getItemCount(itemId, true, true)
goodsInfo.remainLimitSort = goodsInfo.remainLimitCount == 0 and 1 or 0
local goodsGroupCell = self.m_getGoodsGroupCellFunc(searchInfo.groupIndex)
if goodsGroupCell then
local goodsCell = goodsGroupCell.m_goodsCellCache:Get(searchInfo.goodsIndex)
if goodsCell then
goodsCell:InitShopTradeGoodsCellCommonMode(goodsInfo)
end
end
end
ShopTradeCtrl._OnSellItemSuccess = HL.Method(HL.Any) << function(self, msg)
shopSystem:SetGoodsIdSee()
if self.m_waitBulkSellResp then
self.m_waitBulkSellResp = false
self:_ShowBulkSellNode(false)
local items = {
{
id = self.m_bulkSellInfo.profitInfo.moneyId,
count = self.m_bulkSellInfo.totalReward,
}
}
Notify(MessageConst.SHOW_SYSTEM_REWARDS, {
title = Language.LUA_SELL_ITEM_SUCC_TITLE,
icon = "icon_common_rewards",
items = items,
onComplete = function()
Notify(MessageConst.AFTER_ON_BUY_ITEM_SUCC)
end,
})
end
self:_UpdateData()
if self.m_isLocalShop then
self:_RefreshLocalShopGoodsUI(false)
self:_RefreshLocalShopTabUI()
else
self:_RefreshFriendShopGoodsUI(false)
end
end
ShopTradeCtrl._OnShopRefresh = HL.Method() << function(self)
if self.m_isLocalShop then
shopSystem:SetGoodsIdSee()
self:_UpdateData()
self:_RefreshAllUI()
end
end
ShopTradeCtrl._OnFriendShopRefresh = HL.Method() << function(self)
if not self.m_isLocalShop then
shopSystem:SetGoodsIdSee()
self:_UpdateData()
self:_RefreshAllUI()
end
end
ShopTradeCtrl._ShowBulkSellNode = HL.Method(HL.Boolean) << function(self, isShow)
self.view.bulkSellNode.gameObject:SetActive(isShow)
InputManagerInst:ToggleGroup(self.view.goodsNode.inputGroup.groupId, not isShow)
AudioManager.PostEvent(isShow and "Au_UI_Popup_Common_Large_Open" or "Au_UI_Popup_Common_Large_Close")
end
ShopTradeCtrl._UpdateReadInfo = HL.Method(HL.String) << function(self, goodsId)
shopSystem:RecordSeeGoodsId(goodsId)
end
HL.Commit(ShopTradeCtrl)