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