源战役客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 

352 rindas
13 KiB

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