-- <*
|
|
-- @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
|