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

326 lines
9.9 KiB

EquipCollectView = EquipCollectView or BaseClass(BaseView)
local EquipCollectView = EquipCollectView
local table_insert = table.insert
--[[
EquipCollectView.TabData = {
[1] = {name = "人物", level = MainRoleModel.TabOpenLevel[1]},
}
--]]
function EquipCollectView:__init()
self.base_file = "equipCollect"
self.layout_file = "EquipCollectView"
self.layer_name = "UI"
self.need_show_money = false
self.destroy_imm = true
self.use_background = G_USING_BG
self.hide_maincancas = true --全屏界面需要放开隐藏主UI
self.append_to_ctl_queue = true --添加进入控制队列
self.change_scene_close = true
self.close_fog = true
self.model_activity_bg = true
self.model_activity_bg_pos = Vector2(-132,52)
self.show_back_camera = true--打开backmodel摄像机
self.ani_right = 400
self.ani_left = -200
self.adjust_mid = {left = 262, right = 446}
self.progress_item = {}
self.progress_con_width = 277--进度条长度
self.fire_change_visible_event = true
self.model = EquipCollectModel:getInstance()
self.tab_all_close = false
self.id = 1
self.is_first = true
self.equip_item_list = {}
--根据策划给的排序规则弄的映射表
self.pos_map_list = {
[1] = EquipModel.EquipType.Weapon,
[2] = EquipModel.EquipType.Head,
[3] = EquipModel.EquipType.Hand,
[4] = EquipModel.EquipType.Body,
[5] = EquipModel.EquipType.Shoulder,
[6] = EquipModel.EquipType.Shoes,
[7] = EquipModel.EquipType.Leg,
}
self.load_callback = function ()
self:LoadSuccess()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.switch_callback = function(index)
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function EquipCollectView:Open( )
BaseView.Open(self)
end
function EquipCollectView:LoadSuccess()
local nodes = {
--左边
"tabWinCon", "left/left_scroll/Viewport/left_con", "left/left_scroll", "left/left_item_con", "left",
"left/left_bg:raw",
--中间
"mid/role_con", "mid/power_text:txt", "mid",
--右边
"right/active_btn/active_btn_text:tmp", "right/finish_image:obj", "right/progress_bg",
"right/progress_image:img", "right/designation_con:img", "right/desination_power_text:tmp",
"right/active_btn:obj", "right/right_bg:raw", "right/attr_scroll", "right/right_item_con",
"right/active_btn/active_btn_red:obj", "right/attr_scroll/Viewport/attr_con", "right",
"right/progress_con",
}
self:GetChildren(nodes)
self:AddEvent()
local close_callback = function()
self:Close()
end
self.tab_win = UITabWindow.New(self.tabWinCon, nil, select_callback,
close_callback, self.background_wnd, self.container, UITabWindow.SizeLargeNoTab, false,nil,true)
self.tab_win:SetTitleText("装备套装")
lua_resM:setOutsideRawImage(self, self.left_bg_raw, GameResPath.GetViewBigBg("equip_collect_bg_left"), false,func)
lua_resM:setOutsideRawImage(self, self.right_bg_raw, GameResPath.GetViewBigBg("equip_collect_bg_right"), false,func)
self.id, self.sub_id = self.model:GetEquipCollectJumpId()
end
function EquipCollectView:AddEvent()
local function on_click( target )
if target == self.close_btn_obj then
self:Close()
elseif target == self.active_btn_obj then
local cur_data = self.cur_select_data
self.model:Fire(EquipCollectConst.REQUEST_SCMD_EVENT,15220, cur_data[1].id, cur_data[1].sub_id)
end
end
AddClickEvent(self.active_btn_obj, on_click)
local function on_update( ... )
self:UpdateView()
self:UpdateRightInfo()
end
self:BindEvent(self.model,EquipCollectConst.ANS_EQUIP_COLLECT_INFO,on_update)
end
function EquipCollectView:OpenSuccess()
self:UpdateView()
self:UpdateModel()
end
function EquipCollectView:UpdateView()
self:UpdateLeftItems(true)
end
function EquipCollectView:UpdateLeftItems( need_refresh )
self.tab_cfg = self.model:GetEquipCollectCFG()
self.tab_creator = self.tab_creator or self:AddUIComponent(UI.ItemListCreator)
-- 声明点击回调
local data = {}
local type_cfg = Config.Equipmentcollecttype
for i,v in pairsByKeys(self.tab_cfg) do
if type_cfg[i].open_lv <= RoleManager.Instance.mainRoleInfo.level then
for ii,vv in pairsByKeys(v) do
table_insert(data, DeepCopy(vv))
end
end
end
self.tab_data = data
self.cur_select_data = self.tab_cfg[self.id][self.sub_id]
local call_back = function(data, id, sub_id)
self.id = id
self.sub_id = sub_id
self:UpdateLeftItems()
self:UpdateSelectVer()
end
local function final_callback( )
if self.is_first then
self.cur_select_data = self.model:GetEquipCollectCFG(self.id, self.sub_id)
self:UpdateSelectVer(true)
self.is_first = false
end
end
local tag_all_info = {
data_list = data,
item_con = self.left_con,
item_class = EquipCollectLeftItem,
item_height = 113,
start_x = 8,
start_y = -10,
space_y = 20,
scroll_view = self.left_scroll,
create_frequency = 0.01,
final_callback = final_callback,
on_update_item = function(item, i, v)
item:SetData(v, self.id, self.sub_id)
item:SetCallBackFunc(call_back)
end,
}
self.tab_creator:UpdateItems(tag_all_info)
end
--设置垂直tab选择
function EquipCollectView:UpdateSelectVer( need_refresh )
self.tab_creator:IterateItems(function(item, i, v)
item:SetSelect(self.id, self.sub_id)
end)
if need_refresh then
self:ScrollToSelectItem()
end
self:UpdateRightItems()
self:UpdateRightInfo()
end
function EquipCollectView:ScrollToSelectItem( )
for i,v in ipairs(self.tab_data) do
if v[1].id == self.id and v[1].sub_id == self.sub_id then
self.tab_creator:ScrollToItem(i)
end
end
end
--更新右边的装备
function EquipCollectView:UpdateRightItems( )
local y_offset = 135
local data = self.cur_select_data
local server_data = self.model:GetEquipCollectInfo(self.id, self.sub_id)
for i=1,7 do
local item = self.equip_item_list[i]
if not item then
if i%2 == 1 then
item = EquipCollectEquipItem.New(self.left_item_con)
item:SetPosition(-11, -math.floor((i-1)/2)*y_offset-5)
else
item = EquipCollectEquipItem.New(self.right_item_con)
item:SetPosition(-21, -math.floor((i-1)/2)*y_offset-5)
end
self.equip_item_list[i] = item
end
item:SetData(data[self.pos_map_list[i]], index, self.pos_map_list[i], server_data[self.pos_map_list[i]], "equip_collect_base_view")
end
end
--更新右边的属性栏
function EquipCollectView:UpdateRightInfo( )
local cur_data = self.cur_select_data
self.attr_creator = self.attr_creator or self:AddUIComponent(UI.ItemListCreator)
self.attr_creator:Reset()
local cur_progress = self.model:GetEquipCollectProgress(cur_data[1].id, cur_data[1].sub_id)
local cur_active_num = 0
if TableSize(cur_progress) > 0 then
cur_active_num = cur_progress.cur_active
end
local power = 0
if cur_active_num > 0 then
local attr = stringtotable(cur_data[cur_active_num].attr_total)
power = GetFighting(attr)
end
self.power_text_txt.text = power
self.active_btn_red_obj:SetActive(self.model:IsEquipCollectNeedRedById(cur_data[1].id, cur_data[1].sub_id))
local is_all_collect = self.model:CheckIsAllEquipCollected(cur_data[1].id, cur_data[1].sub_id)
self.active_btn_obj:SetActive(not is_all_collect)
self.finish_image_obj:SetActive(is_all_collect)
local cur_attr_list = {}
for i,v in ipairs(cur_data) do
if TableSize(v.attr_list) > 0 then--筛选出有属性加成的才丢进去了
table_insert(cur_attr_list, v)
end
end
local final_space = 10--前后预留的位置
local len = TableSize(cur_attr_list)
local item_width = 32
self.pos_data = self.pos_data or {}
local space_x = (self.progress_con_width - final_space * 2 - item_width) / (len - 1) --算出一个item和间隔的大小
for i,v in ipairs(cur_attr_list) do
local item = self.progress_item[i]
if not item then
item = EquipCollectProgressItem.New(self.progress_con)
self.progress_item[i] = item
self.pos_data[v.pos] = (i - 1)*space_x+final_space + 8--8是小白图到item最左边的距离
item:SetPosition((i - 1)*space_x+final_space, 8 )
end
item:SetData(v,i)
end
--构造位置数据
for i=0,7 do
if i == 0 then
self.pos_data[i] = 0
elseif i == 7 then
self.pos_data[i] = self.progress_con_width
else
if not self.pos_data[i] then
self.pos_data[i] = (self.pos_data[i-1] + self.pos_data[i+1])/2
end
end
end
self.progress_image_img.fillAmount = self.pos_data[cur_active_num]/self.progress_con_width
local sub_cfg = Config.Equipmentcollectsubtype[cur_data[1].id.."@"..cur_data[1].sub_id]
if sub_cfg then
local reward = stringtotable(sub_cfg.reward)
local designation_id = DesignationModel:getInstance():GetDesignationIdByGoodsId(reward[1][2])
local dsgt_cfg = Config.Dsgt
local power = DesignationModel:GetInstance():GetDesignationPowerById(designation_id)
if dsgt_cfg[designation_id] then
lua_resM:setOutsideImageSprite(self, self.designation_con_img, GameResPath.GetDesignImage(designation_id), true)
end
self.desination_power_text_tmp.text = string.format("战力: %s", HtmlColorTxt(power, ColorUtil.YELLOW_DARK))
end
local data = {
data_list = cur_attr_list,
item_con = self.attr_con,
item_class = EquipCollectAttrItem,
item_width = 324,
item_height = 50,
start_x = -20,
start_y = 10,
space_y = 0,
scroll_view = self.attr_scroll,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(v, i, cur_active_num)
end,
}
self.attr_creator:UpdateItems(data)
end
function EquipCollectView:UpdateModel( )
local res_data = {
father_node = self,
transform = self.role_con,
fashion_type = FuncOpenModel.TypeId.Clothes,
size = Vector2(720,720),
scale = 250,
ui_model_type = UIModelCommon.ModelType.BackModel,
}
FuncOpenModel:getInstance():SetModelRes(res_data)
end
function EquipCollectView:DestroySuccess( )
if self.tab_win then
self.tab_win:DeleteMe()
self.tab_win = nil
end
if self.money_view then
self.money_view:DeleteMe()
self.money_view = nil
end
for i,v in ipairs(self.progress_item) do
v:DeleteMe()
v = nil
end
self.progress_item = {}
for i,v in ipairs(self.equip_item_list) do
v:DeleteMe()
v = nil
end
self.equip_item_list = {}
end