-- <* -- @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("活动结束,<#ffffff>%s秒后关闭界面", 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