DailyRechargeBaseView = DailyRechargeBaseView or BaseClass(BaseView) local DailyRechargeBaseView = DailyRechargeBaseView DailyRechargeBaseView.ShowType = { Recharge = 1, Pellet = 2, } DailyRechargeBaseView.Action = {-- 滚动动画参数 move_y = 0.25,--负数向下 正数向上 每帧移动的距离 delay_time = 2,--玩家手动操作以后 这个时间倒计时 播放动画 space = 15,--间距参数 chuanwen_delay_time = 10,--每条轮播传闻之间的间隔 chuanwen_play_time = 20,--每条轮播传闻从左滚到右的时间 chuanwen_start_time = 1.5,--轮播传闻启动时间 item_height = 70, } function DailyRechargeBaseView:__init() self.base_file = "dailyRecharge" self.layout_file = "DailyRechargeBaseView" self.layer_name = "UI" self.destroy_imm = true self.change_scene_close = true self.append_to_ctl_queue = true --是否要添加进界面堆栈 self.need_show_money = false --是否要显示顶部的金钱栏 -- self.is_set_zdepth = true self.click_bg_toClose = false ------------------------ -- 一级全屏界面: self.hide_maincancas = true --隐藏主界面 self.use_background = true --不一定显示遮罩 -- 二级界面: -- self.hide_maincancas = false --是否需要隐藏主界面,看策划需求 -- self.use_background = true --需要遮罩 ------------------------ self.model = RechargeActivityModel:getInstance() self.show_type = DailyRechargeBaseView.ShowType.Recharge self.award_list = {} self.load_callback = function () self:LoadSuccess() end self.open_callback = function ( ) self:OpenSuccess() end self.close_win_callback = function ( ) self:Close() end self.destroy_callback = function ( ) self:DestroySuccess() end end function DailyRechargeBaseView:Open( sub_info,show_type ) if self.pellet_sub_view and self.pellet_sub_view.isGaming then Message.show("弹球飞行中,请稍后...") return end self.sub_type = sub_info or self.sub_type--子信息 self.show_type = show_type or self.show_type--展示类型 BaseView.Open(self) end function DailyRechargeBaseView:LoadSuccess() local nodes = { "container", --以下节点全部归属于弹珠机 "pelletCon/big_title_1:obj", "pelletCon/btn_help:obj","pelletCon/bg_1:raw", "pelletCon/closeBtn:obj", "pelletCon/con_right/btn_switch/red_switch:obj", "pelletCon/con_right/ScrollView_item:scroll", "pelletCon/con_right/ScrollView_item/Viewport/Content_item", "pelletCon/con_right/btn_switch:obj", "pelletCon/con_right/lb_money_have:tmp:obj", "pelletCon/con_right/icon_cost:img:obj", "pelletCon/btn_back:obj","pelletCon:obj" } self:GetChildren(nodes) self:AddEvent() lua_resM:setOutsideRawImage(self,self.bg_1_raw,GameResPath.GetViewBigBg("dailyRecharge_bg"),false) self.money_view = self.money_view or self:CreateItem(UIMoneyView, self.transform, self.layer_name) self.money_view:SetData() self.money_view:SetPosition(50,ScreenHeight/2-25) self.money_view:ChangeShowFlag( "DailyRechargePellet",self.model:GetPelletTicketId( self.sub_type ) ) self:SetRightReward() end function DailyRechargeBaseView:SetRightReward( ) if self.award_list and (not self.award_list[1]) then -- 一次就好 local base_info = self.model:GetPelletBasicInfo() if not base_info then return end local award_cfg = self.model:GetPelletRewardCfg(true,true,base_info.round) if award_cfg then self:CreateAward(award_cfg) end end end function DailyRechargeBaseView:RefreshRed( ) self.red_switch_obj:SetActive(self.model:GetPelletRed()) end function DailyRechargeBaseView:AddEvent() local function call_back( target ) if target == self.closeBtn_obj then --[[if self.pellet_sub_view and self.pellet_sub_view.isGaming then Message.show("弹球飞行中,请稍后...") return end--]] if self.show_type == DailyRechargeBaseView.ShowType.Pellet then self.show_type = DailyRechargeBaseView.ShowType.Recharge self:UpdateView() else self:Close() end elseif target == self.btn_help_obj then EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, "33106") elseif target == self.btn_switch_obj then if self.pellet_sub_view and self.pellet_sub_view.isGaming then Message.show("弹球飞行中,请稍后...") return end self.show_type = DailyRechargeBaseView.ShowType.Pellet self:UpdateView() elseif target == self.btn_back_obj then self.show_type = DailyRechargeBaseView.ShowType.Recharge self:UpdateView() end end AddClickEvent(self.btn_help_obj,call_back,false) AddClickEvent(self.closeBtn_obj,call_back,false) AddClickEvent(self.btn_switch_obj,call_back,false) AddClickEvent(self.btn_back_obj,call_back,false) local function onBagChange() self:RefreshRightInfo() end self:BindEvent(GoodsModel:getInstance(), GoodsModel.CHANGE_BAGLIST, onBagChange) local function stop_award_action( ... ) self:StopAwardAction() self:StartAwardActionTimeDelay() end AddDragBeginEvent(self.ScrollView_item.gameObject,stop_award_action) local function UPDATE_PELLET_INFO( ) self:SetRightReward() end self:BindEvent(RechargeActivityModel:getInstance(), RechargeActivityModel.UPDATE_PELLET_INFO, UPDATE_PELLET_INFO) end function DailyRechargeBaseView:OpenSuccess() self:UpdateView() end function DailyRechargeBaseView:UpdateView() self.pelletCon_obj:SetActive(self.show_type == DailyRechargeBaseView.ShowType.Pellet) self:RefreshRightInfo() if self.show_type == DailyRechargeBaseView.ShowType.Recharge then self.recharge_sub_view = self.recharge_sub_view or self:CreateItem(DailyRechargeSubView, self.container, self.layer_name,self.sub_type) self.recharge_sub_view:SetVisible( true ) self.recharge_sub_view:UpdateView() local function close_call_back( ... ) self:Close() end local function pellet_call_back( ... ) if self.pellet_sub_view and self.pellet_sub_view.isGaming then Message.show("弹球飞行中,请稍后...") return end self.show_type = DailyRechargeBaseView.ShowType.Pellet self:UpdateView() end self.recharge_sub_view:SetFuncCallBack(pellet_call_back,close_call_back) if self.pellet_sub_view then self.pellet_sub_view:SetVisible( false,true ) if self.pellet_sub_view.isGaming == true then if not self.pellet_sub_view.break_game_mask_req then local validation_data = CustomActivityModel:getInstance():GetPelletEventValidationData() if validation_data.errcode == 1 then -- 验证通过,完成弹珠机 CustomActivityModel:getInstance():Fire(CustomActivityModel.PROTO_CCMD_EVENT, 33184, 0, self.sub_type) end end self.pellet_sub_view:ResetGame() end end else self.pellet_sub_view = self.pellet_sub_view or self:CreateItem(DailyRechargePelletView, self.container, self.layer_name,self.sub_type) self.pellet_sub_view:SetVisible( true,true ) self.pellet_sub_view:ResetGame() if self.recharge_sub_view then self.recharge_sub_view:SetVisible( false ) end end end function DailyRechargeBaseView:RefreshRightInfo( ) local cost_id = self.model:GetPelletTicketId( self.sub_type ) local cost_basic = GoodsModel:getInstance():GetGoodsBasicByTypeId( cost_id ) local num = cost_id and GoodsModel:getInstance():GetTypeGoodsNum( cost_id ) or 0 if cost_basic and cost_basic.goods_icon then lua_resM:setOutsideImageSprite(self,self.icon_cost_img,GameResPath.GetGoodsIcon(cost_basic.goods_icon),false) end self.lb_money_have_tmp.text = "x1" self:RefreshRed() end function DailyRechargeBaseView:DestroySuccess( ) if self.pellet_sub_view and self.pellet_sub_view.isGaming == true then --如果弹珠界面正在动画,而且还没去请求奖励,那么帮他完成 if not self.pellet_sub_view.break_game_mask_req then local validation_data = CustomActivityModel:getInstance():GetPelletEventValidationData() if validation_data.errcode == 1 then -- 验证通过,完成弹珠机 CustomActivityModel:getInstance():Fire(CustomActivityModel.PROTO_CCMD_EVENT, 33184, 0, self.sub_type) end end end if self.time_id then GlobalTimerQuest:CancelQuest(self.time_id) self.time_id = nil end if self.time_id1 then GlobalTimerQuest:CancelQuest(self.time_id1) self.time_id1 = nil end if self.ScrollView_item_scroll then self.ScrollView_item_scroll.onValueChanged:RemoveAllListeners() end if self.award_list then for k,v in pairs(self.award_list) do UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v) end self.award_list = {} end end --------------------------------------------------------新动画start------------------------- function DailyRechargeBaseView:StartAwardAction( )--开始滚动运动 local function func() local new_pos_x,new_pos_y = GetAnchoredPosition(self.Content_item.transform) SetAnchoredPosition(self.Content_item.transform,new_pos_x,new_pos_y + DailyRechargeBaseView.Action.move_y) end if not self.time_id then self.time_id = GlobalTimerQuest:AddPeriodQuest(func,0.01,-1) end end function DailyRechargeBaseView:StopAwardAction()--停止动画 if self.time_id then GlobalTimerQuest:CancelQuest(self.time_id) self.time_id = nil end end function DailyRechargeBaseView:StartAwardActionTimeDelay( )--开启动画播放倒计时 if self.time_id1 then GlobalTimerQuest:CancelQuest(self.time_id1) self.time_id1 = nil end local function func() self:StartAwardAction() end if not self.time_id1 then self.time_id1 = GlobalTimerQuest:AddPeriodQuest(func,DailyRechargeBaseView.Action.delay_time) end end function DailyRechargeBaseView:CreateAward( award_cfg )--创建图片节点 local show_list_data = award_cfg local len = TableSize(show_list_data) self.len = len > 20 and 20 or len local offer_y = (59 + DailyRechargeBaseView.Action.space) self.offer_y = offer_y local width = len*offer_y self.max_right = width/2 self.max_left = -width/2 for i = 1, len do if not self.award_list[i] then self.award_list[i] = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem,self.Content_item) self.award_list[i]:SetPosition(-48,-(offer_y * i)+10) self.award_list[i]:SetItemSize(59,59) self.award_list[i]:SetIsAct(true) end self.award_list[i]:SetDataWithMapId(show_list_data[i][2], show_list_data[i][3], show_list_data[i][1]) end self.all_hight = len*offer_y self.Content_item.sizeDelta = Vector2(DailyRechargeBaseView.Action.item_height,self.all_hight) self.vis_down = -self.all_hight/2--下可视极限 self.vis_up = self.all_hight/2--上可视极限 self.old_pos_x,self.old_pos_y = GetAnchoredPosition(self.Content_item.transform) local callback = function( ) local _,new_pos_y = GetAnchoredPosition(self.Content_item.transform) for k,v in pairs(self.award_list) do if v.transform then local abs_pos = v.transform:TransformPoint(Vector3.zero) local pos = self.transform:InverseTransformPoint(Vector3.New(abs_pos.x, abs_pos.y, 0)) ------------------------------------------无限滚动 到某一极限值 向左开头的item移到最后 向右最后的item移到最前 if new_pos_y < self.old_pos_y then--往下移动 if pos.y < self.vis_down then local real_x,real_y = GetAnchoredPosition(v.transform) real_y = real_y + self.all_hight SetAnchoredPosition(v.transform, real_x,real_y) end else--往上动 if pos.y > self.vis_up then local real_x,real_y = GetAnchoredPosition(v.transform) real_y = real_y - self.all_hight SetAnchoredPosition(v.transform, real_x,real_y) end end end end self.old_pos_y = new_pos_y end self.ScrollView_item_scroll.onValueChanged:AddListener(callback) ------------------------- self:StartAwardAction() end --------------------------------------------------------新动画end------------------------- function DailyRechargeBaseView:HideChangeCall( show_status ) if self.show_type == DailyRechargeBaseView.ShowType.Pellet then if self.pellet_sub_view then --如果弹珠界面正在动画,而且还没去请求奖励,那么帮他完成 if self.pellet_sub_view.isGaming == true and (not self.pellet_sub_view.break_game_mask_req) then local validation_data = CustomActivityModel:getInstance():GetPelletEventValidationData() if validation_data.errcode == 1 then -- 验证通过,完成弹珠机 CustomActivityModel:getInstance():Fire(CustomActivityModel.PROTO_CCMD_EVENT, 33184, 0, self.sub_type) end end self.pellet_sub_view:ResetGame() end end end function DailyRechargeBaseView:CancelHide( ) BaseView.CancelHide(self) if self.is_loaded then if self.show_type == DailyRechargeBaseView.ShowType.Recharge then self.recharge_sub_view = self.recharge_sub_view or self:CreateItem(DailyRechargeSubView, self.container, self.layer_name,self.sub_type) self.recharge_sub_view:SetVisible( true ) self.recharge_sub_view:UpdateView() end end end