365 lines
13 KiB
Lua
365 lines
13 KiB
Lua
local ShopComp = class("ShopComp", LuaComponent)
|
|
|
|
local TOP_HEIGHT = 136
|
|
local BOTTOM_HEIGHT = 218
|
|
local TITLE_HEIGHT = 54
|
|
local PAGE_DISCOUNT = 1
|
|
local PAGE_MAIN = 2
|
|
local TITLE_POS = -100
|
|
local PAGE_MAIN_BOX_SELL_CELL = "app/ui/shop/cell/box_sell_cell"
|
|
local PAGE_MAIN_HOT_SELL_CELL = "app/ui/shop/cell/hot_sell_cell"
|
|
local PAGE_MAIN_GEM_SELL_CELL = "app/ui/shop/cell/gem_sell_cell"
|
|
local PAGE_MAIN_GOLD_SELL_CELL = "app/ui/shop/cell/gold_sell_cell"
|
|
|
|
local PAGE_DISCOUNT_CHAPTER_SELL_CELL = "app/ui/shop/cell/chapter_sell_cell" -- 章节
|
|
local PAGE_DISCOUNT_BEGINNER_SELL_CELL = "app/ui/shop/cell/beginner_sell_cell" -- 新手
|
|
local PAGE_DISCOUNT_LEVEL_SELL_CELL = "app/ui/shop/cell/level_sell_cell" -- 助力
|
|
local PAGE_DISCOUNT_GROW_SELL_CELL = "app/ui/shop/cell/grow_sell_cell" -- 成长
|
|
local PAGE_DISCOUNT_COIN_SELL_CELL = "app/ui/shop/cell/coin_sell_cell" -- 金币
|
|
|
|
function ShopComp:init()
|
|
self.uiMap = self.baseObject:genAllChildren()
|
|
|
|
self.page = PAGE_MAIN -- 默认展示主要商品
|
|
self.post = false
|
|
|
|
self:initTitlePage()
|
|
self:initMainPage()
|
|
self:initDiscountPage()
|
|
self:switchPage(self.page)
|
|
end
|
|
|
|
function ShopComp:initTitlePage()
|
|
self.titleNode = self.uiMap["shop_comp.title_node"]
|
|
|
|
self.subTitleText1 = self.uiMap["shop_comp.title_node.btn_cell_1.text"]
|
|
self.subTitleSelectText1 = self.uiMap["shop_comp.title_node.btn_cell_1.select_text"]
|
|
self.subTitleIcon1 = self.uiMap["shop_comp.title_node.btn_cell_1.icon"]
|
|
self.subTitleBtn1 = self.uiMap["shop_comp.title_node.btn_cell_1"]
|
|
|
|
self.subTitleText2 = self.uiMap["shop_comp.title_node.btn_cell_2.text"]
|
|
self.subTitleSelectText2 = self.uiMap["shop_comp.title_node.btn_cell_2.select_text"]
|
|
self.subTitleIcon2 = self.uiMap["shop_comp.title_node.btn_cell_2.icon"]
|
|
self.subTitleBtn2 = self.uiMap["shop_comp.title_node.btn_cell_2"]
|
|
|
|
self.subTitleText1:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_16)) -- 特惠商品
|
|
self.subTitleSelectText1:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_16)) -- 特惠商品
|
|
self.subTitleText2:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_17)) -- 主要商品
|
|
self.subTitleSelectText2:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_17)) -- 主要商品
|
|
|
|
self.subTitleBtn1:addClickListener(function()
|
|
self:switchPage(PAGE_DISCOUNT)
|
|
end)
|
|
self.subTitleBtn2:addClickListener(function()
|
|
self:switchPage(PAGE_MAIN)
|
|
end)
|
|
self:refreshTitle()
|
|
|
|
local safeHeight = SafeAreaManager:getNotchScreenHeight()
|
|
self.titleNode:setAnchoredPositionY(TITLE_POS - safeHeight)
|
|
if GFunc.isShenhe() then
|
|
self.subTitleBtn2:setAnchoredPositionX(0)
|
|
self.subTitleBtn1:setVisible(false)
|
|
end
|
|
end
|
|
|
|
function ShopComp:refreshTitle()
|
|
if self.page == PAGE_DISCOUNT then
|
|
self.subTitleText1:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
self.subTitleSelectText1:setAnchoredPositionY(0)
|
|
self.subTitleIcon1:setAnchoredPositionY(0)
|
|
|
|
self.subTitleText2:setAnchoredPositionY(0)
|
|
self.subTitleSelectText2:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
self.subTitleIcon2:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
else
|
|
self.subTitleText1:setAnchoredPositionY(0)
|
|
self.subTitleSelectText1:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
self.subTitleIcon1:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
|
|
self.subTitleText2:setAnchoredPositionY(GConst.NOT_VISIBLE_POS)
|
|
self.subTitleSelectText2:setAnchoredPositionY(0)
|
|
self.subTitleIcon2:setAnchoredPositionY(0)
|
|
end
|
|
end
|
|
|
|
function ShopComp:switchPage(page)
|
|
if page == PAGE_DISCOUNT and GFunc.isShenhe() then
|
|
page = PAGE_MAIN
|
|
end
|
|
if self.page ~= page then
|
|
self.page = page
|
|
self.post = false
|
|
self:refresh()
|
|
end
|
|
end
|
|
|
|
function ShopComp:goSubType(subType)
|
|
local scrollRectObj = self.uiMap["shop_comp.main.scrollrect"]
|
|
local contentObj = self.uiMap["shop_comp.main.scrollrect.viewport.content"]
|
|
local boxHeight = 0
|
|
if self.boxSellCell and self.boxSellCell:getIsOpen() then
|
|
boxHeight = self.boxSellCell:getCellHeight()
|
|
end
|
|
local hotHeight = 0
|
|
if self.hotSellCell and self.hotSellCell:getIsOpen() then
|
|
hotHeight = self.hotSellCell:getCellHeight()
|
|
end
|
|
local gemHeight = 0
|
|
if self.gemSellCell and self.gemSellCell:getIsOpen() then
|
|
gemHeight = self.gemSellCell:getCellHeight()
|
|
end
|
|
local goldHeight = 0
|
|
if self.goldSellCell and self.goldSellCell:getIsOpen() then
|
|
goldHeight = self.goldSellCell:getCellHeight()
|
|
end
|
|
local maxHeight = math.min(boxHeight + hotHeight + gemHeight + goldHeight - scrollRectObj:fastGetSizeDeltaY())
|
|
local height = 0
|
|
if subType == GConst.ShopConst.MAIN_PAGE_TYPE.BOX then
|
|
-- 默认在开头
|
|
elseif subType == GConst.ShopConst.MAIN_PAGE_TYPE.HOT then
|
|
height = height + boxHeight
|
|
elseif subType == GConst.ShopConst.MAIN_PAGE_TYPE.GEM then
|
|
height = height + boxHeight + hotHeight
|
|
elseif subType == GConst.ShopConst.MAIN_PAGE_TYPE.GOLD then
|
|
height = height + boxHeight + hotHeight + gemHeight
|
|
end
|
|
contentObj:setAnchoredPositionY(math.min(height, maxHeight))
|
|
end
|
|
|
|
function ShopComp:initMainPage()
|
|
self.mainNode = self.uiMap["shop_comp.main"]
|
|
local scrollrect = self.uiMap["shop_comp.main.scrollrect"]
|
|
local height = self.baseObject:getTransform().rect.height
|
|
height = height - TITLE_HEIGHT - TOP_HEIGHT - BOTTOM_HEIGHT
|
|
local safeHeight = SafeAreaManager:getNotchScreenHeight()
|
|
height = height - safeHeight
|
|
scrollrect:setSizeDeltaY(height)
|
|
self.mainScrollContent = self.uiMap["shop_comp.main.scrollrect.viewport.content"]
|
|
self.boxSellCell = self.uiMap["shop_comp.main.scrollrect.viewport.content.box_sell_cell"]:addLuaComponent(PAGE_MAIN_BOX_SELL_CELL)
|
|
self.hotSellCell = self.uiMap["shop_comp.main.scrollrect.viewport.content.hot_sell_cell"]:addLuaComponent(PAGE_MAIN_HOT_SELL_CELL)
|
|
self.gemSellCell = self.uiMap["shop_comp.main.scrollrect.viewport.content.gem_sell_cell"]:addLuaComponent(PAGE_MAIN_GEM_SELL_CELL)
|
|
self.goldSellCell = self.uiMap["shop_comp.main.scrollrect.viewport.content.gold_sell_cell"]:addLuaComponent(PAGE_MAIN_GOLD_SELL_CELL)
|
|
end
|
|
|
|
function ShopComp:initDiscountPage()
|
|
self.discountNode = self.uiMap["shop_comp.discount"]
|
|
local scrollrect = self.uiMap["shop_comp.discount.scrollrect"]
|
|
local height = self.baseObject:getTransform().rect.height
|
|
height = height - TITLE_HEIGHT - TOP_HEIGHT - BOTTOM_HEIGHT
|
|
local safeHeight = SafeAreaManager:getNotchScreenHeight()
|
|
height = height - safeHeight
|
|
scrollrect:setSizeDeltaY(height)
|
|
self.discountContent = self.uiMap["shop_comp.discount.scrollrect.viewport.content"]
|
|
self.chapterSellCell = self.uiMap["shop_comp.discount.scrollrect.viewport.content.chapter_sell_cell"]:addLuaComponent(PAGE_DISCOUNT_CHAPTER_SELL_CELL)
|
|
self.beginnerSellCell = self.uiMap["shop_comp.discount.scrollrect.viewport.content.beginner_sell_cell"]:addLuaComponent(PAGE_DISCOUNT_BEGINNER_SELL_CELL)
|
|
self.levelSellCell = self.uiMap["shop_comp.discount.scrollrect.viewport.content.level_sell_cell"]:addLuaComponent(PAGE_DISCOUNT_LEVEL_SELL_CELL)
|
|
self.growSellCell = self.uiMap["shop_comp.discount.scrollrect.viewport.content.grow_sell_cell"]:addLuaComponent(PAGE_DISCOUNT_GROW_SELL_CELL)
|
|
self.coinSellCell = self.uiMap["shop_comp.discount.scrollrect.viewport.content.coin_sell_cell"]:addLuaComponent(PAGE_DISCOUNT_COIN_SELL_CELL)
|
|
end
|
|
|
|
function ShopComp:refresh()
|
|
if self.page == PAGE_DISCOUNT then
|
|
self.mainNode:setAnchoredPositionX(GConst.NOT_VISIBLE_POS)
|
|
self.discountNode:setAnchoredPositionX(0)
|
|
DataManager.ShopData:markShopDiscountRedPoint()
|
|
self.subTitleBtn1:removeRedPoint()
|
|
else
|
|
self.mainNode:setAnchoredPositionX(0)
|
|
self.discountNode:setAnchoredPositionX(GConst.NOT_VISIBLE_POS)
|
|
if DataManager.ShopData:getShopDiscountRedPoint() then
|
|
self.subTitleBtn1:addRedPoint(-84, 24)
|
|
else
|
|
self.subTitleBtn1:removeRedPoint()
|
|
end
|
|
end
|
|
|
|
self:refreshTitle()
|
|
self:refreshDiscountPage()
|
|
self:refreshMainPage()
|
|
|
|
-- 如果已经跨天了 需要重新请求每日礼包数据
|
|
if DataManager.ShopData:getMallDailyDirty() then
|
|
DataManager.ShopData:markMallDailyDirty(false)
|
|
ModuleManager.ShopManager:mallDailyGiftOverDay()
|
|
end
|
|
|
|
self:refreshTime()
|
|
|
|
-- 上报
|
|
self:postEnterPage()
|
|
end
|
|
|
|
function ShopComp:postEnterPage()
|
|
if self.post then
|
|
return
|
|
end
|
|
self.post = true
|
|
|
|
if self.page == PAGE_DISCOUNT then
|
|
-- 找到所有的项目
|
|
-- 章节
|
|
local actIdList = DataManager.ShopData:getActChapterStoreCanBuyActIds()
|
|
if actIdList and #actIdList > 0 then
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.ACT_CHAPTER_STORE, actIdList[1]) -- 约定上报第一个付费项
|
|
end
|
|
-- 新手
|
|
if not DataManager.ShopData:getBeginnerGiftHasBuy() then
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.BEGINNER_GIFT, GConst.ShopConst.BEGINNER_GIFT_ID)
|
|
end
|
|
-- 助力
|
|
local actIdList = DataManager.ShopData:getLevelUpGiftActIds()
|
|
if actIdList and #actIdList > 0 then
|
|
for _, id in ipairs(actIdList) do
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.LEVEL_UP_GIFT, id)
|
|
end
|
|
end
|
|
-- 成长
|
|
local actIdList = DataManager.ShopData:getValidGrowUpGifts()
|
|
if actIdList and #actIdList > 0 then
|
|
for _, id in ipairs(actIdList) do
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.GROW_UP_GIFT, id)
|
|
end
|
|
end
|
|
-- 金币
|
|
local actId = DataManager.ShopData:getValidCoinGiftId()
|
|
if actId and actId > 0 then
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.COIN_GIFT, actId)
|
|
end
|
|
else
|
|
-- 找到所有的钻石项目
|
|
BIReport:postPayUIShow(BIReport.GIFT_TYPE.MALL_TREASURE, 2) -- 约定上报第一个付费项
|
|
end
|
|
end
|
|
|
|
function ShopComp:clearPostFlag()
|
|
self.post = false
|
|
end
|
|
|
|
function ShopComp:refreshTime()
|
|
if self.hotSellCell and self.hotSellCell:getIsOpen() then
|
|
self.hotSellCell:refreshTime()
|
|
end
|
|
local coinCellCount = 0
|
|
if self.coinSellCell and self.coinSellCell:getIsOpen() then
|
|
coinCellCount = self.coinSellCell:getCellCount()
|
|
self.coinSellCell:refreshTime()
|
|
end
|
|
if self.coinCellCount ~= coinCellCount then
|
|
self.coinCellCount = coinCellCount
|
|
DataManager.ShopData:setDirty()
|
|
end
|
|
local growCellCount = 0
|
|
if self.growSellCell and self.growSellCell:getIsOpen() then
|
|
growCellCount = self.growSellCell:getCellCount()
|
|
self.growSellCell:refreshTime()
|
|
end
|
|
if self.growCellCount ~= growCellCount then
|
|
self.growCellCount = growCellCount
|
|
DataManager.ShopData:setDirty()
|
|
end
|
|
end
|
|
|
|
function ShopComp:refreshDiscountPage()
|
|
local y = 0
|
|
local cellHeight = 0
|
|
-- 章节
|
|
if self.chapterSellCell:getIsOpen() then
|
|
self.chapterSellCell:setVisible(true)
|
|
self.chapterSellCell:refresh()
|
|
self.chapterSellCell:getBaseObject():setAnchoredPositionY(0)
|
|
cellHeight = self.chapterSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.chapterSellCell:setVisible(false)
|
|
end
|
|
-- 新手
|
|
if self.beginnerSellCell:getIsOpen() then
|
|
self.beginnerSellCell:setVisible(true)
|
|
self.beginnerSellCell:refresh()
|
|
self.beginnerSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.beginnerSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.beginnerSellCell:setVisible(false)
|
|
end
|
|
-- 助力
|
|
if self.levelSellCell:getIsOpen() then
|
|
self.levelSellCell:setVisible(true)
|
|
self.levelSellCell:refresh()
|
|
self.levelSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.levelSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.levelSellCell:setVisible(false)
|
|
end
|
|
-- 成长
|
|
if self.growSellCell:getIsOpen() then
|
|
self.growSellCell:setVisible(true)
|
|
self.growSellCell:refresh()
|
|
self.growSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.growSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.growSellCell:setVisible(false)
|
|
end
|
|
-- 金币
|
|
if self.coinSellCell:getIsOpen() then
|
|
self.coinSellCell:setVisible(true)
|
|
self.coinSellCell:refresh()
|
|
self.coinSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.coinSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.coinSellCell:setVisible(false)
|
|
end
|
|
self.discountContent:setSizeDeltaY(y)
|
|
end
|
|
|
|
function ShopComp:refreshMainPage()
|
|
local y = 0
|
|
local cellHeight = 0
|
|
-- 宝箱
|
|
if self.boxSellCell:getIsOpen() then
|
|
self.boxSellCell:setVisible(true)
|
|
self.boxSellCell:refresh()
|
|
self.boxSellCell:getBaseObject():setAnchoredPositionY(0)
|
|
cellHeight = self.boxSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.boxSellCell:setVisible(false)
|
|
end
|
|
-- 每日特惠
|
|
if self.hotSellCell:getIsOpen() then
|
|
self.hotSellCell:setVisible(true)
|
|
self.hotSellCell:refresh()
|
|
self.hotSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.hotSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.hotSellCell:setVisible(false)
|
|
end
|
|
-- 钻石
|
|
if self.gemSellCell:getIsOpen() then
|
|
self.gemSellCell:setVisible(true)
|
|
self.gemSellCell:refresh()
|
|
self.gemSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.gemSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.gemSellCell:setVisible(false)
|
|
end
|
|
-- 金币
|
|
if self.goldSellCell:getIsOpen() then
|
|
self.goldSellCell:setVisible(true)
|
|
self.goldSellCell:refresh()
|
|
self.goldSellCell:getBaseObject():setAnchoredPositionY(-y)
|
|
cellHeight = self.goldSellCell:getCellHeight()
|
|
y = y + cellHeight
|
|
else
|
|
self.goldSellCell:setVisible(false)
|
|
end
|
|
self.mainScrollContent:setSizeDeltaY(y)
|
|
end
|
|
|
|
return ShopComp |