ChatDressSubView = ChatDressSubView or BaseClass(BaseItem) local ChatDressSubView = ChatDressSubView local table_insert = table.insert function ChatDressSubView:__init() self.base_file = "chatDress" self.layout_file = "ChatDressSubView" self.model = ChatDressModel:GetInstance() self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 1) self.model:Fire(ChatDressEvent.REQUEST_DRESS_INFO, 2) self.mainVo = RoleManager.Instance.mainRoleInfo self.full_screen = true self.ani_left = -200 self.ani_right = 400 self.adjust_mid = {left = 50, right = 640} self.tab_data = { [1] = {name = "头像", id = ChatDressSubType.ROLE_HEAD}, [2] = {name = "相框", id = ChatDressSubType.HEAD}, [3] = {name = "气泡", id = ChatDressSubType.BUBBLE}, } self.cur_select_index = nil self.cur_select_tab = nil self.cur_select_data = nil self.tab_item_list = {} self:Load() end function ChatDressSubView:Load_callback() self.nodes = { "right/item_scroll/Viewport/item_con","right/item_scroll","right/attr_scroll/Viewport/attr_con", "right/attr_scroll","right/bg:raw","mid/name_text:tmp", "left/tab_con","mid/power_text:txt","right/btn/btn_red:obj","right/btn/btn_text:tmp","right/btn:obj:imgex", "mid/holder/bubble_con:img:obj", "mid/holder/head_con:obj", "mid/holder/mid_text:tmp", "mid/holder:obj", "mid/text:tmp", ------------------------- "right/wear_btn:obj:img","right/active_image:obj", "right/desc_text:tmp", --下面的物品消耗 "right/cost_con:obj","right/cost_con/cost_name_text:tmp","right/cost_con/num_text:tmp", "right/cost_con/cost_item_con", } self:GetChildren(self.nodes) lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("designation_bg"),false) self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.cost_item_con) self.award_item:SetItemSize(62, 62) self:StartAction() self:AddEvents() if self.need_refreshData then self:UpdateView() end end function ChatDressSubView:AddEvents( ) local function on_click( target ) if self.btn_obj == target then if self.active_state == ChatDressModel.AcitiveState.CanActive then if self.cur_select_data then if self.cur_select_tab ~= 1 then self.model:Fire(ChatDressEvent.DRESS_ACTIVATE, self.cur_select_data.dress_id) -- 激活 else GlobalEventSystem:Fire(EventName.REQ_ACTIVATE_ROLEHEAD, self.cur_select_data.dress_id) end end else if self.go_active_goods then UIToolTipMgr:getInstance():AppendGoodsTips(self.go_active_goods, x, y,nil,nil,nil,false,true) end end elseif self.wear_btn_obj == target then if self.cur_select_data then if self.cur_select_tab ~= 1 then local data = { dress_id = self.cur_select_data.dress_id } self.model:Fire(ChatDressEvent.USE_DRESS, data) -- 保存至使用 else GlobalEventSystem:Fire(EventName.REQ_CHANGE_ROLEHEAD, self.cur_select_data.dress_id) end end end end AddClickEvent(self.btn_obj, on_click) AddClickEvent(self.wear_btn_obj, on_click) local function on_update_view( ) self.force_update = true self:UpdateView() end self:BindEvent(self.model, ChatDressEvent.DRESS_ACTIVATE_SUCCESS, on_update_view) local function on_update_wear( ) self:UpdateRightInfo() end self:BindEvent(self.model, ChatDressEvent.USE_DRESS_SUCCESS, on_update_view) end function ChatDressSubView:UpdateView( ) self:SetTabCon() self:SetSelectTab(self.cur_select_tab or 1) end function ChatDressSubView:UpdateRightItem( ) if not self.item_list_com then self.item_list_com = self:AddUIComponent(UI.ItemListCreator) end if self.need_reset then self.item_list_com:Reset() self.need_reset = false end local cur_type = self.tab_data[self.cur_select_tab].id local dress_list_config = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id) ---------排序 self.dress_list = {} local list1 = {} -- 可以激活 local list2 = {} -- 已经激活 local list3 = {} -- 未激活且目前不可以激活 for k,v in pairs(dress_list_config) do if self.model:CanActivate(self.tab_data[self.cur_select_tab].id,v.dress_id) and v.is_default ~= 1 then--默认的排除 table_insert(list1,v) list1[#list1].can_active = true list1[#list1].is_active = false elseif self.model:FindDressIsActive(self.tab_data[self.cur_select_tab].id,v.dress_id) then table_insert(list2,v) list2[#list2].is_active = true list2[#list2].can_active = false else --未激活且目前不可激活的 需要判断是否是开放时间 local cur_time = TimeUtil:getServerTime( ) local open_day = ServerTimeModel:getInstance():GetOpenServerDay() if v.open_time <= cur_time and v.open_day <= open_day then table_insert(list3,v) list3[#list3].is_active = false list3[#list3].can_active = false end end end local sort_func = function ( a, b ) return a.sequence < b.sequence end table.sort(list1, sort_func) table.sort(list2, sort_func) table.sort(list3, sort_func) for k,v in ipairs(list1) do table_insert(self.dress_list,v) end for k,v in ipairs(list2) do table_insert(self.dress_list,v) end for k,v in ipairs(list3) do table_insert(self.dress_list,v) end local jump_info = self.model:GetJumpInfo() if jump_info then for i,v in ipairs(self.dress_list) do if v.dress_id == jump_info then self.cur_select_index = i self.cur_select_data = v end end self.model:CleanJumpInfo() end if not self.cur_select_index then--没有选中就要选中自己目前穿戴的东西 local wear_id = self.model:GetCurUseDressId(self.tab_data[self.cur_select_tab].id) for i,v in ipairs(self.dress_list) do if v.dress_id == wear_id then self.cur_select_index = i--拿选中的称号配置数据 self.cur_select_data = v--拿选中的称号配置数据 break end end if not self.cur_select_index then self.cur_select_index = 1 self.cur_select_data = self.dress_list[1]--拿选中的称号配置数据 end else if not jump_info then for i,v in ipairs(self.dress_list) do if i == self.cur_select_index then self.cur_select_data = v--拿选中的称号配置数据 break end end end end local function call_back( index,data ) self:SetSelectItem(index,data) end local function load_all_callback( ) self:SetSelectItem(self.cur_select_index,self.cur_select_data) end local info = { data_list = self.dress_list, item_con = self.item_con, item_class = ChatDressItem, item_width = 114, item_height = 116, space_x = 10, space_y = 10, start_x = 16, start_y = -12, scroll_view = self.item_scroll.transform, create_frequency = 0, is_scroll_back_on_update = false, final_callback = load_all_callback, on_update_item = function(item, i, v) item:SetData(i, v, call_back) item:SetSelect(self.cur_select_index) end, } self.item_list_com:UpdateItems(info) end function ChatDressSubView:SetSelectItem( index,data ) self.cur_select_index = index self.cur_select_data = data self.item_list_com:IterateItems(function ( item ) item:SetSelect(self.cur_select_index) end) self:UpdateRightInfo() end function ChatDressSubView:UpdateRightInfo( ) local data = self.cur_select_data if not data then print("HWR:ChatDressSubView [163]data: ",data) return end local attr_list = stringtotable(data.dress_starup_attr or data.dress_attr) self.power_text_txt.text = GetFighting(attr_list,true) self.desc_text_tmp.text = Trim(data.dress_desc) self.go_active_goods = data.dress_consume_id self:ShowDressImg() if not self.attr_list_com then self.attr_list_com = self:AddUIComponent(UI.ItemListCreator) end local child_names = { "attr_text:tmp", } local info = { data_list = attr_list, item_con = self.attr_con, prefab_ab_name = "chatDress", prefab_res_name = "ChatDressPropItem", item_width = 180, item_height = 28, space_x = 11, space_y = 0, start_x = 20, start_y = -8, scroll_view = self.attr_scroll, create_frequency = 0.05, is_scroll_back_on_update = false, child_names = child_names, on_update_item = function(item, i, v) self:UpdateAttrItem(item,i,v) end, } self.attr_list_com:UpdateItems(info) local active_state = nil self.item_list_com:IterateItems(function ( item ) if data.dress_id == item:GetId() then active_state = item:GetActiveState() end end) self.active_state = active_state self.wear_btn_obj:SetActive(self.model:GetCurUseDressId(data.dress_type) ~= data.dress_id) self.cost_con_obj:SetActive(false) self.btn_red_obj:SetActive(false) self.btn_obj:SetActive(false) self.btn_imgex.gray = false self.active_image_obj:SetActive(active_state == ChatDressModel.AcitiveState.Actived)--永久激活的就显示这个图片 if active_state == ChatDressModel.AcitiveState.Locked then self.btn_text_tmp.text = "激活" self.btn_obj:SetActive(true) if data.dress_consume_id > 0 then self.award_item:SetData(data.dress_consume_id,1) local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id) local color_str = ColorUtil.RED_DARK local need_num = 1 if num >= need_num then color_str = ColorUtil.GREEN_DARK end local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num) self.num_text_tmp.text = num_str self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true) self.cost_con_obj:SetActive(true) end elseif active_state == ChatDressModel.AcitiveState.CanActive then if data.dress_consume_id > 0 then self.award_item:SetData(data.dress_consume_id,1) local num = GoodsModel:getInstance():GetTypeGoodsNum(data.dress_consume_id) local color_str = ColorUtil.RED_DARK local need_num = 1 if num >= need_num then color_str = ColorUtil.GREEN_DARK end local num_str = string.format("%s/%s", HtmlColorTxt(num, color_str), need_num) self.num_text_tmp.text = num_str self.cost_name_text_tmp.text = GoodsModel:getInstance():getGoodsName(data.dress_consume_id, true) self.cost_con_obj:SetActive(true) end self.btn_text_tmp.text = "激活" self.btn_obj:SetActive(true) self.btn_red_obj:SetActive(true) else self.btn_red_obj:SetActive(false) self.btn_obj:SetActive(false) end end function ChatDressSubView:UpdateAttrItem(item,i,v) local _, name, _, val = WordManager:GetPropertyInfo(v[1], v[2]) local str = string.format("%s %s", name, HtmlColorTxt("+"..val, ColorUtil.WHITE_DARK)) item.attr_text_tmp.text = str end function ChatDressSubView:SetTabCon( ) local y_offset = 66 local function call_back( index ) self.need_reset = true self.cur_select_index = nil self:SetSelectTab(index) end for i=1,#self.tab_data do local item = self.tab_item_list[i] if not item then item = ChatDressVerTabItem.New(self.tab_con) self.tab_item_list[i] = item end item:SetData(i,self.tab_data[i], call_back) item:SetPosition(0, -(i-1) * y_offset) end end function ChatDressSubView:SetSelectTab( index ) if self.cur_select_tab == index and not self.force_update then return end self.force_update = false for i,v in ipairs(self.tab_item_list) do v:SetSelect(i == index) end self.cur_select_tab = index self.cur_select_index = nil ------------------------- -- local list = self.model:GetChatDressFigure(self.tab_data[self.cur_select_tab].id) or {} -- for i,v in pairsByKeys(list) do -- if i == self.cur_select_index then -- self.cur_select_data = v--拿选中的配置数据 -- break -- end -- end ------------------------- self.text_tmp.text = string.format("%s战力", self.tab_data[self.cur_select_tab].name) self:UpdateRightItem() self:SetSelectItem(self.cur_select_index, self.cur_select_data) end function ChatDressSubView:SetData(index, sub_index ) if sub_index == 0 then--有这个东西 意味着是道具跳转进来的 self.jump_info = self.model:GetJumpInfo() elseif sub_index then --跳转到对应页签 self.cur_select_tab = sub_index or self.cur_select_tab self.force_update = true end if TableSize(self.jump_info) > 0 then self.cur_select_tab = self.jump_info.main_type self.force_update = true end if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function ChatDressSubView:StartAction( ) SetAnchoredPositionY( self.holder.transform, 0 ) local do_up,do_down function do_up() self.tween_id1 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,0,2,do_down) end function do_down() self.tween_id2 = TweenLite.to(self, self.holder.transform,TweenLite.UiAnimationType.ANCHORED_POSY,20,2,do_up) end do_down() end function ChatDressSubView:ShowDressImg() local data = self.cur_select_data if not data then return end local type = self.tab_data[self.cur_select_tab].id local dress_id = data.dress_id self.bubble_con_obj:SetActive(type == ChatDressSubType.BUBBLE) self.head_con_obj:SetActive(type ~= ChatDressSubType.BUBBLE) self.name_text_tmp.text = data.dress_name if type == ChatDressSubType.BUBBLE then -- self.mid_text_tmp.text = HtmlColorTxt(data.dress_desc, ColorUtil.GREEN_DARK) SetSizeDelta(self.bubble_con, 400, 100) -- SetSizeDelta(self.bubble_con, self.mid_text_tmp.preferredWidth + 50, self.mid_text_tmp.preferredHeight + 30) -- ---不同框的偏移 -- local addTable = Config.ConfigChatDress.Pos[tostring(dress_id)] -- SetSizeDeltaX(self.bubble_con, GetSizeDeltaX(self.bubble_con) + addTable.size_x ) -- SetSizeDeltaY(self.bubble_con, GetSizeDeltaY(self.bubble_con) + addTable.size_y ) if dress_id then -- 0为后端传来的空 lua_resM:setOutsideImageSprite(self, self.bubble_con_img, GameResPath.GetChatDressIcon(dress_id), false) end elseif type == ChatDressSubType.HEAD then self.mid_text_tmp.text = "" if not self.mainRoleHeadItem then self.mainRoleHeadItem = HeadRoleItem.New(self.head_con) self.mainRoleHeadItem:SetItemSize(200,200) end local head_data = { vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = dress_id, profile_photo_id = self.mainVo.profile_photo_id}, } self.mainRoleHeadItem:SetData(head_data) elseif type == ChatDressSubType.ROLE_HEAD then self.mid_text_tmp.text = "" if not self.mainRoleHeadItem then self.mainRoleHeadItem = HeadRoleItem.New(self.head_con) self.mainRoleHeadItem:SetItemSize(200,200) end local head_data = { vo = {id = self.mainVo.role_id, use_bg = 3, career = 0, sex = self.mainVo.sex, turn = self.mainVo.turn, dress_board_id = self.mainVo.dress_board, profile_photo_id = dress_id}, } self.mainRoleHeadItem:SetData(head_data) end end function ChatDressSubView:__delete( ) if not self.model.is_enter_view then --刷一次红点 self.model.is_enter_view = true WardrobeModel:GetInstance():Fire(WardrobeConst.UPDATE_RED_DOT, WardrobeConst.TabId.DRESS) end for i,v in ipairs(self.tab_item_list) do v:DeleteMe() v = nil end self.tab_item_list = {} if self.on_update_view_id then self.model:UnBind(self.on_update_view_id) self.on_update_view_id = nil end if self.on_update_wear_id then self.model:UnBind(self.on_update_wear_id) self.on_update_wear_id = nil end if self.tween_id1 then TweenLite.Stop(self.tween_id1) self.tween_id1 = nil end if self.tween_id2 then TweenLite.Stop(self.tween_id2) self.tween_id2 = nil end if self.mainRoleHeadItem then self.mainRoleHeadItem:DeleteMe() self.mainRoleHeadItem = nil end end