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