源战役客户端
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.
 
 
 
 
 

473 lines
15 KiB

MarketAttentionView = MarketAttentionView or BaseClass(BaseItem)
local MarketAttentionView = MarketAttentionView
local table_insert = table.insert
function MarketAttentionView:__init()
self.base_file = "market"
self.layout_file = "MarketAttentionView"
self.model = MarketModel:GetInstance()
self.sell_type = 1
self.is_first = true--是否第一次进入
self.series_limit = 0
self.career_limit = RoleManager.Instance.mainRoleInfo.career--默认拿自己的防具
self.color = 99
self.tab_item_list = {}
self:Load()
end
function MarketAttentionView:Load_callback()
self.nodes = {
"series_con:obj","right_scroll","series_con/series_drop","color_con:obj","clean_btn:obj",
"left_scroll/Viewport/left_con","right_scroll/Viewport/right_con","left_scroll","color_con/color_drop",
"career_con/career_drop", "career_con/career_text:tmp", "career_con:obj",
}
self:GetChildren(self.nodes)
self:InitDropDown()
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function MarketAttentionView:AddEvents( )
local function on_click( ... )
self.model:Fire(MarketModel.REQUEST_CCMD_EVENT, 15516, self.sell_type or self.last_sell_type, self.sell_sub_type)
end
AddClickEvent(self.clean_btn_obj, on_click)
end
function MarketAttentionView:InitDropDown()
local list = {}
local cfg_color = Config.Marketgoodsselectbycolor
table.insert(list,"所有品质")
for i,v in ipairs(cfg_color) do
table.insert(list, v.describe)
end
self.color_index = 1
local function update_color_func(index)
self.color_index = index
if index == 1 then
self.color = 99
else
self.color = index-1
end
self.need_reset = true
self:UpdateGoodsList()
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height-9, show_type = "down"}
if not self.combox_color then
self.combox_color = Combox.New(self.color_drop,list,update_color_func,122,38,nil,prefab_data)
else
self.combox_color:ResetData(list,self.color_index,update_color_func,122,38)
end
local list = {}
local cfg_lv = Config.Marketgoodsselectbylev
table.insert(list,"不限套装")
for i,v in ipairs(cfg_lv) do
table.insert(list, v.stage.."")
end
local function update_series_func(index)
self.series_index = index
if index == 1 then
self.series_limit = 0
else
self.series_limit = cfg_lv[index-1].id
end
self.need_reset = true
self:UpdateGoodsList()
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height-9, show_type = "down"}
if not self.combox_series then
self.combox_series = Combox.New(self.series_drop,list,update_series_func,122,38,nil,prefab_data)
else
self.combox_series:ResetData(list,self.series_index,update_series_func,122,38)
end
local list = {}
local cfg_career = Config.Marketgoodsselectbycareer
table.insert(list,"不限职业")
for i,v in ipairs(cfg_career) do
table.insert(list, v.describe)
end
local function update_career_func(index)
self.career_index = index
if index == 1 then
self.career_limit = 0
else
self.career_limit = cfg_career[index-1].id
end
if not self.is_first then
if self.cur_hor_tab_index == 1 then
self.model:CleanMarketGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
else
self.model:CleanMarketGuildGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
end
self.need_reset = true
self:UpdateGoodsList()
end
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height-9, show_type = "down"}
if not self.combox_career then
self.combox_career = Combox.New(self.career_drop,list,update_career_func,122,38,nil,prefab_data)
else
self.combox_career:ResetData(list,self.career_index,update_career_func,122,38)
end
end
function MarketAttentionView:UpdateView( )
self:UpdateVerTabBtns(true)
end
function MarketAttentionView:UpdateVerTabBtns( need_refresh )
self.tab_cfg = self.model:GetMarketGoodsCFG()
self.tab_creator = self.tab_creator or self:AddUIComponent(UI.ItemListCreator)
-- 声明点击回调
local data = {}
if (self.sell_type and need_refresh) or self.tab_all_close then
for i,v in pairsByKeys(self.tab_cfg) do
if i == self.sell_type then--如果是当前选中的第一层
table_insert(data, DeepCopy(v))
data[#data].is_tab = true
table_insert(data, {name = "全部", is_zero = true, sell_sub_type = 0, sell_type = i})--为了插一个全部
for ii,vv in pairsByKeys(v) do
table_insert(data, DeepCopy(vv))
end
else
table_insert(data, DeepCopy(v))
data[#data].is_tab = true
end
end
else
data = self.tab_data
end
if not self.sell_sub_type then--没选中就默认选第一个
self.sell_sub_type = 0
end
self.tab_data = data
local call_back = function(data, sell_type, sell_sub_type)
local need_refresh = self.sell_type ~= sell_type
self.need_reset = true
if sell_type == 0 then
self.career_limit = 0--热卖的话就不用筛职业
elseif sell_type ~= 0 and sell_type ~= 1 and sell_type ~= 3 then --其他类别的 不筛选职业和套装
self.career_limit = 0
self.series_limit = 0
elseif sell_type == 1 and need_refresh then --切页签了 要默认筛自己的防具
local cfg_career = MarketConst.Sex
local career = RoleManager.Instance.mainRoleInfo.career
local career_index = self.model:GetMarketDefultSelectIndexByType(MarketConst.FliterType.Armor, career)
self.career_limit = cfg_career[career_index-1].id
elseif sell_type == 3 and need_refresh then --切页签了 要默认筛自己的武器
local career = RoleManager.Instance.mainRoleInfo.career
-- local cfg_career = MarketConst.Career
-- local career_index = self.model:GetMarketDefultSelectIndexByType(MarketConst.FliterType.Armor, career)
-- self.career_limit = self.model:GetMarketFliterCareerBySex(cfg_career[career_index-1].id)
self.career_limit = career
end
if not need_refresh and not sell_sub_type then--如果不需要刷新 且点到了tab 意思就是要收起来tab
self.need_reset = false
self.tab_all_close = true
self.last_sell_type = self.sell_type --先保存起来上一个选中的tab
self.sell_type = nil
else
self.tab_all_close = false
self.sell_type = sell_type
end
if sell_sub_type then
self.sell_sub_type = sell_sub_type
elseif need_refresh then
self.sell_sub_type = sell_sub_type
end
self:UpdateVerTabBtns(need_refresh)
self:UpdateSelectVer(need_refresh)
end
local tag_all_info = {
data_list = data,
item_con = self.left_con,
item_class = MarketVerTabItem,
item_width = 206,
get_item_height = function(i)
return data[i].is_tab and 56 or 48
end,
reuse_item_num = 12,
start_x = 2,
start_y = -10,
space_y = 2,
scroll_view = self.left_scroll,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(v, i, self.sell_type, self.sell_sub_type, MarketModel.VER_TAB_TYPE.ATTENTION_TYPE)
item:SetCallBackFunc(call_back)
end,
}
self.tab_creator:UpdateItems(tag_all_info)
if self.is_first then
self:UpdateSelectVer(true)
self:UpdateGoodsList()
self.is_first = false
end
if need_refresh then
self:UpdateFliter()
end
end
--设置垂直tab选择
function MarketAttentionView:UpdateSelectVer( need_refresh )
self.tab_creator:IterateItems(function(item, i, v)
item:SetSelect(self.sell_type, self.sell_sub_type)
end)
self:UpdateGoodsList()
if need_refresh then
self:ScrollToSelectItem()
end
end
function MarketAttentionView:ScrollToSelectItem( )
if not self.sell_sub_type then--如果没有选中第二层的item就默认选第一个
self.sell_sub_type = 0
end
for i,v in ipairs(self.tab_data) do
if v.sell_type == self.sell_type and v.sell_sub_type == self.sell_sub_type then
self.tab_creator:ScrollToItem(i-1)
end
end
end
function MarketAttentionView:UpdateGoodsList( )
local goods_list = self.model:GetMarketGoodsCFG(self.sell_type or self.last_sell_type, self.sell_sub_type) or {}
local data = {}
local color_pass, series_pass, career_pass
-- local lv_min, lv_max = self.model:GetMarketFliterLv(self.series_limit)
if self.sell_sub_type == 0 then--如果是全部 就要遍历两层
for i,v in pairsByKeys(goods_list) do
for ii,vv in ipairs(v) do
if self.color ~= 99 or self.series_limit ~= 0 or self.career_limit ~= 0 then--需要筛选品质 职业 套
if self.color ~= 99 then
if vv.color == self.color then
color_pass = true
else
color_pass = false
end
else
color_pass = true
end
if color_pass then--如果颜色判断通过 判断职业限制
career_pass = self.model:CheckMarketGoodsCanWear(self.career_limit, vv.career)
else
career_pass = false
end
if career_pass then--如果颜色判断通过 再判断套装限制
if self.series_limit ~= 0 then
if self.series_limit == vv.series then
series_pass = true
else
series_pass = false
end
else
series_pass = true
end
if series_pass then
table_insert(data, vv)
end
else
end
else
table_insert(data, vv)
end
end
end
else
for i,v in ipairs(goods_list) do
if self.color ~= 99 or self.series_limit ~= 0 or self.career_limit ~= 0 then--需要筛选品质 职业 套
if self.color ~= 99 then
if v.color == self.color then
color_pass = true
else
color_pass = false
end
else
color_pass = true
end
if color_pass then--如果颜色判断通过 判断职业限制
career_pass = self.model:CheckMarketGoodsCanWear(self.career_limit, v.career)
else
career_pass = false
end
if career_pass then--如果职业判断通过 再判断套装限制
if self.series_limit ~= 0 then
if self.series_limit == v.series then
series_pass = true
else
series_pass = false
end
else
series_pass = true
end
if series_pass then
table_insert(data, v)
end
end
else
table_insert(data, v)
end
end
end
local function sortfunction( a,b )
local a_attention = self.model:IsMarketAttentionGoods(a.type_id)
local b_attention = self.model:IsMarketAttentionGoods(b.type_id)
if a_attention == b_attention then
return a.type_id < b.type_id
else
return a_attention
end
end
table.sort( data, sortfunction )
if not self.goods_list_com then
self.goods_list_com = self:AddUIComponent(UI.ItemListCreator)
end
if self.need_reset then
self.goods_list_com:Reset()
self.need_reset = false
end
local info = {
data_list = data,
item_con = self.right_con,
scroll_view = self.right_scroll,
item_class = MarketAttentionItem,
start_y = 0, start_x = 8,
create_frequency = 0.02,
create_num_per_time = 3,
item_height = 100,
space_y = 0,
on_update_item = function(item, i, v)
item:SetData(i, v)
end,
}
self.goods_list_com:UpdateItems(info)
end
--更新筛选栏状态
function MarketAttentionView:UpdateFliter( )
local fliter_type = self.model:GetFliterType(self.sell_type,self.sell_sub_type)
if fliter_type == MarketConst.FliterType.Armor then
self.career_con_obj:SetActive(true)
self.series_con_obj:SetActive(true)
self.color_con_obj:SetActive(true)
self.career_text_tmp.text = "性别"
local list = {}
local cfg_career = MarketConst.Sex
local career = RoleManager.Instance.mainRoleInfo.career
self.career_index = self.model:GetMarketDefultSelectIndexByType(fliter_type, career)
table.insert(list,"不限性别")
for i,v in ipairs(cfg_career) do
table.insert(list, v.name)
end
local function update_career_func(index)
self.career_index = index
if index == 1 then
self.career_limit = 0
else
self.career_limit = self.model:GetMarketFliterCareerBySex(cfg_career[index-1].id)
end
if not self.is_first then
if self.cur_hor_tab_index == 1 then
self.model:CleanMarketGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
else
self.model:CleanMarketGuildGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
end
self.need_reset = true
self:UpdateGoodsList()
end
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height-9, show_type = "down"}
if not self.combox_career then
self.combox_career = Combox.New(self.career_drop,list,update_career_func,122,38,nil,prefab_data)
else
self.combox_career:ResetData(list,self.career_index,update_career_func,122,38,nil,true, prefab_data)
end
elseif fliter_type == MarketConst.FliterType.Weapon then
self.career_con_obj:SetActive(true)
self.series_con_obj:SetActive(true)
self.color_con_obj:SetActive(true)
self.career_text_tmp.text = "职业"
local list = {}
local cfg_career = MarketConst.Career
local career = RoleManager.Instance.mainRoleInfo.career
self.career_index = self.model:GetMarketDefultSelectIndexByType(fliter_type, career)
table.insert(list,"不限职业")
for i,v in ipairs(cfg_career) do
table.insert(list, v.name)
end
local function update_career_func(index)
self.career_index = index
if index == 1 then
self.career_limit = 0
else
self.career_limit = cfg_career[index-1].id
end
if not self.is_first then
if self.cur_hor_tab_index == 1 then
self.model:CleanMarketGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
else
self.model:CleanMarketGuildGoodsInfoByType(self.sell_type or self.last_sell_type, self.sell_sub_type)
end
self.need_reset = true
self:UpdateGoodsList()
end
end
local prefab_data = {Combox = "Combox",ComboxView = "ComboxView", ComboxItem = "ComboxItem", offset_y = -#list*ComboxItem.Height-9, show_type = "down"}
if not self.combox_career then
self.combox_career = Combox.New(self.career_drop,list,update_career_func,122,38,nil,prefab_data)
else
self.combox_career:ResetData(list,self.career_index,update_career_func,122,38,nil,true,prefab_data)
end
elseif fliter_type == MarketConst.FliterType.Other then
self.career_con_obj:SetActive(false)
self.series_con_obj:SetActive(false)
self.color_con_obj:SetActive(true)
elseif fliter_type == MarketConst.FliterType.Hot then
self.career_con_obj:SetActive(false)
self.series_con_obj:SetActive(true)
self.color_con_obj:SetActive(true)
end
end
function MarketAttentionView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function MarketAttentionView:__delete( )
if self.combox_career then
self.combox_career:DeleteMe()
self.combox_career = nil
end
if self.combox_series then
self.combox_series:DeleteMe()
self.combox_series = nil
end
if self.combox_color then
self.combox_color:DeleteMe()
self.combox_color = nil
end
end