源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

271 regels
8.4 KiB

WardrobeShopView = WardrobeShopView or BaseClass(BaseItem)
local WardrobeShopView = WardrobeShopView
WardrobeShopView.SHOP_TYPE = {
SINGLE = 1,
DOUBLE = 2,
}
local table_insert = table.insert
function WardrobeShopView:__init()
self.base_file = "wardrobe"
self.layout_file = "WardrobeShopView"
self.model = WardrobeModel:GetInstance()
self.cur_tab_index = 1
self.tab_item_list = {}--左边tab
self.top_goods_item_list = {}--主打商品表
self.shop_bg_position = {
[1] = {x = 30.5, y = 7.5},
[2] = {x = 140.5, y = 90.5},
}
self.ani_left = -200
self.ani_right = 400
self.adjust_mid = {left = 50, right = 640}
self:Load()
end
function WardrobeShopView:Load_callback()
self.nodes = {
"right/help_btn:obj", "right/bg:raw",
"right/item_scroll/Viewport/item_con", "right/item_scroll:obj",
"left/tab_con",
"right/shop_scroll/Viewport/shop_item", "right/shop_scroll:obj",
--中间总览
"mid/total_mid_con/icon_image:obj:img", "mid/icon_small_image:obj:img",
"mid/total_mid_con/wardrobe_text:txt", "mid/total_mid_con:obj",
--中间商城
"mid/shop_mid_con/shop_bg2:obj:img", "mid/shop_mid_con/shop_bg1:obj:img", "mid/shop_mid_con:obj",
"mid/shop_mid_con/tip_bg:obj", "mid/shop_mid_con/tip_text:tmp",
"mid/shop_mid_con/shop_bg2/shop_item_con2", "mid/shop_mid_con/shop_bg1/shop_item_con1",
}
self:GetChildren(self.nodes)
lua_resM:setOutsideImageSprite(self, self.shop_bg1_img, GameResPath.GetWardrobeImage("wardrobe_shop_mid_bg"))
lua_resM:setOutsideImageSprite(self, self.shop_bg2_img, GameResPath.GetWardrobeImage("wardrobe_shop_mid_bg"))
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function WardrobeShopView:AddEvents( )
local function on_click( target )
if self.help_btn_obj == target then
GlobalEventSystem:Fire(EventName.OPEN_INSTRUCTION_VIEW, 42200)
end
end
AddClickEvent(self.help_btn_obj, on_click)
local function on_update_total( )
self:UpdateTabItem()
self:UpdateTotalList()
end
self.on_update_total_id = self.model:BindOne("wardrobe_total_info", on_update_total)
local function on_update_shop( )
self:UpdateShopList()
end
self.on_update_shop_id = self.model:BindOne("wardrobe_shop_info", on_update_shop)
end
function WardrobeShopView:UpdateView( )
self:UpdateTabItem()
self:SwitchTab(self.cur_tab_index)
end
function WardrobeShopView:SetData( index, sub_index )
self.cur_tab_index = sub_index or self.cur_tab_index
if sub_index then
self.model:Fire(WardrobeConst.REQ_WARDROBE_SCMD, 42202, sub_index - 1)
end
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function WardrobeShopView:SwitchTab( index )
if self.cur_tab_index ~= index and index ~= 1 then
self.model:Fire(WardrobeConst.REQ_WARDROBE_SCMD, 42202, index - 1)
end
self.cur_tab_index = index
self.icon_small_image_obj:SetActive(self.cur_tab_index ~= 1)
self.item_scroll_obj:SetActive(self.cur_tab_index == 1)
self.shop_scroll_obj:SetActive(self.cur_tab_index ~= 1)
self.total_mid_con_obj:SetActive(self.cur_tab_index == 1)
self.shop_mid_con_obj:SetActive(self.cur_tab_index ~= 1)
if self.cur_tab_index == 1 then--选中总览了
self:UpdateTotalList()
else
self:UpdateShopList()
end
for i,v in ipairs(self.tab_item_list) do
v:SetItemSelect(self.cur_tab_index)
end
end
function WardrobeShopView:UpdateTabItem( )
local data = DeepCopy(Config.Wardrobeopen)
table_insert(data, 1, {store_name = "风采总览",condition = 0, icon = 0})
local height = 56
local y_offset = 10
local function call_back_func( index)
self:SwitchTab(index)
end
if not self.tab_data then
self.tab_data = data
end
for i,v in ipairs(data) do
local item = self.tab_item_list[i]
if not item then
item = WardrobeVerTabItem.New(self.tab_con)
item:SetPosition(0, -(i - 1) * (height + y_offset))
self.tab_item_list[i] = item
end
item:SetData(v,i, call_back_func, self.cur_tab_index)
end
end
function WardrobeShopView:UpdateShopList( )
local cfg_data = Config.Wardrobeopen
if cfg_data and cfg_data[self.cur_tab_index - 1] then
local cur_stage = self.model:GetMyWardrobeStage()
if cur_stage < cfg_data[self.cur_tab_index - 1].condition then
self.tip_bg_obj:SetActive(true)
if Config.Wardrobestage[cfg_data[self.cur_tab_index - 1].condition] then
self.tip_text_tmp.text = string.format("风采值达到 %s 解锁本货柜", HtmlColorTxt(Config.Wardrobestage[cfg_data[self.cur_tab_index - 1].condition].low_value, "#FDFFC2"))
end
else
self.tip_bg_obj:SetActive(false)
self.tip_text_tmp.text = ""
end
else
self.tip_bg_obj:SetActive(false)
self.tip_text_tmp.text = ""
end
if not self.tab_data or self.cur_tab_index == 1 then--没有构造好数据的时候不让进来
return
end
local cfg_data = self.model:GetWardrobeShopCFGByID(self.tab_data[self.cur_tab_index].store_id)
local server_data = self.model:GeteWardrobeShopInfo(self.tab_data[self.cur_tab_index].store_id)
local data = {}
local top_data = {}
for i,v in pairsByKeys(cfg_data) do
if v.is_top == 1 then--是主打
if TableSize(top_data) < 2 and server_data[v.pos] then--有服务端数据才插进去
table_insert(top_data, v)
elseif server_data[v.pos] then--有服务端数据才插进去
table_insert(data, v)
end
elseif server_data[v.pos] then--有服务端数据才插进去
table_insert(data, v)
end
end
self:UpdateTopGoods(top_data, server_data)
if not self.shop_item_list_com then
self.shop_item_list_com = self:AddUIComponent(UI.ItemListCreator)
end
self.shop_item_list_com:Reset()
local info = {
data_list = data,
item_con = self.shop_item,
item_class = WardrobeShopItem,
item_height = 157,
item_width = 126,
start_x = 0,
space_x = 2,
start_y = 0,
scroll_view = self.shop_scroll.transform,
create_frequency = 0.05,
is_scroll_back_on_update = false,
child_names = child_names,
on_update_item = function(item, i, v)
item:SetData(v,i)
item:SetServerData(server_data[v.pos])
end,
}
self.shop_item_list_com:UpdateItems(info)
end
--更新主打商品
function WardrobeShopView:UpdateTopGoods( data, server_data)
local len = TableSize(data)
for i,v in ipairs(self.top_goods_item_list) do
v:SetVisible(false)
end
if len == 0 then
self.shop_bg1_obj:SetActive(false)
self.shop_bg2_obj:SetActive(false)
elseif len == 1 then
self.shop_bg1_obj:SetActive(true)
self.shop_bg2_obj:SetActive(false)
SetAnchoredPosition(self.shop_bg1,self.shop_bg_position[len].x, self.shop_bg_position[len].y)
else
self.shop_bg1_obj:SetActive(true)
self.shop_bg2_obj:SetActive(true)
SetAnchoredPosition(self.shop_bg1,self.shop_bg_position[len].x, self.shop_bg_position[len].y)
end
for i,v in ipairs(data) do
local item = self.top_goods_item_list[i]
if not item then
item = WardrobeShopItem.New(self["shop_item_con"..i])
self.top_goods_item_list[i] = item
end
item:SetData(v,i)
item:SetServerData(server_data[v.pos])
end
end
function WardrobeShopView:UpdateTotalList( )
local total_data = self.model:GetWardrobeTotalInfo()
local total_list = total_data.wardrobe_list or {}
self.wardrobe_text_txt.text = total_data.sum_wardrobe_value
local res_name = string.format("wardrobe_level%s", total_data.stage or 1)
lua_resM:setOutsideImageSprite(self, self.icon_image_img, GameResPath.GetWardrobeImage(res_name), true)
lua_resM:setOutsideImageSprite(self, self.icon_small_image_img, GameResPath.GetWardrobeImage(res_name), true)
if not self.total_item_list_com then
self.total_item_list_com = self:AddUIComponent(UI.ItemListCreator)
end
local info = {
data_list = total_list,
item_con = self.item_con,
item_class = WardrobeTotalItem,
item_height = 107,
start_x = 11,
start_y = -8,
scroll_view = self.item_scroll.transform,
create_frequency = 0.05,
is_scroll_back_on_update = false,
child_names = child_names,
on_update_item = function(item, i, v)
item:SetData(v,i)
end,
}
self.total_item_list_com:UpdateItems(info)
end
function WardrobeShopView:UpdateMidInfo( )
end
function WardrobeShopView:__delete( )
for i,v in ipairs(self.tab_item_list) do
v:DeleteMe()
v = nil
end
self.tab_item_list = {}
if self.on_update_total_id then
self.model:UnBind(self.on_update_total_id)
self.on_update_total_id = nil
end
if self.on_update_shop_id then
self.model:UnBind(self.on_update_shop_id)
self.on_update_shop_id = nil
end
for i,v in ipairs(self.top_goods_item_list) do
v:DeleteMe()
v = nil
end
self.top_goods_item_list = {}
end