|
|
- -- <*
- -- @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("<color=%s>时间已过</color>", ColorUtil.GRAY_DARK)
- self.progress_img.enabled = false
- else
- self.progress_img.enabled = true
- self.status_flag_tmp.text = string.format("<color=%s>点击参与</color>", 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("<color=%s>%s 点</color>", "#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("<color=%s>%s 点</color>", "#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
|