--普通礼包 GiftNormalView = GiftNormalView or BaseClass(BaseView) local GiftNormalView = GiftNormalView function GiftNormalView:__init() self.base_file = "gift" self.layout_file = "GiftNormalView" self.layer_name = "Top" --self.use_local_view = true self.click_bg_toClose = true self.destroy_imm = true self.use_background = true self.is_set_zdepth = true self.close_mode = CloseMode.CloseDestroy self.model = GiftModel:getInstance() self.model:setIsOpenView(true) self.base_height = 190 self.delay_time = 15 self.col_num = 5 -- 奖励展示的行展示数 self.max_num = 25 self.item_list = {} self.load_callback = function () self.model.is_show_reward_view = true self:LoadSuccess() self:addEvents() end self.open_callback = function () self:setData() self:setRewardShow() end self.close_callback = function () end self.destroy_callback = function () self:DestroySuccess() --判断是否需要弹物品使用框 local vo = ItemUseModel:getInstance():GetItemShowVo() if vo then GlobalEventSystem:Fire(EventName.OPEN_ITEM_USE_VIEW,vo) end end end function GiftNormalView:Open(goods_vo) self.goods_vo = goods_vo BaseView.Open(self) end function GiftNormalView:Reset( ) if self.pos_id then TweenLite.Stop(self.pos_id) self.pos_id = nil end if self.award_timer_id then GlobalTimerQuest:CancelQuest(self.award_timer_id) self.award_timer_id = nil end if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end SetSizeDeltaY(self.award_scroll, self.base_height) end function GiftNormalView:DestroySuccess() self.model.is_show_reward_view = false if self.pos_id then TweenLite.Stop(self.pos_id) self.pos_id = nil end if self.award_timer_id then GlobalTimerQuest:CancelQuest(self.award_timer_id) self.award_timer_id = nil end if self.timer_id then GlobalTimerQuest:CancelQuest(self.timer_id) self.timer_id = nil end for i,item in pairs(self.item_list) do UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, item) end self.item_list = {} if self.success_event then self.model:UnBind(self.success_event) self.success_event = nil end if self.goods_item then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.goods_item) self.goods_item = nil end self.model:handleCheckGoodsUseItem() end function GiftNormalView:LoadSuccess() local nodes = { "bg/titlebg:img", "bg/scroll_mask:obj", "bg:img", "bg/time_text:tmp", "bg/award_con:obj", "mask_bg:obj","bg/close_btn:obj", "bg/award_scroll:obj", "bg/award_scroll/Viewport/award_scroll_con", --重复开启的 "bg/btn_con/continue_btn:obj", "bg/btn_con/item_con:obj", "bg/btn_con/continue_btn/continue_btn_text:tmp", "bg/btn_con:obj", "bg/btn_con/goods_num_text:tmp", } self:GetChildren(nodes) SetAnchoredPositionY(self.bg, 0) lua_resM:setOutsideImageSprite(self, self.bg_img, GameResPath.GetCommonImage("com_award_result_view_new_bg"),false) lua_resM:setOutsideImageSprite(self, self.titlebg_img, GameResPath.GetCommonImage("com_award_result_view_new_title"),false) end function GiftNormalView:UpdateTime( ) local time = self.delay_time local function countDown() if self._use_delete_method then return end time = time - 1 if time > 0 then self.time_text_tmp.text = string.format("%s 秒后关闭界面",HtmlColorTxt(time, "#31e056")) else self:Close() end end countDown() if not self.timer_id then self.timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1) end end function GiftNormalView:addEvents() local function click_func(target) if target == self.continue_btn_obj then GoodsModel:getInstance():Fire(GoodsModel.REQUEST_CCMD_EVENT, 15050, self.goods_vo.goods_id, self.goods_vo.type_id, 1) elseif target == self.mask_bg_obj or self.close_btn_obj then self:Close() end end AddClickEvent(self.mask_bg_obj, click_func) AddClickEvent(self.continue_btn_obj, click_func) AddClickEvent(self.close_btn_obj, click_func) local function success_func(vo) if vo.goods_id == self.goods_vo.goods_id then self.goods_vo.goods_num = vo.goods_num self:setData() self:setRewardShow() end end self.success_event = self.model:Bind(GiftModel.USE_GIFT_SUCCESS, success_func) end function GiftNormalView:setData() if self.goods_vo == nil then return end if not self.goods_item then self.goods_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con, nil, self.layer_name) self.goods_item:SetItemSize(47, 47) end self.goods_item:SetData(self.goods_vo.type_id) self.goods_item:SetNumText(self.goods_vo.goods_num) -- self.goods_num_text_tmp.text = string.format("剩余数量: %s", HtmlColorTxt(self.goods_vo.goods_num, ColorUtil.GREEN_DARK)) self.goods_num_text_tmp.text = "" if self.goods_vo.goods_num > 0 then self.btn_con_obj:SetActive(true) self.base_height = 155 + 50 + 6--50是按钮con的大小 5为间距 else self.btn_con_obj:SetActive(false) self.base_height = 155 end end --展示奖励 function GiftNormalView:setRewardShow() if self.model.show_goods == nil then return end self.show_goods_list = DeepCopy(self.model.show_goods) local delete_list = {} local basic for index,data in ipairs(self.show_goods_list) do basic = GoodsModel:getInstance():GetGoodsBasicByTypeId(data.goodid) if basic and basic.type == 52 and (basic.subtype == 1 or basic.subtype == 2 or basic.subtype == 3 or basic.subtype == 6) then delete_list[data.goodid] = data.gnum end end local goodid for i = #self.show_goods_list,1,-1 do goodid = self.show_goods_list[i].goodid if delete_list[goodid] then table.remove(self.show_goods_list,i) end end local vo for id,num in pairs(delete_list) do for i = 1,num do vo = { type=0, goodid=id, gnum=1, } table.insert(self.show_goods_list,vo) end end self:UpdateItemList() self.model.show_goods = nil end function GiftNormalView:UpdateItemList( ) for k,v in pairs(self.item_list) do v:SetVisible(false,nil,true) end local item_list = self.show_goods_list local new_list = {} for k,v in pairs(item_list) do local goods_vo = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.goodid) v.sort_id = goods_vo.color * 10000000000000 + goods_vo.type_id if v.type == GoodsModel.TYPE.EQUIP then--装备+100W v.sort_id = v.sort_id + 10000000 end new_list[#new_list + 1] = v end local sort_func = function ( a, b ) return a.sort_id > b.sort_id end table.sort(new_list, sort_func) item_list = new_list if not item_list or TableSize(item_list) == 0 then return end local len = #item_list self.parent_con = self.award_scroll_con self.award_scroll_obj:SetActive(true) --如果比最大高度要高 那就只能滚动了 local offer_x = 4 local offer_y = 0 local space_x = 8 local space_y = 8 local item_height = 78 if len > self.max_num then self.parent_con = self.award_scroll_con self.award_con_obj:SetActive(false) SetSizeDeltaY(self.award_scroll, (item_height + space_y) * math.ceil(self.max_num/self.col_num)) end local max_height = (item_height + space_y) * (math.ceil(self.max_num/self.col_num)-1)--最大高度限制5行 local x = 0 local y = 0 for i, v in ipairs(item_list) do local item = self.item_list[i] if item == nil then item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.parent_con) item:SetItemSize(78,78) self.item_list[i] = item end local goods_Id, lock = GoodsModel:getInstance():GetMappingTypeId(v.type, v.goodid) local goodVo = GoodsModel:getInstance():GetGoodsBasicByTypeId(goods_Id) local stren_data = nil if goodVo then item:SetData(goods_Id, v.gnum, goodVo.color, stren_data, lock,true,nil) else -- error("没有找到物品信息 "..v.typeId) end item:SetVisible(false,nil,true) end self.scroll_mask_obj:SetActive(true) local index = 0 if self.award_timer_id then GlobalTimerQuest:CancelQuest(self.award_timer_id) self.award_timer_id = nil end local function countDown() index = index + 1 if len >= index then if self.item_list[index] then self.item_list[index]:SetVisible(true,nil,true) local height = (item_height + space_y) * (math.ceil(index/self.col_num) - 1) height = height >= max_height and max_height or height SetSizeDeltaY(self.bg, self.base_height + height) if index > self.max_num then SetSizeDeltaY(self.award_scroll, (item_height + space_y) * math.ceil(self.max_num/self.col_num)) else SetSizeDeltaY(self.award_scroll, (item_height + space_y) * math.ceil(index/self.col_num)) end SetSizeDeltaY(self.parent_con, (item_height + space_y) * math.ceil(index/self.col_num)) --如果大于了就得滚动 if index >= self.max_num then local pos_y = (math.ceil((index - self.max_num) / self.col_num) )* (item_height + space_y) if self.pos_id then TweenLite.Stop(self.pos_id) self.pos_id = nil end self.pos_id = TweenLite.to(self, self.parent_con, TweenLite.UiAnimationType.ANCHORED_POSY, pos_y, 0.15, callback) end end else if self.award_timer_id then GlobalTimerQuest:CancelQuest(self.award_timer_id) self.award_timer_id = nil end self:UpdateTime() end end if not self.award_timer_id then self.award_timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,0.15) end end