源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

205 行
7.4 KiB

-- <*
-- @Author: Saber
-- @Description: 社团场景用 社团boss roll点界面容器
-- *>
GuildSceneRollView = GuildSceneRollView or BaseClass(BaseView)
local GuildSceneRollView = GuildSceneRollView
local TimeUtil = TimeUtil
local string_format = string.format
function GuildSceneRollView:__init()
self.base_file = "guildScene"
self.layout_file = "GuildSceneRollView"
self.layer_name = "Activity"
self.destroy_imm = true
self.use_background = true --全屏界面默认使用这个参数,非全屏界面自行设置
self.change_scene_close = true --是否切换场景时关闭(弹出界面使用)
self.is_set_zdepth = true
self.main_role = RoleManager.Instance.mainRoleInfo
self.model = GuildModel:getInstance()
self.goods_model = GoodsModel:getInstance()
self.cur_record_goods_data = nil
self.item_list = {}
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:UpdateView(true)
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function GuildSceneRollView:Open()
BaseView.Open(self)
end
-- 不关闭界面重新刷新
function GuildSceneRollView:ReOpen( )
self:UpdateView(true)
end
function GuildSceneRollView:LoadSuccess()
local nodes = {
"bg:raw",
"close_btn:obj",
"roll_item_con",
"roll_con",
"record_scroll", "record_scroll/Viewport/record_con",
"my_record_con",
"end_con:obj",
"end_con/end_time_text:tmp",
"roll_item_name:tmp",
}
self:GetChildren(nodes)
self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.roll_item_con)
self.award_item:SetAnchoredPosition(0, 0)
self.award_item:SetItemSize(78, 78)
self.award_item:SetVisible(false)
lua_resM:setOutsideRawImage(self, self.bg_raw, GameResPath.GetViewBigBg("guild_roll_bg"))
-- 界面打开后,社团功能按钮的roll点结算红点不显示,并更新一次按钮红点
self.model._gboss_need_show_claim_red = false
self.model:CheckGuildBossNumRed()
self.model:Fire(GuildModel.UPDATE_SCENE_FUNCBTN_NUM_RED, 4062)
end
function GuildSceneRollView:AddEvent()
local function click_event(target)
if target == self.close_btn_obj then
self:Close()
end
end
AddClickEvent(self.close_btn_obj, click_event)
local function update_roll_record()
self:UpdateRollRecordData()
end
self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_RECORD, update_roll_record)
-- 监听社团boss活动的进行情况
local function update_guild_event(type)
if type == GuildEventType.GuildBossNoon or type == GuildEventType.GuildBossNight then -- 社团boss
self:SetAutoCloseTimer()
end
end
self:BindEvent(self.model, GuildModel.UPDATE_GUILD_EVENT_BY_TYPE, update_guild_event)
end
-- open_select 打开界面时自动选中
function GuildSceneRollView:UpdateView(open_select)
local list = self.model:GetGuildBossRollData()
local function click_callback(index, data)
self.cur_roll_index = index
for k, v in pairs(self.item_list) do
v:SetSelected(index)
end
self:UpdateRollRecordData(data)
end
-- 隐藏所有节点
for k, v in pairs(self.item_list) do
v:SetVisible(false)
end
local offset_x = (650 - 173 * #list) * 0.5 + 35
for k, v in ipairs(list) do
self.item_list[k] = self.item_list[k] or GuildSceneRollItem.New(self.roll_con)
self.item_list[k]:SetAnchoredPosition(offset_x + 173 * (k - 1), -4)
self.item_list[k]:SetData(k, v, click_callback)
self.item_list[k]:SetVisible(true)
end
if open_select then
click_callback(1, list[1])
end
end
-- 更新当前索引节点的roll点记录
function GuildSceneRollView:UpdateRollRecordData(data)
self.cur_record_goods_data = data or self.cur_record_goods_data
local record_data = self.model:GetGuildBossRollRecord(self.cur_record_goods_data.order_id)
self.record_item_creator = self.record_item_creator or self:AddUIComponent(UI.ItemListCreator)
local info = {
data_list = record_data,
scroll_view = self.record_scroll,
item_con = self.record_con,
item_class = GuildSceneRollRecordItem,
start_y = -3,
space_y = 4,
item_height = 30,
create_frequency = 0.01,
alignment = UnityEngine.TextAnchor.UpperLeft,
on_update_item = function(item, i, v)
item:SetData(v, self.cur_record_goods_data.order_id, false)
end,
}
self.record_item_creator:UpdateItems(info)
-- 更新玩家自己的roll点情况
self.my_record_item = self.my_record_item or GuildSceneRollRecordItem.New(self.my_record_con)
local roll_data = self.model:GetGuildBossRollDataByOrderId(self.cur_record_goods_data.order_id)
self.my_record_item:SetAnchoredPosition(0, 0)
local my_record = {
role_id = self.main_role.role_id,
role_name = self.main_role.name,
roll_num = roll_data and roll_data.roll_num or 0
}
self.my_record_item:SetData(my_record, self.cur_record_goods_data.order_id, true)
-- 更新奖励展示
local goods_id = self.cur_record_goods_data.goods_type_id
self.roll_item_name_tmp.text = self.goods_model:getGoodsName(goods_id, true)
self.award_item:SetDataWithMapId(goods_id, self.cur_record_goods_data.num)
self.award_item:SetVisible(true)
end
-- 监听活动的进行情况,活动结束后弹出倒计时关闭界面
function GuildSceneRollView:SetAutoCloseTimer( )
local noonboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNoon)
local nightboss_data = self.model:GetGuildEventByType(GuildEventType.GuildBossNight)
local noon_open = noonboss_data and noonboss_data.is_evt_open
local night_open = nightboss_data and nightboss_data.is_evt_open
-- 活动进行中则不做处理
if noon_open or night_open then return end
-- 活动都已结束,弹出自动关闭的倒计时
self.end_con_obj:SetActive(true)
local close_time = 15 + TimeUtil:getServerTime()
local rest_time
local function on_time_down( ... )
rest_time = close_time - TimeUtil:getServerTime()
if rest_time > 0 then
self.end_time_text_tmp.text = string_format("活动结束,<size=130%%><#ffffff>%s秒后</color></size>关闭界面", rest_time)
else
self:Close()
end
end
self:StopAutoCloseTimer()
self.end_timer_id = GlobalTimerQuest:AddPeriodQuest(on_time_down, 1, -1)
on_time_down()
end
function GuildSceneRollView:StopAutoCloseTimer( )
if self.end_timer_id then
GlobalTimerQuest:CancelQuest(self.end_timer_id)
self.end_timer_id = nil
end
end
function GuildSceneRollView:DestroySuccess( )
for k, v in pairs(self.item_list) do
v:DeleteMe()
end
self.item_list = {}
if self.award_item then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item)
end
self.award_item = nil
if self.my_record_item then
self.my_record_item:DeleteMe()
self.my_record_item = nil
end
-- 是否显示结算红点
local is_finished = self.model:GetGuildBossRollIsFinished()
self.model._gboss_need_show_claim_red = not is_finished
self:StopAutoCloseTimer()
end