-- <* -- @Author: Saber -- @Description: 社团场景 社团boss roll点节点 -- *> GuildSceneRollItem = GuildSceneRollItem or BaseClass(BaseItem) local GuildSceneRollItem = GuildSceneRollItem local TimeUtil = TimeUtil local SetAnchoredPositionX = SetAnchoredPositionX local SetAnchoredPositionY = SetAnchoredPositionY function GuildSceneRollItem:__init(parent_wnd,prefab_asset,layer_name) self.base_file = "guildScene" self.layout_file = "GuildSceneRollItem" self.parent_wnd = parent_wnd self.layer_name = layer_name self.model = GuildModel:getInstance() self.goods_model = GoodsModel:getInstance() self.selected_index = -1 self.index = 0 self.anim_index = 0 self.data = nil self.click_callback = nil self.target_pos_y = 0 -- 用于做动画的y轴偏移 self.roll_delay_time = self.model:GetGuildBossKV("roll_time") -- 几秒后结束roll点 self.x_pos_anim_time = 0.5 self.y_pos_anim_time = 0.5 self.fade_animating = false -- 是否在自己的隐藏动画中 self:Load() end function GuildSceneRollItem:Load_callback() local nodes = { "selected:img", "progress:img", "item_con", "highest_flag:img", "status_flag:tmp", "click_bg:obj", } self:GetChildren(nodes) self.award_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.item_con) self.award_item:SetAnchoredPosition(0, 0) self.award_item:SetItemSize(62, 62) self.award_item:SetVisible(false) self:AddEvents() if self.need_refreshData then self:UpdateView() end end function GuildSceneRollItem:AddEvents( ) local function click_event(target) if target == self.click_bg_obj then if self.click_callback and self.data then self.click_callback(self.index, self.data) end if self.data and self.data.roll_num == 0 then -- 没参与roll点,而且本轮roll点未结束,则点击发送协议参与 local is_finished = self.model:GetGuildBossRollIsFinished() if not is_finished then self.model:Fire(GuildModel.REQUEST_CCMD_EVENT, 40614, 1, self.data.order_id) self:ClearRollTimeEffect() -- roll点后倒计时取消 end end end end AddClickEvent(self.click_bg_obj, click_event) local function update_roll_data() self:UpdateRollStatus() end self:BindEvent(self.model, GuildModel.UPDATE_BOSS_ROLL_DATA, update_roll_data) self:BindEvent(self.model, GuildModel.UPDATE_GUILD_BOSS_HIGHEST_DATA, update_roll_data) end function GuildSceneRollItem:SetData(index, data, click_callback) self.index = index self.anim_index = index -- 动画专用的index self.data = data self.click_callback = click_callback if self.is_loaded then self.need_refreshData = false self:UpdateView() else self.need_refreshData = true end end function GuildSceneRollItem:UpdateView( ) self:UpdateBaseData() self:UpdateRollTimeEffect() self:UpdateRollStatus() self:SetSelected(self.selected_index) end -- 更新基础信息 function GuildSceneRollItem:UpdateBaseData( ) -- 获取道具配置 local goods_id = self.data.goods_type_id self.award_item:SetDataWithMapId(goods_id, self.data.num) self.award_item:SetVisible(true) end -- 更新roll点倒计时表现 并根据roll点与否隐藏倒计时表现 function GuildSceneRollItem:UpdateRollTimeEffect( ) self.progress_img.enabled = true local start_time = self.model:GetGuildBossRollStartTime() local end_time = (start_time + self.roll_delay_time) * 1000 local function roll_timer_func() local left_time = (end_time - TimeUtil:getServerTimeMs()) * 0.001 if left_time <= 0 then self.progress_img.fillAmount = 0 self:ClearRollTimeEffect() else self.progress_img.fillAmount = left_time / self.roll_delay_time end end self:ClearRollTimeEffect() roll_timer_func() self.roll_timer_id = GlobalTimerQuest:AddPeriodQuest(roll_timer_func, 0.02, -1) end function GuildSceneRollItem:ClearRollTimeEffect( ) if self.roll_timer_id then GlobalTimerQuest:CancelQuest(self.roll_timer_id) self.roll_timer_id = nil end end -- 根据当前的roll点情况,修改文本引导 function GuildSceneRollItem:UpdateRollStatus( ) local roll_num = self.data.roll_num local cur_time = TimeUtil:getServerTime() local start_time = self.model:GetGuildBossRollStartTime() local cur_stage_finished = self.model:GetGuildBossRollIsFinished() if self.data.roll_num == 0 then -- 未参与roll点 if cur_stage_finished or ((start_time + self.roll_delay_time) < cur_time) then self.status_flag_tmp.text = string.format("时间已过", ColorUtil.GRAY_DARK) self.progress_img.enabled = false else self.progress_img.enabled = true self.status_flag_tmp.text = string.format("点击参与", ColorUtil.GREEN_DARK) end self.highest_flag_img.enabled = false else if cur_stage_finished then local highest_role_id = self.model:GetGuildBossRollHighestByOrderId(self.data.order_id) if highest_role_id == RoleManager.Instance.mainRoleInfo.role_id then self.status_flag_tmp.text = "" self.highest_flag_img.enabled = true else self.status_flag_tmp.text = string.format("%s 点", "#fdffc2", self.data.roll_num) self.highest_flag_img.enabled = false end self.progress_img.enabled = false else self.status_flag_tmp.text = string.format("%s 点", "#fdffc2", self.data.roll_num) self.highest_flag_img.enabled = false self.progress_img.enabled = false end end end function GuildSceneRollItem:SetSelected(selected_index) self.selected_index = selected_index if self.is_loaded then self.selected_img.enabled = self.selected_index == self.index end end function GuildSceneRollItem:__delete( ) if self.award_item then UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.award_item) end self.award_item = nil self:ClearRollTimeEffect() end