-- <* -- @Author: Saber -- @Description: 2020年8月19日新增 通用快捷充值tip界面 -- *> RechargeTipView = RechargeTipView or BaseClass(BaseView) local RechargeTipView = RechargeTipView RechargeTipView.IconRes = {--注意 这里前8个就是默认类型 [0] = VipConst.IconResData[0], [1] = VipConst.IconResData[1], [2] = VipConst.IconResData[2], [3] = VipConst.IconResData[3], [4] = VipConst.IconResData[4], [5] = VipConst.IconResData[5], [6] = VipConst.IconResData[6], [7] = VipConst.IconResData[7], [8] = VipConst.IconResData[8], [9] = VipConst.IconResData[1], [10] = VipConst.IconResData[2], [11] = VipConst.IconResData[3], [12] = VipConst.IconResData[4], } function RechargeTipView:__init() self.base_file = "common" self.layout_file = "RechargeTipView" self.layer_name = "Top" self.destroy_imm = true self.change_scene_close = true self.is_set_zdepth = true self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置 self.blur_activity_bg = true self.use_show_anim = true self.use_hide_anim = true self.main_vo = RoleManager.Instance.mainRoleInfo self.model = VipModel:getInstance() self.need_show_qc = false -- 是否需要展示快速充值节点 self.need_dia = 0 -- 还需多少彩钻 self.rc_data = nil -- 推荐档位充值配置 self.load_callback = function () self:LoadSuccess() self:AddEvent() self.model:Fire(VipModel.REQUEST_CCMD_EVENT, 15800) end self.qc_con_pos_x_offset = 300 -- 快充节点动画偏移量 self.open_callback = function ( ) self:UpdateView() end self.destroy_callback = function ( ) self:DestroySuccess() end end -- 需要传入相对应的数据结构才可以正常打开界面 -- data = { -- price = 本次付费需要的金额(可不传,不提示价格) -- qc_type = 快充规则类型(默认0) 0:其他类型 1:投资类型 2:招财猫类型 -- enough_callback = func1 界面内不用,在接口处判断是否需要打开本界面用 -- close_callback = func2 关闭界面时的回调 -- pay_callback = func3 充值后的回调 -- } function RechargeTipView:Open(data) self.data = data BaseView.Open(self) end function RechargeTipView:LoadSuccess() local nodes = { -- 弹窗主体部分 "tip_bg:raw", "tip_bg/close_btn:obj", "tip_bg/cancelBtn:obj", "tip_bg/confirmBtn:obj", "tip_bg/tip_content:tmp", -- 快速充值部分 "qc_con:obj:img", "qc_con/diamond_icon:img", "qc_con/pst_bg:obj", "qc_con/pst_val:tmp", "qc_con/qc_name:tmp", "qc_con/qc_price:tmp", "tip_bg/rechargeTipsText:tmp", } self:GetChildren(nodes) self.qc_con_cg = self.qc_con:GetComponent("CanvasGroup") lua_resM:setOutsideImageSprite(self, self.qc_con_img, GameResPath.GetCommonImage("quick_recharge_bg"),true) lua_resM:setOutsideRawImage(self, self.tip_bg_raw, GameResPath.GetViewBigBg("tips_comm_bg6")) self.confirmBtnText_tmp = self:GetChild("tip_bg/confirmBtn/Text"):GetComponent(typeof(TMPro.TextMeshProUGUI)) self.confirmBtnText_tmp.text = "前往" end function RechargeTipView:AddEvent() local function click_event(target) if target == self.close_btn_obj or target == self.cancelBtn_obj then -- 直接关闭 self:Close() elseif target == self.confirmBtn_obj then -- 跳转到充值界面,并关闭界面 OpenFun.Open(158, 0) self:Close() elseif target == self.qc_con_obj then -- 直接走充值sdk if PlatformMgr:getInstance():IsCloudTest( ) then Message.show("试玩版无法充值,请下载正式版本", "fault") return end if ClientConfig.plat_name == "xm_ml_del_test" or ClientConfig.plat_name == "xm_ml_test_ios" or ClientConfig.plat_name == "xm_ml_del_yyb" then Message.show("此次游戏为不计费删档测试,不开启付费功能", "fault") return end if self.rc_data and self.rc_data.product_id then if AppConst.UpdateMode then local callback = function(state) if self.data.pay_callback then self.data.pay_callback() end self:Close() end local custom_info = { pay_title = self.qc_name_tmp.text, id = self.rc_data.product_id, recharge_type = 1, -- 快速充值类型 } local money = tonumber(self.rc_data.money) PlatformMgr:getInstance():PayRequest(money, custom_info, callback) -- 通知后端快速充值 self.model:Fire(VipModel.REQUEST_CCMD_EVENT, 15803, self.rc_data.product_id, self.need_dia, 1) else local cheat_key = "recharge_" .. self.rc_data.product_id print("点击充值卡,通过秘籍购买====:", cheat_key) CheatModel:getInstance():Fire(CheatModel.SEND_CHEAT_TO_SERVER, cheat_key) -- 方便运营后端测试,在gm秘籍这边也发协议记录快捷充值 self.model:Fire(VipModel.REQUEST_CCMD_EVENT, 15803, self.rc_data.product_id, self.need_dia, 1) self:Close() end else OpenFun.Open(158, 0) self:Close() end end end AddClickEvent(self.close_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.cancelBtn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.confirmBtn_obj, click_event, LuaSoundManager.SOUND_UI.NONE) AddClickEvent(self.qc_con_obj, click_event) local function update_recharge_card_data() -- 根据协议返回的充值卡类型调用节点更新逻辑 self:UpdateQuickChargeCon() end self:BindEvent(self.model, VipModel.UPDATE_RECHARGE_CARD_DATA, update_recharge_card_data) end function RechargeTipView:UpdateView() self:UpdateTipCon() -- 更新提示文本内容 end function RechargeTipView:UpdateTipCon( ) local tip_str = "" if self.data.price then -- 存在价格,则计算差额 if self.data.qc_type == 2 then -- 招财猫类型,特殊处理 self.need_dia = self.data.price tip_str = string.format("再充值 %s%s 可转动一次\n是否前往充值?", -- ColorUtil.RED_DARK, WordManager:GetMoneyFaceStr(1), HtmlColorTxt(self.need_dia < 0 and 0 or self.need_dia, ColorUtil.ORANGE_DARK) ) else -- 其他类型 self.need_dia = self.data.price - self.main_vo.jin tip_str = string.format("您的%s不足,还差 %s%s\n是否前往充值?", "彩钻", WordManager:GetMoneyFaceStr(1), HtmlColorTxt(self.need_dia < 0 and 0 or self.need_dia, ColorUtil.YELLOW_DARK) ) end -- 设定快捷充值标志量 self.need_show_qc = self.data.qc_type and self.data.qc_type == 1 -- 投资类型都弹快捷充值 or self.need_dia > 680 -- 其他情况,彩钻差超过680才弹出快捷充值 else self.need_show_qc = false tip_str = "您的彩钻不足,是否前往充值?" end self.tip_content_tmp.text = tip_str local is_recharge = RechargeActivityModel:getInstance():IsRecharge() if is_recharge then--首充过 self.rechargeTipsText_tmp.text = "" else--未首充过 self.rechargeTipsText_tmp.text = string.format("(现在首充,立领888元三天豪礼)",ColorUtil.ORANGE_DARK) end -- 设置tip节点坐标 -- SetAnchoredPositionX(self.tip_bg, self.need_show_qc and -105.5 or 0) end -- 弹出快速充值界面(由协议返回来控制) function RechargeTipView:UpdateQuickChargeCon( ) if self.need_show_qc then -- 需要展示快速充值界面时才处理 -- 充值卡数据 local all_rc_data = self.model.recharge_card_data.product_list local rc_data = {} local rc_temp, rc_cfg, rc_cfg_temp, rt_type = 99999999 local top_rc_cur, top_rc_cfg, top_rt_type = 0 -- 审核服跟非审核服的充值卡数据要做区分 for k,v in ipairs(all_rc_data) do rc_cfg_temp = self.model:GetRechargeProductConfig(v.product_id) if rc_cfg_temp and rc_cfg_temp.is_auth_show == 1 and ClientConfig.alpha_mode then--审核服专用 rc_data[#rc_data + 1] = v elseif rc_cfg_temp and rc_cfg_temp.is_auth_show == 0 and not ClientConfig.alpha_mode then--非审核服 rc_data[#rc_data + 1] = v end end -- 获取到最接近的档位配置 for k, v in pairs(rc_data) do rc_cfg_temp = self.model:GetRechargeProductConfig(v.product_id) if rc_cfg_temp.product_type == 1 then-- 是充值卡类型 -- 获取最合适档位 if rc_cfg_temp.game_currency >= self.need_dia and rc_cfg_temp.game_currency <= rc_temp then rc_cfg = rc_cfg_temp rc_temp = rc_cfg_temp.game_currency rt_type = v.return_type end -- 获取最高档位 if top_rc_cur < rc_cfg_temp.game_currency then top_rc_cur = rc_cfg_temp.game_currency top_rc_cfg = rc_cfg_temp top_rt_type = v.return_type end end end -- 没有合适的档位就用最高档位 rc_cfg = rc_cfg or top_rc_cfg rt_type = rt_type or top_rt_type -- 全局保存 self.rc_data = rc_cfg -- 存在最接近的档位配置,加载数据,启动动画 if rc_cfg then -- 加载中间的彩钻icon local icon_cfg = RechargeTipView.IconRes[tonumber(rc_cfg.product_id)] or {} local icon_res = icon_cfg.res or "re_icon_8" lua_resM:setOutsideImageSprite(self, self.diamond_icon_img, GameResPath.GetVipIconImage(icon_res), true) -- SetAnchoredPosition(self.diamond_icon, icon_cfg.x or -7.5, icon_cfg.y or 25) SetAnchoredPosition(self.diamond_icon, icon_cfg.x + 2, icon_cfg.y - 19) -- 加载档位标题和金额 self.qc_name_tmp.text = Trim(rc_cfg.product_name) self.qc_price_tmp.text = "¥"..rc_cfg.money -- 获取充值返利相关 local rc_rt = self.model:GetRechargeReturnConfig(rc_cfg.product_id, rt_type or "") self.pst_bg_obj:SetActive(rc_rt and true or false) -- 赠送的货币类型固定2 self.pst_val_tmp.text = rc_rt and (WordManager:GetMoneyFaceStr(2) .. rc_rt.return_gold) or "" -- 播放动画 self:StartQuickRechargeConAnim() end end end -- 播放快充动画 function RechargeTipView:StartQuickRechargeConAnim( ) self.qc_con_obj:SetActive(true) SetAnchoredPositionX(self.qc_con, self.qc_con.anchoredPosition.x - self.qc_con_pos_x_offset) self.qc_con_cg.alpha = 0 local anim_time = 0.8 self.qc_con_alpha_anim_id = TweenLite.to(self, self.qc_con_cg, TweenLite.UiAnimationType.ALPHA, 1, anim_time) self.qc_con_posx_anim_id = TweenLite.to(self, self.qc_con, TweenLite.UiAnimationType.ANCHORED_POSX, self.qc_con.anchoredPosition.x + self.qc_con_pos_x_offset, anim_time, nil, TweenFunc.EASE_OUT_QUINT) end function RechargeTipView:DestroySuccess( ) if self.qc_con_alpha_anim_id then TweenLite.Stop(self.qc_con_alpha_anim_id) self.qc_con_alpha_anim_id = nil end if self.qc_con_posx_anim_id then TweenLite.Stop(self.qc_con_posx_anim_id) self.qc_con_posx_anim_id = nil end if self.data.close_callback then self.data.close_callback() end end